์ ์ฒ๋ฆฌ ๊ณผ์
1) .isnull( ) ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๊ฒฐ์ธก์น๋ฅผ ๋ํ๋ด ์ค๋ค. sum( )์ ์ด์ฉํ์ฌ ๊ฒฐ์ธก์น ๊ฐ์๋ฅผ ํ์ธ
2) ์ ์ฒด ๋ฐ์ดํฐ ๋๋น ๊ฒฐ์ธก์น์ ๋น์ค์ ๊ตฌํ๋ ค๋ฉด = ๊ฒฐ์ธก์น / ์ ์ฒด ๋ฐ์ดํฐ ๊ฐ์ x 100
โ data.drop('ticket', axis=1, inplace=True) or โ del data['ticket'] ์ด์ฉํ๊ธฐ
3)
ticket ์ปฌ๋ผ์ ๋๋ฝ์ํจ csvํ์ผ์ ์ธ๋ถ๋ก ๋นผ๋ด๊ธฐ
to_csv๋ฅผ ํ ๊ฒฝ์ฐ๋ ์๋์ผ๋ก csv์ ๋ก์ฐ๋ช
์ ๋งค๊ฒจ์ฃผ๊ธฐ ๋๋ฌธ์
์ถํ ๋ค์ importํ ๋ Unnamed :0 ์ปฌ๋ผ์ด ๋ค์ด์ต๋๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด index=False๋ฅผ ์ค ์ ์์ต๋๋ค.
๐ Cabin ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์ ๋๋ณ์ ์์ฑ
- ๊ฐ๋ณ ๊ฐ์ค ๋ฒํธ๋ ์๋ฏธ๊ฐ ์์(123, 456 ...)
- cabin ๋ฐ์ดํฐ์ ์ฒซ ๊ธ์๊ฐ deck(๊ตฌ์ญ)์ ์๋ฏธ
- ์ ๋๋ณ์ : deck์ปฌ๋ผ ์ถ๊ฐ
- deck ์ปฌ๋ผ์ ์ถ๊ฐ๋ ์๋ฃ : A, B, C, D, E, F, G, T, unknown
- cabin ์ปฌ๋ผ์ ๊ฐ ๊ฐ์ ์ ์ฉํ ์ฒ๋ฆฌ
- 1)
- ๊ฐ์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๊ฐ deck list์ ์์ผ๋ฉด ํด๋น deck์ ๋ฐํ
- ์์ผ๋ฉด(NaN) deck list์ unknown ๋ฐํ
- 2)
- ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ฐํ
- ์์ผ๋ฉด ๋ค๋ฅธ ๊ฒ ๋ฐํ
- 1)
deck_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'T', 'unknown']
sample = ['C123', np.nan, 'D201', np.nan, 'F999']
- ์ด๋ ๊ฒ ๋์ค๊ฒ = ['C', 'unknown', 'D', 'unknown', 'F']
๐ aplly๋ map์ ํตํด ์ ๋ ๋ณ์๋ก ๊ต์ฒดํด์ฃผ๊ธฐ
def cabin_to_deck(value):
deck_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'T', 'unknown']
- NaN์ธ์ง ๊ฒ์ฌ
if type(value)==type(np.nan):
return 'unknown'
- NaN๊ฐ ์๋๋ฉด ๋ฑ ์ข
๋ฅ๋ง ๋ฆฌํด
elif value[0] in deck_list:
- ๋ฑ ๋ฆฌ์คํธ์ ๋ถ๋ฅ๋ ๋ฑ์ด ๋ง๋์ง ์ฒดํฌ
return value[0]
else:
return 'unknown'
๐ ์ปฌ๋ผ๋ช ์ 'deck'์ผ๋ก ๋ฃ์ด์คฌ์ต๋๋ค
โ data['deck'] = data['cabin'].map(cabin_to_deck)
๐ Name ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์ ๋ ๋ณ์ ์์ฑ
- ๊ฐ๋ณ ์ด๋ฆ์ ๋ชจ๋ธ ์์ธก์ ์ ์๋ฏธํ ๋ณ์๊ฐ ์๋๋ค.
- ๋ํ ํน์ฑ์ ์ฐพ์ ์ ์๋ ๋ฒ์ฃผ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ์ ์๋ค.
- Mr, Ms, Miss, Master ...
- ์ถ์ถ ํ์ฌ title ์ปฌ๋ผ์ผ๋ก ์ถ๊ฐ
- ์ ๊ท์์ ์ฌ์ฉํ์ง ์๊ณ .split() ๋ ๋ฒ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌ
์๋ก์ด ์ปฌ๋ผ์ธ splited_name ์ปฌ๋ผ์ ์ ์ฅํด์ฃผ๊ธฐ
โ
def name_split(value):
return value.split(", ")[1].split(".")[0]
โ data['splited_name'] = data['name'].apply(name_split)
โ data['splited_name'].unique()
array(['Mr', 'Mrs', 'Miss', 'Master', 'Don', 'Rev', 'Dr', 'Mme', 'Ms',
'Major', 'Lady', 'Sir', 'Mlle', 'Col', 'Capt', 'the Countess',
'Jonkheer'], dtype=object)
๐ ๊ฒฐ์ธก์น ์ฒ๋ฆฌ - Age
- ๋ฏธ์ฑ๋ (Master, Miss)
- title ๋ณ ํ๊ท ์ผ๋ก age ๊ฒฐ์ธก์น ๋์ฒด
- transform
- (์ฐธ๊ณ )์ฌ์ฉ์์ ์ํจ์ : ๋งค๊ฐ๋ณ์ 3๊ฐ(ํ์ดํ๋ณํ๊ท , ๋ฐ์ดํฐ, ํ์ดํ๋ฆฌ์คํธ)
- age ์ปฌ๋ผ ์ค null์ด ๋ค์ด์จ ์ปฌ๋ผ ๊ฐ์๋ฅผ ๊ตฌํ๊ธฐ
โ
data.age.isnull().sum()
- groupby ๋ค์ ์ฌ์ฉํ๋ transform์ ๊ธฐ์กด ๊ฐ์ ๋ฌด์ํ๊ณ , ์ง๊ณํจ์๊ฐ์ผ๋ก ๋์ฒดํฉ๋๋ค.
- ์๋ 'age'์ ์๋ ๊ฒฐ์ธก์น๋ฅผ ๋์ ํ๊ธฐ ์ํด .fillna( ) ๋ฅผ ์จ์ ์ฑ์์ฃผ๊ธฐ
๐ Age ๋ฐ์ดํฐ๋ฅผ ๋ฒ์ฃผํ ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝ
- ๋์ด ์ซ์ ๊ฐ ์์ฒด๋ก๋ ์๋ฏธ๊ฐ ์ ๋ค.
- ์ฐ๋ น๋๋ก ๊ตฌ๋ถํ๋ ๊ฒ์ด ๋ ์๋ฏธ๊ฐ ์๋ ๊ตฌ๋ถ ๊ฐ
- ๊ตฌ๊ฐ
- ~ 20
- 20 ~ 40
- 40 ~ 60
- 60 ~
- ์ฌ์ฉ์ ์ ์ํจ์
โ
def age_class(value):
if value < 20:
return 'under20'
elif value < 40:
return '20-40'
elif value < 60:
return '40-60'
else:
return 'over60'
๐ data['age_class'] ๋ฅผ ๋ง๋ค์ด ์ ์ฅํด์ฃผ์ธ์.
- ๋ด๋ถ์ ๊ฐ ํ๋ํ๋๋ฅผ ํจ์ age_class๋ฅผ ์ด์ฉํด์ ๋์ด๋๋ณ๋ก ๋ถ๋ฅํด์ฃผ์ธ์.
โ
data['age_class'] = data['age'].map(age_class)
0 20-40
1 20-40
2 20-40
3 20-40
4 20-40
...
886 20-40
887 under20
888 20-40
889 20-40
890 20-40
Name: age_class, Length: 891, dtype: object
- ์ฐ๋ น๋๋ณ๋ก ๋ฐ์ดํฐ๊ฐ ๋ช ๊ฐ๊ฐ ์๋์ง
โ data['age_class'].value_counts()
20-40 560
under20 168
40-60 137
over60 26
Name: age_class, dtype: int64
๐ ๊ทธ๋ฃน๋ฐ์ด๋ฅผ ์ด์ฉํด, ์ฐ๋ น๋๋ณ ์์กด/์ฌ๋ง์๋ณ ์ธ์์๋ฅผ ์ถ๋ ฅํด๋ณด๊ธฐ.
โ
data.groupby(['title', 'survived', 'sex'])[['survived']].count()
์ด์ฒ๋ผ 4๊ฐ์ ์ฐ๋ น๋์ ์ฑ๋ณ ์์กด ์ธ์์๋ฅผ ํ์ธํด๋ณด๋ฉด ์๊ด๊ด๊ณ๊ฐ ์ํฅ์ ๋ง์ด ์ฃผ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
ํ๊ธฐ ๋ถ์์ ํตํด ํ์คํ ๊ฒฐ๋ก (์์ธ)์ ๋ด๋ฆฌ๋ฉด ์ข ๋ ์ ํํ ์ง๊ณ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์๊ฐํ
- barplot ๊ทธ๋ฆฌ๊ธฐ, stacked ํํ๋ก ๊ทธ๋ฆฌ๊ธฐ
๋ฐ์ดํฐํ๋ ์์ ๋ฐ๋ก plot(), hist() ๋ฑ์ ์ฌ์ฉํ๋ฉด ์ค์ ๋ก ๊ทธ๋ ค์ค๋๋ค.
survived๋ฅผ x์ถ์(row๋ก), ๋์ด์ ๋ณด๋ฅผ y์ถ์(column)์ผ๋ก ๋๊ธฐ ์ํด unstack()์คํ
โ
barplot_data = age_classed_data.unstack(0)
- ๋ฉํฐ์ธ๋ฑ์ค๋ก ์ธํด ๋ฒ๋ก๊ฐ ๋ณด๊ธฐ ์ข์ง ์์ผ๋ฏ๋ก ์๊ฑฐ
โ
barplot_data.columns.names = ["", ""]
โ barplot_data.plot(kind='bar', stacked=True)
'ํ๋ฃจ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ML_KNN_์๊ณ ๋ฆฌ์ฆ๐ฉ (0) | 2022.11.09 |
---|---|
๐ขGit์ค์ & Github์ฌ์ฉ๋ฒ๐ข (0) | 2022.11.09 |
์ 16์ฅ ๐๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ_ํ์ดํ๋ ๋ฐ์ดํฐ์ ํ์ฉ-1๐ (0) | 2022.11.02 |
๐ค ๊นจ(์ฐ์น์!)์(๊ณ ํ์!)๊ณต๋ถ : ์๊ด ๋ถ์ (0) | 2022.11.02 |
์ 15์ฅ ๐๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ_ํ์คํ ๋ฑ..๐ (0) | 2022.11.01 |