[Python.Pandas] Built-in Function 이해하기 - .describe()

2020. 12. 22. 05:00Python과 머신러닝/Pandas 데이터 분석

0. 이전 포스트

 

[Python.Pandas] Lambda함수와 Map함수 이해하기 - Series.map

1. Lambda란? In [1]:def f1(x,y): return x+y In [2]:f1(1,2) Out[2]:3 In [3]:f2=lambda x,y:x+y In [4]:f2(1,2) Out[4]:3 Lambda란 함수를 한 줄로 표현하는 익명 함수 기법이다. lisp 언어에서 시작된 기법으..

coding-grandpa.tistory.com

 

[Python.Pandas] Map 함수 실전편 + .replace함수 사용하기

1. wget으로 데이터 다운로드하여 .unique로 데이터 종류 분석하기 In [1]:import wget url = 'https://raw.githubusercontent.com/rstudio/Intro/master/data/wages.csv' wget.download(url) Out[1]:'wages.csv'..

coding-grandpa.tistory.com

 

[Python.Pandas] DataFrame.apply, DataFrame.applymap

1. DataFrame.Apply - 하나의 Series가 아닌 전체 DataFrame에 함수를 적용하고 싶을 때 In [1]:from pandas import Series, DataFrame import pandas as pd import numpy as np In [2]:df = pd.read_csv("wages.c..

coding-grandpa.tistory.com

 

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

 

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)를 할 경우, 두 변수간의 공분산을 구할 수 있다.