데이터 분석용 전처리 템플릿(Python)
데이터 분석용 전처리 템플릿(Python)
자신이 자주 사용하는 데이터의 전처리를 이하에 템플릿 형식으로 정리한다.
설명은별로 템플릿이 아닙니다.
데이터 세트 로드
CSV 형식 로드
read_data.pytrainval_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.pyfrom 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
'''
지금 편집 중입니다.
Reference
이 문제에 관하여(데이터 분석용 전처리 템플릿(Python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/taruto1215/items/a047125fabd61126c80f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
trainval_filename = './train.csv'
test_filename = './test.csv'
df_trainval = pd.read_csv(trainval_filename)
df_test = pd.read_csv(test_filename)
df_all = pd.concat([df_trainval,df_test],axis=0)
#axis=0 : 下方向に繋がる
#axis=1 : 右方向に繋がる
'''
#変換前
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
'''
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
'''
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df_all['City'] = le.fit_transform(df_all['City'])
'''
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 変換後
'''
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
'''
df.describe()
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
'''
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が一つでも含まれる行が削除される。(デフォルト)
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
df.hist()
pd.plotting.scatter_matrix(df)
print(df[['Sex', 'Survival']].groupby('Sex', as_index=False).mean())
'''
Sex Survived
0 female 0.742038
1 male 0.188908
'''
Reference
이 문제에 관하여(데이터 분석용 전처리 템플릿(Python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/taruto1215/items/a047125fabd61126c80f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)