본문 바로가기
Python 과 머신러닝/II. 데이터처리 문법

[Python 머신러닝] 1장. Pandas - (2) 기술통계, DataFrame 병합

by JoyfulS 2019. 10. 16.

< 공부한 내용 >

3. 기술 통계 (Descriptive Statistics)

4. DataFrame 병합

 

 

3. 기술 통계 (Descriptive Statistics)

"""
1. DataFrame 요약통계량
2. 변수 간의 상관성 분석
"""

import pandas as pd

product = pd.read_csv("../data/product.csv")
product.info()
product.head()
product.tail()

# 기술통계량 구하기
product.describe()  # R에서 사용한 summary( )와 유사 
'''
                a           b           c
count  264.000000  264.000000  264.000000
mean     2.928030    3.132576    3.094697
std      0.970345    0.859657    0.828744
min      1.000000    1.000000    1.000000
25%      2.000000    3.000000    3.000000
50%      3.000000    3.000000    3.000000
75%      4.000000    4.000000    4.000000
max      5.000000    5.000000    5.000000
'''

# 행/열 통계량
product.mean(axis = 0) # 열 단위 평균
product.mean(axis = 1) # 행 단위 평균

product.sum(axis = 0) # 합계
product.min(axis = 0) # 최소
product.max(axis = 0) # 최대

# 산포도 : 분산, 표준편차
product.var(axis = 0) # 분산
product.std(axis = 0) # 표준편차

# 빈도수 : 범주형
product['a'].value_counts()
'''  각 범주별 값들의 개수
3    126
4     64
2     37
1     30
5      7
'''

# 범주 확인
product['c'].unique()
# [3, 2, 4, 5, 1]

# 변수 간의 상관분석
product.corr()

# - 모든 변수에 대한 상관분석
'''
          a         b         c
a  1.000000  0.499209  0.467145
b  0.499209  1.000000  0.766853
c  0.467145  0.766853  1.000000
'''

product['b'].corr(product['c']) 

# - 두 변수 간의 상관분석
# 0.7668526996408369




#########################
###  iris dataset
#########################

iris.csv
0.00MB

iris = pd.read_csv("../data/iris.csv")
iris.info()

cols = list(iris.columns)
cols # ['Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width', 'Species']

iris[cols[:4]].corr()
'''
              Sepal.Length  Sepal.Width  Petal.Length  Petal.Width
Sepal.Length      1.000000    -0.117570      0.871754     0.817941
Sepal.Width      -0.117570     1.000000     -0.428440    -0.366126
Petal.Length      0.871754    -0.428440      1.000000     0.962865
Petal.Width       0.817941    -0.366126      0.962865     1.000000
'''

iris[cols[:4]].mean(axis = 0)

# 범주형 변수
iris['Species'].value_counts()
iris['Species'].unique

 

 

4. DataFrame 병합 (Join)

import pandas as pd

# 1. DF merge
# - 공통분모의 칼럼 필요
# - 공통된 칼럼을 기준으로 두 개의 DF을 병합

 

wdbc_data.csv
0.12MB

wdbc = pd.read_csv("../data/wdbc_data.csv")
wdbc.info()
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 569 entries, 0 to 568
Data columns (total 32 columns):
    id                   569 non-null int64    <- 병합의 기준이 될 칼럼
'''

cols = list(wdbc.columns)
cols
len(cols) # 32

# 1~16
df1 = wdbc[cols[:16]]
df1.info()

# 17~32
df2 = wdbc[cols[16:]]
df2.info()

# df2에 id 칼럼 추가
uid = wdbc['id'] # id 칼럼 추출
df2['id'] = uid

# df3 = df1(id) + df2(id)  - 공통분모 id를 이용해 결합
df3 = pd.merge(df1, df2)
df3.info()
'''  
<class 'pandas.core.frame.DataFrame'>
Int64Index: 569 entries, 0 to 568
Data columns (total 32 columns):
'''

# 2. DF concat
# - 공통된 칼럼 없이 두 개의 DF을 병합

df1 = wdbc[cols[:16]] # 1 ~ 16
df2 = wdbc[cols[16:]] # 17 ~ 32

df3 = pd.concat(objs = [df1, df2], axis = 1)
# axis = 1 -> 칼럼단위로 결합 (cbind 개념)
# axis = 0 -> 행단위로 결합 (rbind 개념) - 전제조건 : 같은 칼럼명을 가지고 있어야함
df3.info() 

# Data columns (total 32 columns):



---------------------------------------------------------- example ----------------------------------------------------------

exam04.py
0.00MB
exam05.py
0.00MB

 

iris.csv
0.00MB
tips.csv
0.01MB

 

 

댓글