Data Preprocessing - kamchur/note GitHub Wiki
โปReference. KT, ๊น๊ฑด์ ๊ฐ์ฌ๋
CRISP-DM (Cross-Industry Standard Process for 'Data Mining')
mumble
as : alias
categorical data : ๋ฒ์ฃผ
numberical data : ์์น
loc : location
numpy : numerical python
readability : ๊ฐ๋
์ฑ?
import
import pandas as pd
# ์ง์ํจ์(๊ณผํ์ ํ๊ธฐ๋ฒ) -> ์ค์๋ก ํํ
pd.options.display.float_format = '{:.5f}'.format
# ๋๋๋ฆฌ๊ธฐ
pd.reset_option('display.float_format')
์ปฌ๋ผ๊ฐ์ ๋ณ๊ฒฝ ...
์ผ๋ก ๋์ค์ง ์๊ฒ ํ๋ ๋ฐฉ๋ฒ
>>> pd.options.display.max_columns
20
>>> pd.options.display.max_columns = 30
์์ ๋ฐ์ดํฐ ์ฝ๊ธฐ
csv : pd.read_csv("ํ์ผ์ด๋ฆ. csv")
txt : pd.read_csv("ํ์ผ์ด๋ฆ. csv", sep="๊ตฌ๋ถ์")
xlsx : pd.read_excel('ํ์ผ์ด๋ฆ.xlsx')
pickle : pd.read_pickle("ํ์ผ์ด๋ฆ.pkl")
# titanic ๋ฐ์ดํฐ์กฐํ
url = 'https://raw.githubusercontent.com/DA4BAM/dataset/master/titanic.0.csv'
# ์ฝ์ ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ๋ง์ ๊ฒฝ์ฐ 1000๊ฐ๋ง ์ฝ๊ณ ์ถ์ ๊ฒฝ์ฐ
# >>> titanic = pd.read_csv(url, sep=',', skiprows=0, nrows=1000)
titanic = pd.read_csv(url)
tpye(titanic) # pandas.core.frame.DataFrame
# ํ, ์ด ํฌ๊ธฐํ์ธ
titanic.shape # (891, 12)
# ์ปฌ๋ผ๋ช
ํ์ธ
titanic.columns
# ์ปฌ๋ผ์ ๋ค์ ์๋ ๊ฐ ํ์ธ
# Series์ํ์์๋ง ์ง์๋๋ ๋ฉ์๋
titanic['Embarked'].unique()
# ๋ฐ์ดํฐ ํ์
ํ์ธ
titanic.dtypes
# ์ ๋ณดํ์ธ
titanic.info()
# ์์ ๋ฐ์ดํฐ ํ์ธ default=10
titanic.head(v)
# ๋ค์ ๋ฐ์ดํฐ ํ์ธ default=10
titanic.tail(v)
# ๊ธฐ์ด ํต๊ณ๋ ์กฐํ
titanic.describe()
Seriesํํ ์กฐํ
# 'Name' ์ปฌ๋ผ ์กฐํ
sr['Name']
sr.Name
sr.loc[:, 'Name']
type(sr) # pandas.core.series.Series
DataFrameํํ ์กฐํ
# 'Name' ์ปฌ๋ผ ์กฐํ
df[['Name']]
df.loc[:, ['Name']]
df.iloc[:, [0]]
type(df) # pandas.core.frame.DataFrame
# df.sort_values(by=[column list], ascending=[True/False])
# ascending = True : ์ค๋ฆ์ฐจ์(default) / False : ๋ด๋ฆผ์ฐจ์
titanic.sort_values(by='Embarked', ascending=False).head()
# ํน์ ์ด์ ์กฐํํ๊ณ ์ถ์ ๊ฒฝ์ฐ
titanic.sort_values(by='Fare', ascending=True)['Name'].head(10)
[]
์์ ์กฐ๊ฑด์ ์ฌ๋ฌ๊ฐ๋ฅผ ๊ตฌํ ์and
์or
๋์&
์|
๋ฅผ ์ฌ์ฉ
์กฐ๊ฑด๋ค์ ๊ผญ()
๊ดํธ๋ก ๋ฌถ์ด์ฃผ์ด์ผํจloc[]
์iloc[]
์ ์ฐจ์ด์
loc[]
๋ ์ด์ด๋ฆ(column)์ ์กฐํํ์ง๋ง,iloc[]
๋ ์ด์ ์ธ๋ฑ์ค(index)๋ก ์กฐํ
- ํ์ ์กฐ๊ฑด์ด ์๋ก ๋ค๋ฅด๋ค
Q.ํ 10๊ฐ๋ฅผ ํ์ถํด๋ผ
df.loc[:9, list]
df.iloc[:10, list]
df.loc[]
# df.loc[ํ์กฐ๊ฑด, ์ด์ด๋ฆ]
# 10ํ๊น์ง ์ถ๋ ฅ
list1 = ['crim', 'lstat', 'medv']
df.loc[:9, list1] # `list1' ์ ์ปฌ๋ผ๋ช
๋ค๋ง ํ์ถ๋จ
df.loc[:, list1].head(10)
df.loc[:, list1][:10]
df.iloc()
# df.iloc[ํ์กฐ๊ฑด, ์ด์ด๋ฆ]
# ์์ loc์ ๋์ผํ ๊ฒฐ๊ณผ
list1 = [0, 11, 12]
df.iloc[:10, list1]
df.iloc[:, list1].head(10)
df.iloc[:, list1][:10]
df.between(p1, p2)
# df.between(v1, v2, [inclusive='both') : v1 ~ v2 ์ฌ์ด ๋ฐ์ดํฐ ํ์ธ
# inclusive๋ ํฌํจ(์ด์, ์ดํ) ์ฌ๋ถ๋ฅผ ๋ฌป๋ ๊ฒ
df.isin(c1, c2, c2,...)
# df.isin([c1, c2, ...]) : ๋ฆฌ์คํธ ๋ด์ ๋ฃ์ ๋ฐ์ดํฐ๋ง ์กฐํ
# `or`์ฐ์ฐ๊ณผ ๋์ผํจ -> `loc[]`๋ด์์ `|`
df.loc[df['Name'].isin([1,3])]
์ญ์
drop_list = ['PassengerId', 'Name', 'Cabin']
titanic.drop(columns=drop_list, axis=1, inplace=True)
# ํน์ ์กฐ๊ฑด ํ ์ญ์
list.drop(index=list.loc[list['Location'] == '~'].index, axis=0, inplace=True)
๋ณ๊ฒฝ
# df.map() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉฐ ํ๋ผ๋ฏธํฐ๋ก dictionary๋ฅผ ์ฌ์ฉ
# Q. ์ฑ๋ณ(Sex)๋ฅผ male -> m, female -> f ๋ก ๋ณ๊ฒฝ
titanic['Sex'].map({'male':'m', 'female':'f'})
ํ์
๋ณ๊ฒฝ
bus_station.astype({"๋ฒ์ค์ ๋ฅ์ฅARS๋ฒํธ":'int'})
sb_route['๋ฒ์ค์ ๋ฅ์ฅARS๋ฒํธ'] = sb_route['๋ฒ์ค์ ๋ฅ์ฅARS๋ฒํธ'].astype(int)
# `as_index`๋ฅผ 'False'ํด์ฃผ๋ฉด index๋ฅผ ๋ณผ ์ ์์ด DataFrame์ด ์ข๋ ์ด์๋ค
# Q. ๊ฐ์ค(Pclass)๋ฑ๊ธ๋ณ ํ๊ท ๋์ด
titanic.groupby(by='Pclass', as_index=False)['Age'].mean()
# Q. ๊ฐ์ค(Pclass)๋ฑ๊ธ๋ณ, ์์กด(Survived)์ฌ๋ถ๋ณ ํ๊ท ์ด์, ์ต๋์ด์, ์ต์์ด์
titanic.groupby(by=['Pclass', 'Survived'], as_index=False)['Fare'].agg(['mean', 'max', 'min'])
import
import pandas as pd
import numpy as np
Pandas์์ ์๋์ผ๋ก
key
๋ฅผ ์ค์ ํด์ค
default =inner join
# ๊ต์งํฉ์ด๋ผ๊ณ ๋ณด๋ฉด๋จ
- merge
# DataFrame ๋ ํ์ผ ์ฝ๊ธฐ
sales = pd.read_csv("https://raw.githubusercontent.com/DA4BAM/dataset/master/sales.csv")
products = pd.read_csv("https://raw.githubusercontent.com/DA4BAM/dataset/master/products.csv")
sales.head()
product.head()
# merge
pd.merge(sales, products).head() # ๊ณตํต๋ ์ปฌ๋ผ(ProductID) ์๋์ผ๋ก key๋ก ์ฌ์ฉ
# 'how'๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ์ค ๋ฐ์ดํฐํ๋ ์์ ์ง์ ํ ์ ์์
pd.merge(sales, products, how='left').head()
- merge + groupby, sort_values
# ๊ธฐ์ค์ผ๋ก ์ผ์ ์ปฌ๋ผ `on=column_name` ์ฌ์ฉ
# data์ด๋ฆ์ผ๋ก 'ProductID'๋ฅผ ๊ธฐ์ค์ผ๋ก merge
# data = pd.merge(left=sales, right=products)[['ProductID']]
data = pd.merge(left=sales, right=products, on='ProductID')
# 'Category'๋ณ ์ด ๋งค์ถ์ก ๊ตฌํ๊ธฐ(amt)
data.groupby(by='Category', as_index=False)['Amt'].sum()
# ์ ์ฒด์์ ๊ฐ์ฅ ๋งค์ถ('Amt')์ด ๋์ ์ํ๋ช
10๊ฐ ์กฐํ
data.groupby(by='ProductName', as_index=False)['Amt'].sum().sort_values(by='Amt', ascending=False).head(10)
- concat
๋จ์ํ ๋ถ์ด๋ ์ญํง
๋ฆฌ์คํธ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์axis = 0
: ์, ์๋๋ก ๋ถ์(default)
'axis = 1` : ์ข, ์ฐ๋ก ๋ถ์
# ํ์ ์ถ์ผ๋ก ๋ถ์ด๊ธฐ
# pd.concat([data1, data2], axis=0)
pd.concat([data1, data2])
# ์ด์ ์ถ์ผ๋ก ๋ถ์ด๊ธฐ
pd.concat([data1, data2], axis=1)
# ์ ๋ฐ์ดํฐ์ ๋ณธ ๋ฐ์ดํฐ 3๊ฐ๋ฅผ ์ด์ ์ถ์ผ๋ก ๋ถ์ด๊ธฐ
pd.concat([data1, data2, data], axis=1)
ํ์ ์ถ์ผ๋ก
์ด์ ์ถ์ผ๋ก
3๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ด์ ์ถ์ผ๋ก
- Rolling&Shift
rolling
์ ์ฃผ๋ก ์๊ณ์ด ๋ฐ์ดํฐ์ ๋ํด์ ์ด๋ํ๊ท ๊ฐ์ ๊ตฌํ ๋, ํ์shift
์ํฌ ๋ ์ฌ์ฉ
์๊ณ์ด๋ฐ์ดํฐ๋? ํ๊ณผ ํ์ ์๊ฐ์์๊ฐ ์๋ ๋ฐ์ดํฐ(์๊ฐ์์ผ๋ก ์ ๋ ฌ๋์ด ์๋ ์ํ: ์๋ฐ์ดํฐ-์ ๋ , ๋ค๋ฐ์ดํฐ-๋ค์๋ )
shift(1)
์ด๋ฉด ํ ์ ๋ณด๊ฐ์ด ๋ด๋ ค๊ฐ(default)
shift(-1)
์ด๋ฉด ํ ์ ๋ณด๊ฐ์ด ์ฌ๋ผ๊ฐ
# SK์ฃผ์(stock)๋ฐ์ดํฐ ์์ฒญ
stock = pd.read_csv('https://raw.githubusercontent.com/DA4BAM/dataset/master/SK.csv')
# ๋ ์ง('Date'), ์ข
๊ฐ('Close'), ๊ฑฐ๋๋('Volume') ์ปฌ๋ผ๋ง ์ค์
# stock = stock.loc[:,['Date', 'Close', 'Volume']]
stock = stock[['Date', 'Close', 'Volume']]
stock.head()
# ๊ธฐ์ค์ผ์ ํฌํจํ์ฌ ๊ณผ๊ฑฐ 3์ผ์ ํ๊ท ์ ๋ฐ์ดํฐ ํ๋ ์์ ๋ถ์ด๊ธฐ
stock['Close_M_3D'] = stock['Close'].rolling(3)
stock['Close_M_3D'] = stock['Close'].rolling(3).mean()
# shift ์ฌ์ฉํ์ฌ ๊ฐ์ ์ฌ๋ ค๋ณด์
stock['Close_M_3D_UP'] = stock['Close_M_3D'].shift(periods=-1)
# min_period
# min_period๋ rolling์์ ์๋ ํ๋ผ๋ฏธํฐ์ด๋ฉฐ, rolling๋๋ ๊ฐ์ window์ ์ต์๊ฐ์ ๋ปํจ
# rolling(3, min_period=1)์ด๋ฉด rollingํ ๋ฐ์ดํฐ๊ฐ 3๊ฐ๋ฅผ ํ์ธํ์ฌ ๊ธฐ์ค๋ฐ์ดํฐ๋ง ๋ฃ๋ ๊ฒ์ด ์๋ ํด๋น ๋ ์ง์ ๋ฃ์ด์ค๋ค๊ณ ๋๊น.
# min_periods=1, ๊ฐ์ด ํ๋์ฌ๋ ๊ฐ์ ๊ตฌํ ๊บผ์ผ, ๊ทธ๋์ ๊ธฐ์ค๊ฐ์ด ์๋์ด๋ ๊ฐ์ด ๊ตฌํด์ ธ์ ๊ฒฐ๊ณผ๊ฐ์ด ์
๋ ฅ๋จ
import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data loading
stock = pd.read_csv('https://raw.githubusercontent.com/DA4BAM/dataset/master/SK.csv')
stock.drop('AdjClose', axis=1, inplace=True)
# exch_rate : ํ์จ
# exch_Diff : ํ์จ๋ฑ๋ฝ
exch_rate = pd.read_csv('https://raw.githubusercontent.com/DA4BAM/dataset/master/USD_KRW.csv')
exch_rate.drop(columns=['open', 'high', 'low'], axis=1, inplace=True)
exch_rate.rename(columns={'date':'Date', 'close':'exch_Close', 'diff':'exch_Diff'}, inplace=True)
# 'Date'๋ฅผ key๋ก ์ง์
data = pd.merge(left=stock, right=exch_rate, how='left', on='Date')
# NaNํ์ธ
# data.isnull().sum()
data.isna().sum()
# ์กฐ๊ฑด์กฐํ๋ก `NaN`์ธ ๋ฐ์ดํฐ ์กฐํ
# data.loc[data['Open'].isnull()]
data.loc[data['Open'].isna(),]
- ํ์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ
axis=0
: ํ ์ญ์
axis=1
: ์ด(์ปฌ๋ผ) ์ญ์
data1 = data.dropna(axis=0)
data1.isnull().sum()
- 0
์ผ๋ก ์ฑ์ฐ๋ ๋ฐฉ๋ฒ
# .fillna(v) ์์ NaN๋์ ๋ฃ์ ์๋ฅผ ๋ฃ์
df3 = data.fillna(0)
data.loc[data['Open'].isna(),]
df3.loc[df3['Date'].isin(['2017-11-16', '2017-11-23', '2018-01-02', '2018-11-15', '2019-11-14'])]
- ์ด์ , ์ดํ๊ฐ์ผ๋ก ์ฑ์ฐ๋ ๋ฐฉ๋ฒ
method='ffill'
: ์ด์ ๊ฐ, ๋ฐ์ดํฐ ์ด์ ์, ์ ๋ , ์์ ๊ฐ
method='bfill'
: ์ดํ๊ฐ, ๋ฐ์ดํฐ ๋ค์์, ๋ค์๋ , ๋ค์ ๊ฐ
data2 = data.fillna(method='ffill')
data2.isnull().sum() # all = 0
# NaN์ด์๋ ๊ฐ๋ค์ด 'ffill'๋ก ์ธํด ์ด๋ป๊ฒ ๋ฐ๋์๋์ง ํ์ธ
data.loc[data['Open'].isna(),]
data2.loc[data['Date'].between('2017-11-15', '2017-11-25'),]
- ์, ๋ค์ ์ค๊ฐ๊ฐ์ผ๋ก ์ฑ์ฐ๊ธฐ
data3 = data.interpolate(method='linear')
data3.isnull().sum() # all = 0
data.loc[data['Date'].between('2017-11-14', '2017-11-29', inclusive='')]
data3.loc[data'Date'].between('2017-11-14', '2017-11-29')]
- ์ฆ๊ฐ ์ปฌ๋ผ
#
data2['inc_stock'] = data2['exch_Close'].diff()
data2.head(5)
- ๋ ์ง ๋ฐ์ดํฐ ๋ค๋ฃจ๊ธฐ
pd.to_datetime(์ปฌ๋ผ๋ช )
: ๋ ์ง๋ก๋ถํฐ ์ถ๊ฐ ๋ณ์๋ฅผ ๋์ถํด๋ด๊ธฐ ์ํด ์ฌ์ฉ
# data2['Date'].unique() # ์ปฌ๋ผ์ ๊ณ ์ ์์๊ฐ ์์๋ด๊ธฐ, + dtype๊น์ง
data2[['Date']][:5]
data2.dtypes
data2 = pd.to_datetime(data2['Date'])
data2.dtypes
data2['WeekDay'] = data2['Date'].dt.dayofweek : (Monday=0, ~ Sunday=6)
data2['WeekDay_N'] = data2['Date'].dt.day_name() : ์์ผ์ด๋ฆ
# data2['Date'].dt.week : 1 ~ 53์ฃผ ---> Future Warning/ Series.dt.isocalendar().week instead
data2['WeekDay_V'] = data2['Date'].dt.isocalendar().week
data2['Year'] = data2['Date'].dt.year : ๋
data2['Month'] = data2['Date'].dt.month : ์
'๋ฒ์ฃผ'ํ ๋ณ์๋ฅผ '์ซ์'ํ์ผ๋ก ๋ง๋ฆ
'๊ฐ๋ณ์ํ'ํ๋ค ๋ผ๊ณ ํจ(๋ชจ๋ธ๋ง์ ์ํด์ ๋ชจ๋ ๋ฐ์ดํฐ ๊ฐ์ ์ซ์ ์ฌ์ผ ํจ)pd.get_dummies(df.column, drop_first=True)
->pd.concat
->df.drop
# '๋ฒ์ฃผํ'์ dtypes์ 'object'ํ์
์ผ๋ก ๋์ด์๋๊ฒ
# Weekday_N(0 ~ 6)์ผ๋ก ํํ๋์ด ์๋๊ฑธ 0, 1๋ก ํํ
# 'drop_first=True'๋ฅผ ํ๋ฉด data2 ์๋ณธ์ 'WeekDay_N'์ปฌ๋ผ์ด ์ญ์ ๋๋ค
# ํ๋ผ๋ฏธํฐ๋ก 'prefix'๋ฅผ ์ฌ์ฉํ๋ฉด dummy๋ฐ์ดํฐ ์์ ๊ธ์๋ฅผ ์ค์ ํ ์ ์๋ค
dumm_weekday = pd.get_dummies(data=data2['WeekDay_N'], drop_first=True)
dumm_weekday.head()
data2.head(5)
# pd.concat์ผ๋ก ๋ฆฌ์คํธํ ๋ฐ์ดํฐ ๋ถ์ฌ์ฃผ๊ธฐ
data3 = pd.concat([data2, dumm_weekday], axis=1) # axis=1 ์ด์ ์ถ์ผ๋ก ๊ฐ๋ก๋ก ๋ถ์ด๊ธฐ
data3.head(5)
# concat์ฌ์ฉ์์ด 'get_dummies'๋ก ํ ๋ฒ์ 'Month'์ปฌ๋ผ ๊ฐ๋ณ์ํํ์ฌ ์ฐ๊ฒฐํ๊ธฐ
# 'columns= ' ํ๋ผ๋ฉํฐ์ ๊ฐ์ ๋ฃ์ผ๋ฉด ์ด๋ค ์ปฌ๋ผ์ dummyํ ๊ฑด์ง ์ง์ ํ๊ฒ ๋จ('drop_fisrt'๊ธฐ๋ฅ์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ํด๋น ์ปฌ๋ผ์ญ์ )
data3 = pd.get_dummies(data3, columns='Month', drop_first=True, prefix='m')
data3.head(5)
- ๋ถํ์ ๋ณ์ ์ ๊ฑฐ
๋ ์ง, ์ ๋ ๋ก ๋บ ๋ณ์ ์๋ณธ, ๊ฐ๋ณ์ํ ํ ๋ณ์์ ์๋ณธ, ์๋ฏธ ์๋ ๋ณ์
# ์นผ๋ผ์ญ์
drop_x = ['Date', 'exch_Diff', 'WeekDay']
data3.drop(columns=drop_x, axis=1, inplace=True)
# NaNํ ์ญ์
data3.dropna(axis=0)
Machine Learning์ ๋ํ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
sklearn
์ ๋ฐ์ดํฐ ๋ถํ ํจ์ ์ฌ์ฉ
์์ธ : x, feature, ์กฐ์๋ณ์, ํต์ ๋ณ์, ๋ฆฌ์คํธ๋ฒกํฐ, Input (๋ ๋ฆฝ๋ณ์)
๊ฒฐ๊ณผ : y, target, label, Output (์ข ์กฑ๋ณ์)
๋จ์ํ ๋ฐ์ดํฐ๋ฅผ x์ y๋ก ๋ถํ ํด์ฃผ๋ ์ญํ ์ธ ๊ฒ ๊ฐ๋ค
# 'x'์๋ ๋ชฉํํ๋ ์ปฌ๋ผ์ ์์ค ๋ฐ์ดํฐํ๋ ์์ ๋ฃ๊ณ
# 'y'์๋ ๋ชฉํํ๋ ์ปฌ๋ผ์ ์๋ฆฌ์ฆ๋ฅผ ๋ฃ์ด์ค๋ค
# ๋ง์ฝ์ 'titanic' ๋ฐ์ดํฐํ๋ ์์ 'Survived'์์กด์ ์ ๋ณด๋ฅผ ๋ถํ ํ๋ค๋ฉด ์๋์ ๊ฐ์ด ๋๋ ์ค
x = titanic.drop('Survived', axis=1)
y = titanic.loc[:, 'Survived']
import
import sklearn.model_selection import train_test_split
# feature = X
# target = y
# ๋ถ๋ฆฌ์์
X = data3.drop('Close', axis=1) # 'Close' ์ข
๊ฐ ์ฃผ์ ์ปฌ๋ผ ์ญ์ ํ ๋ฐ์ดํฐํ๋ ์
y = data3.iloc[:, 0]
# train : test = 7 : 3
# training set 70 ~ 80%
# test set 20 ~ 30%
# random_state : ๋๋๋ ๋ฐฉ์์ ๋ณด์ ํด์ฃผ๋๊ฒ
train_x, test_x, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=1)
>>> train_x.shape, test_x.shape, train_y.shape, test_y.shape
((682, 22), (293, 22), (682,), (293,)) # 682 ์์ ์ปฌ๋ผ '1'ํ๋๊ฐ ์๋ค๊ณ ์๊ฐํด์ฃผ์ด์ผํจ 'Close'์ปฌ๋ผ
์ ๊ทํ(Normalization) ๋ชจ๋ ๊ฐ์ 0 ~ 1 ๋ก ๋ณํ
import
import sklearn.preprocessing import MinMaxScaler, StandardScaler
- ์ ๊ทํ(Normalization, MinMax๋ฐฉ์)
scaler.fit_transform(df)
ํจ์ ์ฌ์ฉ
# ์ ์ธ
scaler = MinMaxScaler()
x.head(5)
# ์ ์ฉ, ์ ์ฉ์ 'Numpy Array'์ํ๊ฐ ๋จ
x1 = scaler.fit_transform(x)
# ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณํ
x1 = pd.DataFrame(x1, columns = list(x)) # list(x)์ ์ปฌ๋ผ๋ช
๋ค์ด ๋ฆฌ์คํธํํ๋ก ์ ๋ฌ๋จ
x1.head(5)
- ํ์คํ(Standardization)
ํ๊ท ์ '0', ํ์คํธ์ฐจ๋ '1'๋ก
`scaler.fit_transform(df)' ํจ์ ์ ์ฉ
# ์ ์ธ
scaler = StandardScaler()
# ์ ์ฉ
x2 = scaler.fit_transform(x)
# type:Numpy Array -> DataFrame
x2 = pd.DataFrame(x2, columns = list(x))