본문 바로가기
Language/파이썬

파이썬 '판다스 데이터 분석' - 데이터프레임 구조(shape, info(),describe(),value_counts()..), 통계함수(mean(), median(), min(), max(), std(), corr())

by javapp 자바앱 2021. 7. 8.
728x90

 

데이터셋의 내용과 구조를 개략적으로 살펴볼 수 있는 함수들과

통계함수들을 살펴볼 것이다.

auto-mpg.csv
0.02MB

데이터프레임 구조

import pandas as pd

df = pd.read_csv('data/auto-mpg.csv', header=None)
# 열 이름 지정
df.columns= ['mpg','cylinders','displacement','horsepower','weight', 'acceleration','model year','origin','name']
df.head()

<결과>

	mpg	cylinders	displacement	horsepower	weight	acceleration	model year	origin	name
0	18.0	8	307.0		130.0	3504.0		12.0		70		1	chevrolet chevelle malibu
1	15.0	8	350.0		165.0	3693.0		11.5		70		1	buick skylark 320
2	18.0	8	318.0		150.0	3436.0		11.0		70		1	plymouth satellite
3	16.0	8	304.0		150.0	3433.0		12.0		70		1	amc rebel sst
4	17.0	8	302.0		140.0	3449.0		10.5		70		1	ford torino

 

Return a tuple representing the dimenstionality of the DataFrame

데이터프레임의 크기(행, 열) -> 튜플

df.shape

<결과>
(398, 9)

 

데이터프레임 기본 정보
df.info()

