[Python.Pandas] Built-in Function 이해하기 - .describe()
2020. 12. 22. 05:00ㆍPython과 머신러닝/Pandas 데이터 분석
0. 이전 포스트
- 2020/12/19 - [Python과 머신러닝/Pandas 데이터 분석] - [Python.Pandas] Lambda함수와 Map함수 이해하기 - Series.map
- 2020/12/20 - [Python과 머신러닝/Pandas 데이터 분석] - [Python.Pandas] Map 함수 실전편 + .replace함수 사용하기
- 2020/12/21 - [Python과 머신러닝/Pandas 데이터 분석] - [Python.Pandas] DataFrame.apply, DataFrame.applymap
1. DataFrame.describe 및 데이터 초기 분석
In [1]:from pandas import Series, DataFrame
import pandas as pd
import numpy as np
In [2]:df = pd.read_csv('wages.csv')
df.head(2).T
Out[2]:
0 1
earn 79571.3 96397
height 73.89 66.23
sex male female
race white white
ed 16 16
age 49 62
In [3]:df.describe()
Out[3]:
earn height ed age
count 1379.000000 1379.000000 1379.000000 1379.000000
mean 32446.292622 66.592640 13.354605 45.328499
std 31257.070006 3.818108 2.438741 15.789715
min -98.580489 57.340000 3.000000 22.000000
25% 10538.790721 63.720000 12.000000 33.000000
50% 26877.870178 66.050000 13.000000 42.000000
75% 44506.215336 69.315000 15.000000 55.000000
max 317949.127955 77.210000 18.000000 95.000000
- 데이터를 처음 불러오면 가장 먼저 위와 같은 동작을 하여 보는 것이 매우 도움이 된다.
- In[2]의 df.head(2).T는 첫 두 개의 데이터를 Transpose 해서 보여주는 함수이다. 이를 통해 어떤 Series가 존재하고, 각 Series의 값들은 대충 어떻게 생겼는지를 파악할 수 있다.
- In[3]의 df.describe()는 df 중에서 숫자형 데이터에 대한 count/mean/std/min/max 등의 기본 통계형 데이터를 한 번에 보여준다.
- 범주형 데이터는 제외된 것을 확인할 수 있다. 그렇기 때문에 전체 Series가 어떻게 생겼는지를 먼저 보고, describe함수를 통해서 각 column을 이해하는 것이 좋다.
2. 범주형 데이터 Encoding 하기
In [4]:key=df.race.unique()
key
Out[4]:array(['white', 'other', 'hispanic', 'black'],
dtype=object)
In [5]:value=range(len(df.race.unique()))
value
Out[5]:range(0, 4)
In [6]:df['race_code'] = df['race'].replace(to_replace=key, value=value)
df[['race', 'race_code']].head(9)
Out[6]:
race race_code
0 white 0
1 white 0
2 white 0
3 other 1
4 white 0
5 white 0
6 white 0
7 white 0
8 hispanic 2
- 1번에서 봤듯이, 범주형 데이터는 기본적인 Built-in function에서 소외(?) 되기 마련이다.
- 그렇기 때문에 범주형으로 되어있는 데이터도, 숫자형으로 변형하여 주는 것이 분석에 유리하고,
이 과정을 encoding이라 한다. - Encoding과 관련된 이전 포스트
2020/12/19 - [Python과 머신러닝/Pandas 데이터 분석] - [Python.Pandas] Lambda함수와 Map함수 이해하기 - Series.map
2020/12/20 - [Python과 머신러닝/Pandas 데이터 분석] - [Python.Pandas] Map 함수 실전편 + .replace함수 사용하기 - 위와 같이 변형하고자 하는 key와, key가 변형되었으면 하는 결과 값 value를 .replace로 제공하면, race_code라는 새로운 열에 0~3의 값으로 변형된 것을 확인할 수 있다.
3. .sum 함수
In [7]:numeric_cols=['earn', 'height', 'ed', 'age']
numeric_cols
Out[7]:['earn', 'height', 'ed', 'age']
In [8]:df[numeric_cols].sum(axis=1) # 숫자인 column 들의 합
Out[8]:0 79710.189011
1 96541.218643
2 48823.436947
3 80652.316153
4 82212.425498
...
1374 30290.060363
1375 25018.829514
1376 13823.311312
1377 95563.664410
1378 9686.681857
Length: 1379, dtype: float64
In [9]:df.sum(axis=1) #동일한 값이 나옴
Out[9]:0 79710.189011
1 96541.218643
2 48823.436947
3 80652.316153
4 82212.425498
...
1374 30290.060363
1375 25018.829514
1376 13823.311312
1377 95563.664410
1378 9686.681857
Length: 1379, dtype: float64
- Pandas는 다양한 함수를 이미 제공하고 있다. 이를 Built-in Function이라고 한다.
- 그중 가장 처음으로 배울 것은 .sum() 함수이다.
- .sum 함수는 주어진 DataFrame의 모든 Column들을 row별로 합하는 함수이다.
- In[9]에서 보다시피 전체 DataFrame에 .sum을 하면 숫자 데이터들만 더해준다.
- sum 외에도 .sub()/.mean()/.min()/.max()/.count()/.median()/.var() 등의 함수들도 비슷하게 제공된다.
4. .isnull() 함수
In [10]:df['NaN'] = np.NaN
df.isnull().sum()
Out[10]:earn 0
height 0
sex 0
race 0
ed 0
age 0
race_code 0
NaN 1379
dtype: int64
- isnull함수는 각 element 별로 NaN 값인지 아닌지를 True/False로 반환하는 함수이다.
- .isnull에 .sum을 하게 되면 True의 개수를 더해주는 함수이다.
- 기존 데이터는 전부 값이 있기 때문에 NaN이라는 Series를 추가하였고, NaN column만 1379개이다.
5. pd.options.display.max_rows
In [11]:pd.options.display.max_rows=100
In [12]:df
Out[12]:
earn height sex race ed age race_code NaN
79571.299011 73.89 male white 16 49 0 NaN
96396.988643 66.23 female white 16 62 0 NaN
48710.666947 63.77 female white 16 33 0 NaN
80478.096153 63.22 female other 16 95 1 NaN
82089.345498 63.08 female white 17 43 0 NaN
... ... ... ... ... ... ... ...
30173.380363 71.68 male white 12 33 0 NaN
24853.519514 61.31 female white 18 86 0 NaN
13710.671312 63.64 female white 12 37 0 NaN
95426.014410 71.65 male white 12 54 0 NaN
9575.461857 68.22 male white 12 31 0 NaN
1379 rows × 8 columns
- max_rows값은 전체 데이터를 보고 싶을 때 값을 수정해줄 수 있다.
- 예를 들어 현재 데이터는 1379개의 row로 구성되어있으니, max_rows=2000으로 설정하면
- 중간의 ... 없이 전체 데이터를 출력해준다.
- 필요에 따라 사용하지만, 대부분의 경우 속도가 느려져서 불편한 경우가 더 많으니 사용에 주의가 필요하다.
6. .sort_values 함수를 통한 Data 정렬
In [13]:df.sort_values(['age', 'earn'], ascending=True)
Out[13]:
earn height sex race ed age race_code NaN
1038 -56.321979 67.81 male hispanic 10 22 2 NaN
800 -27.876819 72.29 male white 12 22 0 NaN
963 -25.655260 68.90 male white 12 22 0 NaN
1105 988.565070 64.71 female white 12 22 0 NaN
801 1000.221504 64.09 female white 12 22 0 NaN
...
993 32809.632677 59.61 female other 16 92 1 NaN
102 39751.194030 67.14 male white 12 93 0 NaN
331 39169.750135 64.79 female white 12 95 0 NaN
809 42963.362005 72.94 male white 12 95 0 NaN
3 80478.096153 63.22 female other 16 95 1 NaN
1379 rows × 8 columns
- Excel에서도 가장 많이 사용되는 기능은 Filter 후 정렬일 것이다.
- 이와 동일한 기능을 .sort_values 함수를 통해서 pandas built-in function으로 제공한다.
- In[13]은 'age', 'earn' 순서대로 정렬하고, 정렬 기준은 오름차순이라는 것을 전달한다.
- 그에 따라 데이터가 정렬된 것을 확인할 수 있다.
7. .corr 함수를 통한 변수간 상관관계 분석
In [14]:df.corr()
Out[14]:
earn height ed age race_code
earh 1.000000 0.291600 0.350374 0.074003 -0.063977
height 0.291600 1.000000 0.114047 -0.133727 -0.045974
ed 0.350374 0.114047 1.000000 -0.129802 -0.049487
age 0.074003 -0.133727 -0.129802 1.000000 -0.056879
race_code -0.063977 -0.045974 -0.049487 -0.056879 1.000000
- dataframe.corr() 함수를 통해 dataframe의 모든 변수간의 상관관계를 파악할 수 있다.
8. 특정 변수 간의 상관관계 분석
In [15]:df.age.corr(df.earn)
Out[15]:0.07400349177836055
In [16]:df.age[(df.age<45)&(df.age>15)].corr(df.earn)
Out[16]:0.31411788725189044
In [17]:df.corrwith(df.earn)
Out[17]:earn 1.000000
height 0.291600
ed 0.350374
age 0.074003
race_code -0.063977
dtype: float64
- In[15] : Series.corr(Series) 형태로 넣으면, 두개의 변수 간의 상관관계 값을 추출할 수 있다
- In[16] : Series의 형태만 맞춰주면 되기 때문에, Series에 조건을 추가하여 filter 할수도 있다.
- In[17] : .corrwith 함수는 dataframe.corrwith(Series) 형태로 사용되는 함수이다. 즉, 하나의 변수가 dataframe 내의 다른 변수들과 어떤 상관관계를 보이는지를 볼 때 사용되는 함수이다.
9. .cov 함수를 통한 Covariance(공분산) 분석
In [18]:df.cov()
Out[18]:
earn height ed age race_code
earh 9.770044e+08 34800.406853 26708.239215 36523.699210 -1899.083575
height 3.480041e+04 14.577946 1.061937 -8.061985 -0.166699
ed 2.670824e+04 1.061937 5.947459 -4.998284 -0.114611
age 3.652370e+04 -8.061985 -4.998284 249.315087 -0.852894
race_code -1.899084e+03 -0.166699 -0.114611 -0.852894 0.901869
In [19]:df.age.cov(df.earn)
Out[19]:36523.6992104089
- 공분산도 유사한 원리로 동작한다.
- DataFrame.cov()를 할 경우 DataFrame 내의 모든 변수들 간의 공분산을 계산한다.
- Series.cov(Series)를 할 경우, 두 변수간의 공분산을 구할 수 있다.
'Python과 머신러닝 > Pandas 데이터 분석' 카테고리의 다른 글
[Python.Pandas] Groupby 이해하기 - 2편 (0) | 2020.12.24 |
---|---|
[Python.Pandas] Groupby 함수 이해하기 - 1편 (0) | 2020.12.23 |
[Python.Pandas] DataFrame.apply, DataFrame.applymap (0) | 2020.12.21 |
[Python.Pandas] Map 함수 실전편 + .replace함수 사용하기 (0) | 2020.12.20 |
[Python.Pandas] Lambda함수와 Map함수 이해하기 - Series.map (0) | 2020.12.19 |