본문 바로가기
공부한 것들../Pandas

Pandas 수치형 데이터 & 범주형 데이터 활용

by bottle-an00 2024. 9. 13.

코드 프레소 [Python으로 배우는 Pandas] 강의 내용 정리

# 수치형 데이터 & 범주형 데이터..?

수치형 데이터는 관측된 값이 수치로 측정되는 데이터이다. "연속형" 데이터라고도 한다.

값의 평균, 중앙값, 표준편차 등과 같은 접근이 의미가 있는 데이터이다.

(ex :: 키, 몸무계, 시험점수, 자동차 판매 건수 ..etc)

 

범주형 데이터는 데이터가 범주 또는, 항목으로 표현되는 것으로 숫자로 표현되기도 하나, 수치적인 의미가 없다.

(ex:: 성별, 국적, 거주지역, 메달 순위, 설문조사 결과 ..etc)

 

범주형 데이터에 접근시 범주의 종류나 빈도수로 접근할 수 있다.

(ex:: 요일별 커피 판매수 ) 

 

#예시 코드

# 수치형 데이터 확인 및 데이터 정보 출력 

import pandas as pd 

# 실습 데이터 생성
score = { 'name' : ['Jessi', 'Emma', 'Alex', 'Jessi', 'Tom'],
          'age': [20, 24, 23, 20, 27],
          'score': [100, 95, 80, 85, 97], 
          'grade': ['A','A','B','B','A'],
          'subject':['python', 'java','python', 'c','java']}
          
score_df = pd.DataFrame(data=score)
print(score_df)

print("\nGenerate Descriptive Statistics")
print(score_df.describe())

 

    name  age  score grade subject
0  Jessi   20    100     A  python
1   Emma   24     95     A    java
2   Alex   23     80     B  python
3  Jessi   20     85     B       c
4    Tom   27     97     A    java

Generate Descriptive Statistics
             age       score
count   5.000000    5.000000
mean   22.800000   91.400000
std     2.949576    8.502941
min    20.000000   80.000000
25%    20.000000   85.000000
50%    23.000000   95.000000
75%    24.000000   97.000000
max    27.000000  100.000000

위의 소스 코드 결과를 살펴보면 describe()를 호출하였을때 연산 가능한 데이터(수치형 데이터)인 age와 score에 대한 count, mean, std, min, max, 값이 출력되는 것을 볼 수 있다. (중간에 퍼센테이지 값은 데이터의 해당 퍼센테이지의 값을 의미한다.)

#  범주형 데이터 확인 및 데이터 정보 출력

import pandas as pd 

# 실습 데이터 생성
score = { 'name' : ['Jessi', 'Emma', 'Alex', 'Jessi', 'Tom'],
          'age': [20, 24, 23, 20, 27],
          'score': [100, 95, 80, 85, 97], 
          'grade': ['A','A','B','B','A'],
          'subject':['python', 'java','python', 'c','java']}
          
score_df = pd.DataFrame(data=score)
print(score_df)

print("\nGenerate Descriptive Statistics for Categorical")
print(score_df[['grade','subject']].describe())
    name  age  score grade subject
0  Jessi   20    100     A  python
1   Emma   24     95     A    java
2   Alex   23     80     B  python
3  Jessi   20     85     B       c
4    Tom   27     97     A    java

Generate Descriptive Statistics for Categorical
       grade subject
count      5       5
unique     2       3
top        A  python
freq       3       2

 

이전 수치형 데이터에 대한 describe()를 호출했을 때와는 달리 count,unique,top,freq 값이 출력되는 것을 볼 수 있다.

 

# describe(include ='all') 예시 코드 

import pandas as pd 

# 실습 데이터 생성
score = { 'name' : ['Jessi', 'Emma', 'Alex', 'Jessi', 'Tom'],
          'age': [20, 24, 23, 20, 27],
          'score': [100, 95, 80, 85, 97], 
          'grade': ['A','A','B','B','A'],
          'subject':['python', 'java','python', 'c','java']}
          
score_df = pd.DataFrame(data=score)
print(score_df)

print("\nGenerate Descriptive Statistics for all data")
print(score_df.describe(include = 'all'))
name  age  score grade subject
0  Jessi   20    100     A  python
1   Emma   24     95     A    java
2   Alex   23     80     B  python
3  Jessi   20     85     B       c
4    Tom   27     97     A    java

Generate Descriptive Statistics for all data
         name        age       score grade subject
count       5   5.000000    5.000000     5       5
unique      4        NaN         NaN     2       3
top     Jessi        NaN         NaN     A  python
freq        2        NaN         NaN     3       2
mean      NaN  22.800000   91.400000   NaN     NaN
std       NaN   2.949576    8.502941   NaN     NaN
min       NaN  20.000000   80.000000   NaN     NaN
25%       NaN  20.000000   85.000000   NaN     NaN
50%       NaN  23.000000   95.000000   NaN     NaN
75%       NaN  24.000000   97.000000   NaN     NaN
max       NaN  27.000000  100.000000   NaN     NaN

결과를 살펴보면 수치형 데이터와 범주형  데이터에 대한 정보가 함께출력되는 것을 볼 수 있다. 다만, NaN으로 표현되는 결측치도 같이 출력됨을 볼 수 있다. 이는 해당 column의 데이터는 해당 row의 정보로 연산되지 않음을 의미한다.

 

# unique() 활용 (범주형 데이터)

import pandas as pd 

# 실습 데이터 생성
score = { 'name' : ['Jessi', 'Emma', 'Alex', 'Jessi', 'Tom'],
          'age': [20, 24, 23, 20, 27],
          'score': [100, 95, 80, 85, 97], 
          'grade': ['A','A','B','B','A'],
          'subject':['python', 'java','python', 'c','java']}
          
score_df = pd.DataFrame(data=score)
print(score_df)

print('\nThe unique Values')
print(score_df['subject'].unique())
 name  age  score grade subject
0  Jessi   20    100     A  python
1   Emma   24     95     A    java
2   Alex   23     80     B  python
3  Jessi   20     85     B       c
4    Tom   27     97     A    java

The unique Values
['python' 'java' 'c']

 

# value_counts() 활용 (범주형 데이터)

import pandas as pd 

# 실습 데이터 생성
score = { 'name' : ['Jessi', 'Emma', 'Alex', 'Jessi', 'Tom'],
          'age': [20, 24, 23, 20, 27],
          'score': [100, 95, 80, 85, 97], 
          'grade': ['A','A','B','B','A'],
          'subject':['python', 'java','python', 'c','java']}
          
score_df = pd.DataFrame(data=score)
print(score_df)

print('\nThe Value Counts')
print(score_df['subject'].value_counts())

#정규화하여 value count를 표현
print('\nThe Normalized Value Counts')
print(score_df['subject'].value_counts(normalize = True))
  name  age  score grade subject
0  Jessi   20    100     A  python
1   Emma   24     95     A    java
2   Alex   23     80     B  python
3  Jessi   20     85     B       c
4    Tom   27     97     A    java

The Value Counts
python    2
java      2
c         1
Name: subject, dtype: int64

The Normalized Value Counts
python    0.4
java      0.4
c         0.2
Name: subject, dtype: float64