๐ TODAY'S GOAL
→ ๋ก์ปฌ ์์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
→ MATPLOTLIB์ ์ด์ฉํ ๋ฐ์ดํฐ ๋ถ์
→ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ(ํ์ดํ๋ ์์กด ์์ธก ๊ฒฝ์ง๋ํ)
→ ๋จ์ํ ๋ฅ๋ฌ๋ ๋ชจ๋ธ ๊ฐ๋ฐ
→ ์ ์ฌํ์ต์ ๋ํด ๊ณต๋ถํ๊ณ ์ ๋ฆฌํ๊ธฐ
๐ต WHAT I LEARNED
→ ๋ก์ปฌ ์์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
1. matplotlib ๊ณผ cv2๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
matplotlib๊ณผ cv2๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ Anaconda prompt์์ pip install์ ํตํด ์ค์นํด์ค๋๋ค. ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์๋ matplotlib๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ผญ ํ์ํ์ง๋ ์์ง๋ง ์ ๋ matplotlib์ ํตํด ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋๋ก ํ๊ฒ ์ต๋๋ค.
2. Visual Studio Code ์์ import ํ๊ธฐ
ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ Visual Studio Code์์ import ํด์ค๋๋ค.
3. ์ด๋ฏธ์ง ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
์๋์ ์ฝ๋๋ฅผ ํตํด ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅํ์ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ฉด ๋ฉ๋๋ค.
Matplotlib์ ์ฌ์ฉ๋ฒ๊ณผ cv2์ ์ฌ์ฉ๋ฒ์ ์๋์ ๋งํฌ๋ฅผ ํตํด ์์ธํ๊ฒ ์์๋ณผ ์ ์์ต๋๋ค.
→ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ(ํ์ดํ๋ ์์กด ์์ธก ๊ฒฝ์ง๋ํ)
1. ํ์ดํ๋ ์์กด ์์ธก ๊ฒฝ์ง๋ํ - DACON
์บ๊ธ, ๋ฐ์ด์ฝ์์ ๊ฐ์ตํ ๊ฒฝ์ง๋ํ์ธ ํ์ดํ๋ ์์กด ์์ธก ๊ฒฝ์ง๋ํ ์ ๋๋ค. ์๋์ ๋งํฌ๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ฐ์ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ์ ์ข์ ๋ฐ์ดํฐ๋ผ๊ณ ์๊ฐํ์ฌ ์๋์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์์ต๋๋ค.
https://dacon.io/competitions/open/235539/overview/description
2. ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
์ ์ฒด ์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
%cd "/content/drive/MyDrive/Colab Notebooks/๋ฐ์ด์ฝ/3์ฃผ์ฐจ/"
!unzip "ํ์ดํ๋.zip"
๋จผ์ง ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
# ํ์ฌ ์์
๊ฒฝ๋ก๋ฅผ ์ป๋ ํจ์
import os
print(os.getcwd())
๋ฐ์ดํฌ๋ฃจ 3์ฃผ์ฐจ์ ์ฌ๋ฆฌ๊ณ ์ถ์๋๋ฐ ์๋ฌ๊ฐ ๋ ์ 4์ฃผ์ฐจ์ ์ฌ๋ ค๋ด
๋๋น !! :)
# ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
import pandas as pd
train = pd.read_csv("./train.csv")
test = pd.read_csv("./test.csv")
submission = pd.read_csv("./submission.csv")
# shape ํ์ธํ๊ธฐ
print(train.shape)
print(test.shape)
train.columns
train๊ณผ test์ column์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- PassengerId : ํ์น๊ฐ์ ๊ณ ์ ์์ด๋
- Survival : ์์กด์ฌ๋ถ(0: ์ฌ๋ง, 1: ์์กด)
- Pclass : ๋ฑ์ค์ ๋ฑ๊ธ(1: 1๋ฑ๊ธ, 2: 2๋ฑ๊ธ, 3: 3๋ฑ๊ธ)
- Name : ์ด๋ฆ
- Sex : ์ฑ๋ณ
- Age : ๋์ด
- Sibsp : ํจ๊ป ํ์นํ ํ์ ์๋งค, ์๋ด ๋จํธ์ ์
- Parch: ํจ๊ป ํ์นํ ๋ถ๋ชจ, ์์์ ์
- Ticket: ํฐ์ผ๋ฒํธ
- Fare: ํฐ์ผ์ ์๊ธ
- Cabin: ๊ฐ์ค๋ฒํธ
- Embarked: ๋ฐฐ์ ํ์นํ ์์น(C = Cherbourg, Q = Queenstown, S = Southampton)
์ด ์ค ํ์ํ column๋ง ์ด์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํด๋ณด๊ณ ์ ํฉ๋๋ค.
train.info()
test.info()
- columns ์๊ฐ ๋ง์ผ๋ ์ด ์ค ๋ช ๊ฐ๋ฅผ ์ถ๋ ค๋ณด๊ณ ์ถ์ด์ ์๊ด ๊ด๊ณ ๋ถ์์ ๋จผ์ ํด๋ณด๊ธฐ๋ก ํฉ๋๋ค.
- ์๊ด๋ถ์(Correlation Analysis)์ ๋ ๋ณ์๊ฐ์ ์ด๋ค ์ ํ์ ์ธ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๋์ง๋ฅผ ๋ถ์ํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ์ด๋ ๋ ๋ณ์๊ฐ์ ๊ด๊ณ์ ๊ฐ๋๋ฅผ ์๊ด๊ด๊ณ(Correlation coefficient)๋ผ๊ณ ํฉ๋๋ค.
- ์๊ด๊ณ์๋ ๋ ๋ณ์๊ฐ์ ์ฐ๊ด๋ ์ ๋๋ง ๋ํ๋ผ ๋ฟ ์์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ ์ธ๊ณผ๊ด๊ณ๋ฅผ ์ค๋ช
ํ๋ ๊ฒ์ ์๋์ ๋ฐ๋์ ์์์ผํฉ๋๋ค.
- ์๊ด๊ด๊ณ ๋ถ์์์๋ ๊ธฐ๋ณธ์ ๋ฐฉ๋ฒ์ผ๋ก ํผ์ด์จ ์๊ด๊ณ์๋ฅผ ๋ง์ด ์ด์ฉํฉ๋๋ค.
train.corr()
train['Sex'] = train['Sex'].replace('male',0)
test['Sex'] = test['Sex'].replace('male',0)
train['Sex'] = train['Sex'].replace('female',1)
test['Sex'] = test['Sex'].replace('female',1)
train.head(3)
train.isnull().sum()
- Age๋ ์๋ ์ปฌ๋ผ์ ์ญ์ ํด์ค๋๋ค.
- Cabin์ ๋
๋ฆฝ ๋ณ์๋ก ์ ์ธ ๊ฑฐ๋ผ์ ๋ณ๋ค๋ฅธ ์ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์ ๊ฒ์
๋๋ค.
- Embarked๋ S,C,Q๋ฅผ ๋ฒ์ฃผํ์ผ๋ก ๋ณํํ๋ ค๊ณ ํฉ๋๋ค
- ์ด๋ Enbarked์ด์ ์กด์ฌํ๋ 2๊ฐ์ง null๊ฐ์ ๋งค๊พธ์ด์ฃผ๊ธฐ ์ํด null๊ฐ์ ์ ๊ฑฐํ ํ ์๊ด๊ด๊ณ ๋ถ์์ ํตํด ๊ธฐ์ค ์ด์ ์ด์ฉํ์ฌ ๋งค๊พธ์ด์ฃผ๊ฒ ์ต๋๋ค.
train2 = train.dropna(subset=['Embarked'])
print(train2.shape)
train2.head(1)
import copy
train2 = train2.copy()
train2.loc[train2['Embarked'] == 'C','Embarked']=0
train2.loc[train2['Embarked'] == 'Q','Embarked']=1
train2.loc[train2['Embarked'] == 'S','Embarked']=2
train2.info()
train2['Embarked'] = train2['Embarked'].astype(int)
# ํน์ ์ปฌ๋ผ๊ณผ ๋๋จธ์ง ์ปฌ๋ผ๊ฐ์ ์๊ด๊ณ์ ๊ณ์ฐ
train2.corrwith(train2['Embarked'])
- ๋น์ฐํ ๊ฒฐ๊ณผ๊ฒ ์ง๋ง Fare์ ๊ฐ์ฅ ์ฐ๊ด์ฑ์ด ๋ฐ์ด๋ฉ๋๋ค. ๋ฐ๋ผ์ Fare๋ฅผ ์ดํด๋ณด๊ณ Embarked๋ฅผ ์ฑ์๋ณด๊ฒ ์ต๋๋ค.
train[train['Embarked'].isnull()]
train[train['Fare'] == 80.0]
train[train['Pclass']==1]['Embarked'].value_counts()
train[train['Survived']==1]['Embarked'].value_counts()
train['Embarked'].value_counts()
- ์ใ
ใ
ใ
s๊ฐ ํ์ค์ด ๋ง์ผ๋ ๋์ธ๋ฅผ ๋ฐ๋ผ์ S๋ก ์ฑ์ฐ๊ธฐ๋ก ํ์ต๋๋ค.
train['Embarked'] = train['Embarked'].fillna("S")
train.isnull().sum() # ๊ตณ
train.loc[train.Embarked == 'C','Embarked']=0
train.loc[train.Embarked == 'Q','Embarked']=1
train.loc[train.Embarked == 'S','Embarked']=2
train['Embarked'] = train['Embarked'].astype('int64')
train.corr()
- ํ
์คํธ ๊ฐ๋ null๊ฐ์ ๋งค๊พธ์ด์ฃผ๊ฒ ์ต๋๋ค,
test.isnull().sum()
test[test['Fare'].isnull()]
- Fare์ด๊ณผ Pcalss์ด์ ์๊ด๊ด๊ณ๊ฐ ๋์ผ๋ฏ๋ก Pclass๊ฐ 3์ธ ํ๋ค์ Fare์ด์ ๋ถํฌ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
fare = pd.DataFrame(test[test['Pclass']==3]['Fare'].value_counts().nlargest(12))
fare = fare.reset_index()
fare
- nlargest()<br>
๊ฐ์ฅ ๋ง์ ๋น์ค์ ์ฐจ์งํ๊ณ ์๋ ์ฅ๋ฅด๋ฅผ ์ถ์ถํ๊ฒ ๋ค๋ ์๋ฏธ์
๋๋ค.
# ์ค์ index์ ํ๊ท ์ด์ด์ ๊ทธ๋ ์ต๋๋ค.
fare['index'].mean()
test['Fare'] = test['Fare'].fillna("7.753825")
test.isnull().sum()
- ์กฐ๊ฑด์ ๋ง์ Fare ๊ฐ๋ค์ด ํน์ถ๋ ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ํ๊ท ๊ฐ์ ์ฑ์ ๋ฃ์ด์ค๋๋ค.
#### ์ ๊ทํ์ ํ์คํ
์ ๊ทํ์ ํ์คํ๋ฅผ ์ ๋ณด๊ณ ๋ค๋ฅด๊ฒ ์ ํํด์ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
- ์ ๊ทํ : -1 ~ 1 ์ฌ์ด์ ๊ฐ์ผ๋ก ๋ณํ
- ํ์คํ : ํ๊ท ์ด 0์ด๊ณ ํ์คํธ์ฐจ๊ฐ 1์ธ ๊ฐ์ผ๋ก ๋ณํ
์ ๊ทํ์ ํ์คํ ์์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ์ ์์ต๋๋ค.
def normalize(x):
return (x-x.min())/(x.max()-x.min())
def standardscaler(x):
return (x-x.mean())/x.std()
- ์ ๊ทํ์ ํ์คํ ๊ฐ์ ๊ฒฝ์ฐ ํจํค์ง๋ก๋ ์ ๋์์๊ธฐ ๋๋ฌธ์ ์์ฒ๋ผ ์ ์๋ฅผ ํด๋ ๋๊ณ , ํจํค์ง๋ฅผ ์จ๋ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ํจํค์ง๋ฅผ ์ด์ฉํ์ฌ ๋ฐ๊พธ์ด์ฃผ๊ฒ ์ต๋๋ค.
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(train[['Fare']])
train_fare = ss.transform(train[['Fare']])
test_fare = ss.transform(test[['Fare']])
train['Fare2'] = train_fare
test['Fare2'] = test_fare
train.head(3)
#### ์ด๋ ๊ฒ ํ์ฌ ์์ฑ๋ ์ด ์ค์์ ํ์ํ ์ด๋ง ๋
๋ฆฝ ๋ณ์๋ก ๊ฐ์ ธ์ต๋๋ค.
data = train[['Pclass','Sex','SibSp','Parch','Embarked','Fare2','Survived']]
- ์ฌ๊ธฐ์๋ถํฐ ์ด์ ๋ชจ๋ธ๋ง์ ํ์๋ฉด ๋ฉ๋๋ค.<br>
๋
๋ฆฝ ๋ณ์ : 'Pclass','Sex','SibSp','Parch','Embarked','Fare2'<br>
์ข
์ ๋ณ์ : 'Survived'<br>
- ์ด ํ ๋ชจ๋ธ๋ง ๋น๊ต๋ฅผ ํ์๋ฉด ๋ฉ๋๋ค :)
### ๋ฒ์ธ) Age๋ฅผ ๋
๋ฆฝ๋ณ์๋ฅผ ์ฐ์ง ์์ ์ด์
=> ํธ์ฐจ๊ฐ ๋๋ฌด ํฌ๊ณ null๊ฐ์ด ๋๋ฌด ๋ง์์ต๋๋ค.
train['Age'].value_counts(ascending=True)
train['Age'].min()
train['Age'].max()
- ๋์ด๋ฅผ ๊ตฌ๊ฐ๋ณ๋ก ๋ฐ๊พธ๋ ค๊ณ min๊ณผ max๋ฅผ ํ์ธํด๋ณด๋ 0์ด๋ ์๊ณ 80์ด๋ ์์ต๋๋ค.
- ์๋๋ ๋์ด ๊ฐ๋ค์ ์๊ฐํํด๋ณธ ๋ชจ์ต์
๋๋ค.
CountStatus = pd.value_counts(train['Age'].values, sort=True)
CountStatus.plot.bar()
CountStatus.plot.bar(grid=True, figsize=(10,8), fontsize=15) # figsize, fontsize ์กฐ์
train['Age'].values[:10]
import matplotlib.pyplot as plt
CountStatus = pd.value_counts(train['Age'].values[:10], sort=True)
CountStatus.plot.bar()
CountStatus.plot.bar(grid=True, figsize=(10,8), fontsize=10)
plt.xticks(rotation=45)
train['Age'].isnull().sum()
### [๋ง๋ฌด๋ฆฌ]
- ์์ฃผ ์ฐ์ด๋ ์ ์ฒ๋ฆฌ ๊ธฐ๋ฒ๋ค์ ์ด์ฉํ์ฌ ํ์ดํ๋ ๋ฐ์ดํฐ๋ฅผ ์์๊ฒ ๋ง๋ค์์ต๋๋ค.
- ์ด๋ณด์ ๋ถ๋ค์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ๋ชจ๋ธ๋ง์ ํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค :)
### ๊ฐ์ฌํฉ๋๋ค.
### [Reference]
ํผ์ด์จ ์๊ด๊ณ์
https://gomguard.tistory.com/173
์ ๊ทํ์ ํ์คํ
https://bskyvision.com/849
https://dacon.io/competitions/open/235539/codeshare/4447
→ ๊ฐ๋จํ ๋ฅ๋ฌ๋ ๋ชจ๋ธ ๊ฐ๋ฐ
1. ๋ชจ๋ธ ๊ตฌ์ถ
sklearn์ LogisticRegression๊ณผ DecisionTreeClassifier์ ์ฌ์ฉํ์ต๋๋ค. ์๋์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์์ต๋๋ค.
https://dacon.io/competitions/open/235539/codeshare/1534?page=1&dtype=recent
๐ ๋๋ ์
ํ์ดํ๋ ์์กด ์์ธก ๊ฒฝ์ง๋ํ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ์ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ๊ฐ๋ฐํด๋ณด์๋ค. ๋ฅ๋ฌ๋์ ๊ธฐ์ด์์ ๋งค์ฐ ์ ๋ช ํ ๋ฐ์ดํฐ์ธ๋ฐ ์ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ์๋ ๋งค์ฐ ์ข์ ๋ฐ์ดํฐ๋ผ๊ณ ์๊ฐํ๋ค. ๋ฐ์ดํฐ์ ์ ์ฒ๋ฆฌ๋ ๋ชจ๋ธ ๊ฐ๋ฐ์ ์์ ๋งค์ฐ ์ค์ํ ๊ณผ์ ์ด๋ฉฐ ์ด๋ ํ ๊ฐ์ผ๋ก ์ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋๊ฐ์ ๋ฐ๋ผ ์์ธก ๊ฒฐ๊ณผ๊ฐ ๋งค์ฐ ์์ดํ๊ฒ ๋ํ๋๊ธฐ๋ ํ๋ค. ๋ณต์กํ ๋ฌธ์ ๋ ์๋์๊ธฐ์ ํฐ ์ฐจ์ด๋ ์์ง๋ง ํด๋น ๊ณผ์ ์ ์ค์์ฑ์ ์์์๋ ํ๋์ด์๋ค.
ํญ์ colab์ ์ด์ฉํ์ฌ ์ฝ๋๋ฅผ ์์ฑํด์๊ธฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ๋ ์ฌํ์ตํ๋ ๊ธฐํ๊ฐ ๋์๋ค.
๐ฐ๏ธ NEXT GOAL
→ ์ฌ๋ฆฌ ์ฑํฅ ์์ธก ๋ํ ๋ค๋ค๋ณด๊ธฐ
→ ํ์ดํ๋ ์์กด ์์ธก ๋ชจ๋ธ ๊ฐ์
→
→
'MOGAKCO' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ชจ๊ฐ์ฝ 5์ฐจ(2022-08-06) (0) | 2022.08.19 |
---|---|
๋ชจ๊ฐ์ฝ 4์ฐจ(2022-08-06) (0) | 2022.08.06 |
๋ชจ๊ฐ์ฝ 3์ฐจ(2022-07-23) (3) | 2022.07.25 |
๋ชจ๊ฐ์ฝ 2์ฐจ ์ถ๊ฐ ๊ณต๋ถ(2022-07-21) (2) | 2022.07.23 |
๋ชจ๊ฐ์ฝ 1์ฐจ(2022-07-02) (2) | 2022.07.02 |