ํ•˜๋ฃจ๊ณต๋ถ€

์ œ 17์žฅ ๐Ÿ“’๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ_ํƒ€์ดํƒ€๋‹‰ ๋ฐ์ดํ„ฐ์…‹ ํ™œ์šฉ-2๐Ÿ“’

ํ‚ด๋ฐ”๋‹ค 2022. 11. 3. 20:46

์ „์ฒ˜๋ฆฌ ๊ณผ์ •

1) .isnull( ) ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฒฐ์ธก์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด ์ค€๋‹ค. sum( )์„ ์ด์šฉํ•˜์—ฌ ๊ฒฐ์ธก์น˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธ

2) ์ „์ฒด ๋ฐ์ดํ„ฐ ๋Œ€๋น„ ๊ฒฐ์ธก์น˜์˜ ๋น„์ค‘์„ ๊ตฌํ•˜๋ ค๋ฉด =  ๊ฒฐ์ธก์น˜ / ์ „์ฒด ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ x 100

 

 

ํ•„์š”์—†๋Š” ticket ์ปฌ๋Ÿผ์„ ๋ˆ„๋ฝ์‹œ์ผœ๋ณด์ž

โœ… 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)
      • ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž ๋ฐ˜ํ™˜
      • ์—†์œผ๋ฉด ๋‹ค๋ฅธ ๊ฒƒ ๋ฐ˜ํ™˜

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)