데이터 분석용 전처리 템플릿(Python)

데이터 분석용 전처리 템플릿(Python)



자신이 자주 사용하는 데이터의 전처리를 이하에 템플릿 형식으로 정리한다.
설명은별로 템플릿이 아닙니다.

데이터 세트 로드



CSV 형식 로드

read_data.py
trainval_filename = './train.csv'
test_filename = './test.csv'
df_trainval = pd.read_csv(trainval_filename)
df_test = pd.read_csv(test_filename)

concat으로 데이터 프레임 병합



트레이닝 데이터와 테스트 데이터 일제히 데이터의 전처리를 하는 경우에 편리.
그리고는, 보통으로 데이터를 결합하고 싶을 때에 사용한다.
df_all = pd.concat([df_trainval,df_test],axis=0) 
#axis=0 : 下方向に繋がる
#axis=1 : 右方向に繋がる

간단한 변수 변환



to_datatime으로 날짜 및 시간 정보 처리



날짜 및 시간 정보를 Timestamp 형식으로 변환, 연, 월, 날짜, 요일로 변환
'''
#変換前
     Date
0   1999-07-17
1   2008-02-14
2   2013-03-09
3   2012-02-02
4   2009-05-09 
'''
df_all['Date'] = pd.to_datetime(df_all["Date"])
'''
#処理後
0   1999-07-17
1   2008-02-14
2   2013-03-09
3   2012-02-02
4   2009-05-09
'''

apply로 연월일, 요일로 정보 변환



비슷한 것은 map을 사용해도 된다.
df_all['Year'] = df_all['Date'].apply(lambda x:x.year)
df_all['Month'] = df_all['Date'].apply(lambda x:x.month)
df_all['Day'] = df_all['Date'].apply(lambda x:x.day)
df_all['Weekday_name'] = df_all['Date'].apply(lambda x:x.weekday_name)

'''
#変換後
   Year  Month  Day Weekday_name
0  1999      7   17  Saturday
1  2008      2   14  Thursday
2  2013      3    9  Saturday
3  2012      2    2  Thursday
4  2009      5    9  Saturday 
'''

LabelEncoder로 레이블 수치 변환



라벨을 숫자 정보로 변환합니다.
아래에서는 도시 정보를 수치 정보로 변환합니다.

laberlencoder.py
from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
df_all['City'] = le.fit_transform(df_all['City'])

맵으로 요소 대체



map 함수를 사용하여 레이블을 이산 값으로 변환합니다.

map.py
'''
   City Group Type
0  Big Cities   IL
1  Big Cities   FC
2       Other   IL
3       Other   IL
4       Other   IL #変換前
'''

df_all['City Group'] = df_all['City Group'].map({'Other':0,'Big Cities':1}) #There are only 'Other' or 'Big city'
df_all["Type"] = df_all["Type"].map({"FC":0, "IL":1, "DT":2, "MB":3}) #There are only 'FC' or 'IL' or 'DT' or 'MB'
'''
   City Group  Type
0           1     1
1           1     0
2           0     1
3           0     1
4           0     1 変換後
'''

pandas의 기능을 이용한 데이터 정보 취득



info()를 사용한 열 정보 취득



열의 수, 열의 길이, 데이터의 형태 등을 취득할 수 있다. 매우 편리
df.info()
'''<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB
None
'''

describe()



각 열의 데이터 수, 평균, 분산, 사분위수 등 다양한 정보를 얻을 수 있습니다.
df.describe()



NaN 집계


df.isnull().sum()
'''
PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
Family_size      0
'''

NaN 채우기



여러가지 채우는 방법이 있습니다. 개인적으로는, 평균·중앙치당만 사용하고 있다.
다른 좋은 방법이 맞으면 알려주세요.
df['Age'].fillna(dataset['Age'].median()) #中央値バージョン
df['Age'].fillna(dataset['Age'].median()) #平均値バージョン

df = df.dropna(how='all',axis=0) #全ての値が欠損地である列が削除される,axis=1にすると行。
df = df2.dropna(how='any',axis=0) #'any'にするとNaNが一つでも含まれる行が削除される。(デフォルト)

corr()에 의한 상관 계수



corr()을 사용하면 모든 변수 간의 상관 계수를 계산할 수 있습니다.
매우 편리합니다.
print(df.corr())
'''
             PassengerId    Pclass       Age     SibSp     Parch      Fare
PassengerId     1.000000 -0.026751 -0.034102  0.003818  0.043080  0.008211
Pclass         -0.026751  1.000000 -0.492143  0.001087  0.018721 -0.577147
Age            -0.034102 -0.492143  1.000000 -0.091587 -0.061249  0.337932
SibSp           0.003818  0.001087 -0.091587  1.000000  0.306895  0.171539
Parch           0.043080  0.018721 -0.061249  0.306895  1.000000  0.230046
Fare            0.008211 -0.577147  0.337932  0.171539  0.230046  1.000000

hist()로 히스토그램 작성



hist()를 사용하는 것만으로 히스토그램을 그려준다.
이것도 매우 편의.
df.hist()



scatter_matrix()로 산점도 작성



scatter_matrix()에 의해 산점도를 그려준다.
모든 변수 사이의 산점도를 작성합니다.
대각선 다이어그램은 변수의 히스토그램을 보여줍니다.
pd.plotting.scatter_matrix(df)



groupby로 그룹화



groupby 함수는 라벨 변수에 적응 가능.
'Sex'는 female, male 밖에 없기 때문에 이 두 가지로 나눠준다.
이 뒤에 mean() 라든지를 붙이면 각 그룹마다 평균을 내준다.
print(df[['Sex', 'Survival']].groupby('Sex', as_index=False).mean())
'''
      Sex  Survived
0  female  0.742038
1    male  0.188908
'''

지금 편집 중입니다.

좋은 웹페이지 즐겨찾기