<결과>
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 398 entries, 0 to 397
Data columns (total 9 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   mpg           398 non-null    float64
 1   cylinders     398 non-null    int64  
 2   displacement  398 non-null    float64
 3   horsepower    398 non-null    object 
 4   weight        398 non-null    float64
 5   acceleration  398 non-null    float64
 6   model year    398 non-null    int64  
 7   origin        398 non-null    int64  
 8   name          398 non-null    object 
dtypes: float64(4), int64(3), object(2)
memory usage: 28.1+ KB

 

데이터프레임의 기술 통계 정보 요약
카운트, 평균, 표준편차, 최대값, 최소값, 중간값, unique(고유값의 수), top(최빈값), freq(빈도수)

df.describe()

print(df.describe(),end='\n\n\n')
print(df.describe(include='all'))

 

<결과>
		mpg   cylinders  displacement       weight  acceleration  \
count  398.000000  398.000000    398.000000   398.000000    398.000000   
mean    23.514573    5.454774    193.425879  2970.424623     15.568090   
std      7.815984    1.701004    104.269838   846.841774      2.757689   
min      9.000000    3.000000     68.000000  1613.000000      8.000000   
25%     17.500000    4.000000    104.250000  2223.750000     13.825000   
50%     23.000000    4.000000    148.500000  2803.500000     15.500000   
75%     29.000000    8.000000    262.000000  3608.000000     17.175000   
max     46.600000    8.000000    455.000000  5140.000000     24.800000   

       model year      origin  
count  398.000000  398.000000  
mean    76.010050    1.572864  
std      3.697627    0.802055  
min     70.000000    1.000000  
25%     73.000000    1.000000  
50%     76.000000    1.000000  
75%     79.000000    2.000000  
max     82.000000    3.000000  


               mpg   cylinders  displacement horsepower       weight  \
count   398.000000  398.000000    398.000000        398   398.000000   
unique         NaN         NaN           NaN         94          NaN   
top            NaN         NaN           NaN      150.0          NaN   
freq           NaN         NaN           NaN         22          NaN   
mean     23.514573    5.454774    193.425879        NaN  2970.424623   
std       7.815984    1.701004    104.269838        NaN   846.841774   
min       9.000000    3.000000     68.000000        NaN  1613.000000   
25%      17.500000    4.000000    104.250000        NaN  2223.750000   
50%      23.000000    4.000000    148.500000        NaN  2803.500000   
75%      29.000000    8.000000    262.000000        NaN  3608.000000   
max      46.600000    8.000000    455.000000        NaN  5140.000000   

        acceleration  model year      origin        name  
count     398.000000  398.000000  398.000000         398  
unique           NaN         NaN         NaN         305  
top              NaN         NaN         NaN  ford pinto  
freq             NaN         NaN         NaN           6  
mean       15.568090   76.010050    1.572864         NaN  
std         2.757689    3.697627    0.802055         NaN  
min         8.000000   70.000000    1.000000         NaN  
25%        13.825000   73.000000    1.000000         NaN  
50%        15.500000   76.000000    1.000000         NaN  
75%        17.175000   79.000000    2.000000         NaN  
max        24.800000   82.000000    3.000000         NaN  

 

데이터 개수

df.count()

# 데이터 개수
print(df.count())
# 값에 대한 연산도 가능 하다. !
df.count()/len(df)
<결과>
mpg             398
cylinders       398
displacement    398
horsepower      398
weight          398
acceleration    398
model year      398
origin          398
name            398
dtype: int64
mpg             1.0
cylinders       1.0
displacement    1.0
horsepower      1.0
weight          1.0
acceleration    1.0
model year      1.0
origin          1.0
name            1.0
dtype: float64

 

각 열의 고유값 갯수

df['model year'].value_counts()

df['model year'].value_counts()
<결과>
73.0    40
78.0    36
76.0    34
82.0    31
75.0    30
81.0    29
70.0    29
79.0    29
80.0    29
77.0    28
72.0    28
71.0    28
74.0    27
Name: model year, dtype: int64

 

dropna = False : 누락된 값도 표시 

df['deck'].value_counts(dropna = False)
<결과>
NaN    688
C       59
B       47
D       33
E       32
A       15
F       13
G        4
Name: deck, dtype: int64

 

각 열의 고유값 개수 의 타입

print(type(df['model year'].value_counts()))
<class 'pandas.core.series.Series'>

 

 

통계함수

 

평균값

df.mean()
df['weight'].mean()
df[['weight', 'model year']].mean()
<결과>
mpg               23.514573
cylinders          5.454774
displacement     193.425879
weight          2970.424623
acceleration      15.568090
model year        76.010050
origin             1.572864
dtype: float64

<결과>
2970.424623115578

<결과>
weight        2970.424623
model year      76.010050
dtype: float64

 

중간값

df.median()
mpg               23.0
cylinders          4.0
displacement     148.5
weight          2803.5
acceleration      15.5
model year        76.0
origin             1.0
dtype: float64

 

최대값, 최소값

print(df.max(),end='\n\n')
print(df.min())
mpg               46.6
cylinders          8.0
displacement     455.0
weight          5140.0
acceleration      24.8
model year        82.0
origin             3.0
dtype: float64

mpg                9.0
cylinders          3.0
displacement      68.0
weight          1613.0
acceleration       8.0
model year        70.0
origin             1.0
dtype: float64

 

표준편차

df.std()
<결과>
mpg               7.815984
cylinders         1.701004
displacement    104.269838
weight          846.841774
acceleration      2.757689
model year        3.697627
origin            0.802055
dtype: float64

 

상관계수

print(df.corr(),end='\n\n')
print(df[['cylinders','model year']].corr())
<결과>
                   mpg  cylinders  displacement    weight  acceleration  \
mpg           1.000000  -0.775396     -0.804203 -0.831741      0.420289   
cylinders    -0.775396   1.000000      0.950721  0.896017     -0.505419   
displacement -0.804203   0.950721      1.000000  0.932824     -0.543684   
weight       -0.831741   0.896017      0.932824  1.000000     -0.417457   
acceleration  0.420289  -0.505419     -0.543684 -0.417457      1.000000   
model year    0.579267  -0.348746     -0.370164 -0.306564      0.288137   
origin        0.563450  -0.562543     -0.609409 -0.581024      0.205873   

              model year    origin  
mpg             0.579267  0.563450  
cylinders      -0.348746 -0.562543  
displacement   -0.370164 -0.609409  
weight         -0.306564 -0.581024  
acceleration    0.288137  0.205873  
model year      1.000000  0.180662  
origin          0.180662  1.000000  

            cylinders  model year
cylinders    1.000000   -0.348746
model year  -0.348746    1.000000

 

Q. 상관계수 문제

통계에서 30% 이상을 약한 상관관계 , 70% 이상을 강한 상관관계라고 한다.

<출력 결과>
mpg            -0.775396
cylinders       1.000000
displacement    0.950721
weight          0.896017
acceleration   -0.505419
model year     -0.348746
origin         -0.562543
Name: cylinders, dtype: float64

cylinders mpg는 강한 상관관계
cylinders cylinders는 강한 상관관계
cylinders displacement는 강한 상관관계
cylinders weight는 강한 상관관계
cylinders acceleration는 약한 상관관계
cylinders model year는 약한 상관관계
cylinders origin는 약한 상관관계

정답

더보기

print(df.corr().loc['cylinders'],end='\n\n')
for i in df.corr().loc['cylinders'].index: #['mpg', 'cylinders', 'displacement', 'weight', 'acceleration','model year', 'origin']
    if abs(df.corr().loc['cylinders'][i]) > 0.7:
        print(f'cylinders {i}는 강한 상관관계')
    elif abs(df.corr().loc['cylinders'][i]) > 0.3:
        print(f'cylinders {i}는 약한 상관관계')
df.corr()

 

댓글