๐ tidy data ํฌ์คํ ์์ ์ฐ๋ฆฌ๋ tidyํ data๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๊ธฐ์กด dataframe์ meltํ๋ค๊ณ ํ์๊ณ , ๋ค์ ์์์น ์ํค๊ธฐ ์ํด pivot_table()์ ํ์ฉํ๋ค๊ณ ๋ฐฐ์ ๋ค.
๐ ๊ทผ๋ฐ ์ฌ๊ธฐ์ ์ค์ํ ๊ฑด, pivot_table()์ ๊ธฐ์กด messy data๋ก ์์์น์ํค๋ ๊ธฐ๋ฅ๋ณด๋ค๋, ์ฃผ์ด์ง dataframe์ ์ผ๋ถ ํ์ํ ์ ๋ณด๋ง ๊ณจ๋ผ (์ง๊ณํจ์๋ฅผ ์ฌ์ฉํด์) dataframe ํํ๋ก ๋ค์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๋ ์ฃผ ๊ธฐ๋ฅ์ด ๋ด๊ฒจ ์๋ค!
(์ฃผ๋ก EDA ๊ณผ์ ์์ ๋ณธ dataframe์ ๋ํด ์์๋ณด๊ณ ์ถ์ ๋ pivot_table์ ๋ง์ด ์ฌ์ฉํ๋ค)
- ์ ํฌ์คํ ์์ ์ด๋ ๊ฒ ๋ฐฐ์ -
๐ ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ pivot_table์ด ์ค์ dataframe์์ ์ด๋ป๊ฒ ์ ์ฉํ๊ฒ ์ฐ์ด๋ ์ง ์ด๋ฒ ํฌ์คํ ์ ํตํด ๋ ์์ธํ๊ฒ ์์๋ณด๊ณ ์ ํจ!
๐ฉ๐ฆณ pivot_table() ๐ฉ๐ฆณ
https://pandas.pydata.org/docs/reference/api/pandas.pivot_table.html
pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True)
โ๏ธ data = pivot_table๋ก ๋ฐ๊ฟ ์ data
โ๏ธ values = ์ด๋ค column์ value๋ก ํ์ฌ ๊ฒฐ๊ณผ๋ก ํ์ํ ์ง ๋ณด์ฌ์ค
โ๏ธ index = index๋ก ๋ํ๋ผ column ์ด๋ฆ (์ธ๋ก๋ฐฉํฅ)
โ๏ธ columns = column์ผ๋ก ๋ํ๋ผ data์ column ์ด๋ฆ ์ข ๋ฅ๋ค (๊ฐ๋ก๋ฐฉํฅ)
โ๏ธ aggfunc = values๋ฅผ ์ ํ์ผ๋ฉด ์ด๋ค aggfunc์ ๊ธฐ์ค์ผ๋ก ๋ํ๋ผ ์ง ์ ํ ์ ์์
โ๏ธ fill_value = ๊ฒฐ์ธก์น ์ฑ์ฐ๋ ๋ฐฉ๋ฒ
โ๏ธ margins = True๋ก ์ค์ ๋๋ฉด aggfunc์ ์ํด ๊ตฌํ ๊ฐ index์ columns์ ๊ฒฐ๊ณผ๋ฅผ ์๋ก์ด ํ๊ณผ ์ด๋ก ํ์
โ๏ธ dropna = True๋ก ์ค์ ํ๋ฉด ๋ชจ๋ ๊ฐ์ด NaN์ธ column์ aggfunc ์ฐ์ฐ์ ํฌํจ์ํค์ง ์๋๋ค๋ ๋ป
โ๏ธ margins_name = margins๋ฅผ True๋ก ์ค์ ์ ์๋ก์ด ์ง๊ณํจ์๋ก ๋์ฌ column ์ด๋ฆ ์ค์ (default๋ All)
โ๏ธ observed = categorical variable์ ๊ดํ์ฌ ์ง๊ณํจ์ ์ฌ์ฉ ์ ์ฌ์ฉํ column๋ค๋ง ๋ํ๋ผ ์ ์์ (True๋ก ์ค์ ์)
โ๏ธ sort = ์ถ๋ ฅ๊ฒฐ๊ณผ๋ฅผ sorting
๐ฆธโ๏ธ ์ฆ! ์ฐ๋ฆฌ๋ dataframe์ EDAํ๋ ๊ณผ์ ์์ ์ด๋ค ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํด ๋ column ์ฌ์ด์ ์ฐ๊ด์ฑ์ ๋ฐ์ง๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค! ๐ฆธโ๏ธ
- titanic dataset ์์ -
Q. ๊ฐ ์ฑ๋ณ์ ๋ฐ๋ฅธ class ๋ฑ๊ธ๋ณ ์์กด ์ฌ๋ถ์ ํ๊ท ์ ์๊ณ ์ถ๋ค๋ฉด?
(์ด ๋ ๊ฐ ์ฑ๋ณ & ๊ทธ๋ฆฌ๊ณ ๊ฐ class ๋ณ ์์กด ์ฌ๋ถ ํ๊ท ๊น์ง๋ ์๋ก์ด column ๋ฐ row๋ฅผ ์ด์ฉํด์ ์์ฑํ๋ค)
pd.pivot_table(data=titanic, index='sex', columns='pclass', values='survived', aggfunc='mean', margins_name = 'Total', margins=True)
Q. ๊ฐ ์ฑ๋ณ์ ๋ฐ๋ฅธ class ๋ฑ๊ธ๋ณ ์์กดํ ์ฌ๋ ์๋ฅผ ์๊ณ ์ถ๋ค๋ฉด?
(์ด ๋ ๊ฐ ์ฑ๋ณ & ๊ทธ๋ฆฌ๊ณ ๊ฐ class ๋ณ ์์กด ์ฌ๋ถ ํฉ๊ณ๊น์ง๋ ์๋ก์ด column ๋ฐ row๋ฅผ ์ด์ฉํด์ ์์ฑํ๋ค)
pd.pivot_table(data = titanic, index='sex', columns='pclass', values='survived', aggfunc='count', margins_name = 'Total', margins=True)
- ์ถ๋ ฅ๊ฒฐ๊ณผ (์ข) mean / (์ฐ) count -
→ ์ด๋ ๊ฒ pivot_table()์ ์ฌ์ฉํ๋ฉด ๋ด๊ฐ ์ํ๋ ์ ๋ณด๋ง ๊ณจ๋ผ ํ๋์ ์ง๊ณํจ์๋ฅผ ๋ฐํ์ผ๋ก ํํํ๊ณ ๋ฐ๋์งํ EDA ๊ณผ์ ์ ์ํํ ์ ์์!
** pivot_table() ์๋ฃ ๐ฑ**
* ๋ด์ฉ ์ถ์ฒ) https://www.youtube.com/watch?v=RlIiVeig3hc&t=1338s
* ์ธ๋ค์ผ ์ถ์ฒ) https://www.pngegg.com/en/png-eyrdq
๋๊ธ