[๋ฉ์์ด์ฌ์์ฒ๋ผ ๋ฐ์ดํฐ๋ถ์ ๋ถํธ์บ ํ 5๊ธฐ] EDA ์์ฃผ๐ป ๋ฐ์ดํฐ ๋ถ์ํ๊ธฐ
0. ๋ถ์์ ๋ค์ด๊ฐ๊ธฐ ์ ์..
๋๋์ด ๋ฐ์ดํฐ ๋ค์ด ๋ฐ์ดํฐ ๊ฐ์ง๊ณ ๋ถ์์ ํด๋ณด์๋ค.
์ด์ ๊ทธ๋ํ๋ ์ข ๋ ๋ค์ด๋๋ฏน ํ๊ณ ์๋ฏธ์๋ ๋ฐ์ดํฐ์ด๋ค ๋ณด๋ ์ฌ๋ฐ๋ค.
MPG, ๋ณต์งํจ๋๋ฐ์ดํฐ, ์์ฝ ๋ฐ์ดํฐ ๊ทธ๋ฆฌ๊ณ ์ฃผ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ค๋ดค์ง๋ง,
๊ฐ์ฅ ์ฌ๋ฐ์๋ ๋ฐ์ดํฐ๋ ์์ฝ ๋ฐ์ดํฐ์๋ค ๐บ๐พ๐ท
๊ทธ๋ฆฌ๊ณ ์์
์๊ฐ ๋ฅํ๊ฒ ๋ค๋ฃจ์ง ์์์, ๋ณต์ต๋ ํ ๊ฒธ ๋ค์ํ ๋ถ์๋ค์ ํด๋ณด๋ ค ํ๋ค
1. ๋ฐ์ดํฐ ์๊ฐ
๋ฐ์ดํฐ ๋ง๋ณด๊ธฐ๋ฅผ ์ํด head()๋ก 5๊ฐ์ ํ๋ง ๊ฐ์ ธ์๋ณธ๋ค.
< ๋ณ์๋ช ์ ๋ฆฌ>
country | ๊ตญ๊ฐ๋ช |
beer_servings | ๋งฅ์ฃผ ์ |
spirit_servings | ์ฆ๋ฅ์ฃผ ์ |
wine_servings | ์์ธ ์ |
total_litres_of_pure_alcohol | ์์ ์์ฝ์ ์ด ๋ฆฌํฐ |
continent | ๋๋ฅ |
2. ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
1) ๋ฐ์ดํฐ์ ๊ฒฐ์ธก์น ํ์ธ
drinks.isna().sum()
๊ฒฐ์ธก์น๊ฐ ์กด์ฌํ๋ ์ปฌ๋ผ์ continent ๋ฟ์ด๋ค.
๊ทธ๋ผ continent์ ๋ถํฌ๋ฅผ ํ์ธํด๋ณด์
csv ํ์ผ์ ํ์ธํด๋ณด๋ continent ์ปฌ๋ผ์ NA ๊ฐ์ด ์กด์ฌํ๋ค.
์ด๊ฒ์ ๊ฒฐ์ธก์น์ NA๊ฐ ์๋๋ผ North America๋ฅผ ์ค์ธ NA์ด๋ค.
ํ์ด์ฌ์์ ์ด๊ฒ์ ๊ฒฐ์ธก์น๋ก ์ธ์ํ๊ณ ์๋ค.
์์นซ ์๋ชป ๊ฒฐ์ธก์น ์ฒ๋ฆฌํ๋ค๊ณ drop ํด๋ฒ๋ฆฌ๋ฉด ํฐ!์ผ!๋!๋ค!
2) ๋ฐ์ดํฐ ๊ฒฐ์ธก์น ์ฒ๋ฆฌ
Na๋ผ๋ ๋จ์ด๋ฅผ ์ค์ Na๋ผ๋ "๊ฐ "์ผ๋ก ๋ถ๋ฌ์ค๋๋ก
na_filter๋ผ๋ ๋งค๊ฐ๋ณ์์ False๋ฅผ ๋ฃ์ด์ค๋ค.
drinks = pd.read_csv('data/drinks.csv', na_filter = False)
drinks.isna().sum()
๐จ ์ฃผ์
์ด๊ฒ์ ์ปฌ๋ผ๋ค ์ค continent ์ปฌ๋ผ์๋ง ๊ฒฐ์ธก์น(์ฌ์ค Na ๋จ์ด์ด์ง๋ง)๊ฐ ์์ด์ ๊ฐ๋ฅํ ์ผ์ด๋ค.
๋ง์ฝ ๋ค๋ฅธ ์ปฌ๋ผ์๋ ๊ฒฐ์ธก์น๊ฐ ์๋ค๋ฉด continent์ปฌ๋ผ์๋ง na_filter๋ฅผ ์ ์ฉํด์ฃผ์ด์ผ ํ๋ค.
3. ๋ฐ์ดํฐ ๋ถ์
1) ๊ฐ ๋๋ผ๋ณ๋ก ์ ์ฒด ์ ์๋น๋์ด ์ผ๋ง์ธ์ง์ ๊ณ์ฐํ๋ค.
drinks['total_servings'] = drinks['beer_servings'] + \
drinks['spirit_servings'] + \
drinks['wine_servings']
drinks
total_servings๋ผ๋ ์ปฌ๋ผ์ด ์์ฑ๋ ๊ฒ์ ํ์ธ
์ํ๊ฐ๋์คํ์ ๋ฌด์ฌ๋ฆผ๊ต์ด๋ผ ์ ์๋น๋์ด 0์ธ ๊ฒ๋ ํ์ธ..!
2) ๋๋ฅ๋ณ ์์ ์์ฝ ๋น์จ์ ๋น๊ตํด๋ณธ๋ค.
์์ฝ ๋น์จ = ์ ์ฒด ์์ ์์ฝ๋ / ์ ์ฒด ์ ์๋น๋
์์ฝ ๋น์จ ์ปฌ๋ผ ์์ฑ
drinks['alcohol_rate'] = drinks['total_litres_of_pure_alcohol'] / drinks['total_servings']
drinks['alcohol_rate'].fillna(0, inplace=True)
๊ฐ ๋๋ฅ๋ณ ์์ ์์ฝ๋น์จ์ ํ๊ท ์ผ๋ก ๋ฐ์ดํฐํ๋ ์ ์์ฑ
# ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
df2 = drinks[['continent', 'alcohol_rate']]
# ๊ฐ ๋๋ฅ๋ณ ์์ฝ ๋น์จ์ ํ๊ท ์ ๊ฐ์ ธ์จ๋ค.
df3 = df2.groupby('continent').mean()
df3.sort_values('alcohol_rate', inplace = True, ascending = False)
df3
์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ Seaborn์ barplot์ผ๋ก ์๊ฐํ ํด๋ณด์
# ์๊ฐํ
df3.reset_index() #๊ธฐ์กด์ ์ธ๋ฑ์ค๋ฅผ ์๋ก์ด ์ปฌ๋ผ์ผ๋ก ์ถ๊ฐ
sns.barplot(data = df3, x = 'continent', y = 'alcohol_rate', hue = 'continent', palette = 'pastel')
๐ญ ํ์คํ ์ํ๋ฆฌ์นด ๋๋ฅ์ด ๋์ฌ๋ฒฝ ์์ค์ผ๋ก ๋๋ค.
์ผ๋ง๋ ์ผ ๋
์ฃผ๋ฅผ ๋ง์๊ธธ๋....
์์๋๋ก ์์์๊ฐ ๊ฐ์ฅ ๋ฎ์๋ค.
์ด ๊ทธ๋ํ๋ ์ํ๋ฆฌ์นด์ ์์ฝ ๋น์จ์ด ์๋์ ์ผ๋ก ๊ทนํ ๋๋ค ๋ผ๋ ์ธ์ฌ์ดํธ๋ฅผ ์ป๋ ์ ๋๋ก ์ดํดํ๊ณ ๋์ด๊ฐ๋ค.
3) ํ๊ตญ์ ์ ์ธ๊ณ์์ ๋ ์ฃผ ์์๊ฐ ์ด๋์ ๋์ผ๊น? ๐ซจ
# ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
country_with_rank = drinks[['country', 'alcohol_rate']]
country_with_rank
๋ฐ์ดํฐ๋ฅผ ์ด๋ ๊ฒ ๋ถ๋ฌ์ค๋ฉด ํ์ country ์์ผ๋ก ์ ๋ ฌ๋์ด ์๊ธฐ ๋๋ฌธ์
๋
์ฃผ ์์ ๊ธฐ์ค(alcohol_rate)์ผ๋ก ๋ค์ ์ ๋ ฌํด์ฃผ์ด์ผ ํ๋ค.
# alcohol_rate๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
country_with_rank.sort_values('alcohol_rate', ascending = False, inplace=True)
country_with_rank
ํ๊ตญ(South Korea)์ ์์ ํ์ธํ๊ธฐ
# ํ๊ตญ์ด ๋ช ๋ฒ์งธ์ ์๋์ง ํ์
ํ๋ค.
# index๋ฅผ ๋ฆฌ์
ํ๋ค.
a1 = country_with_rank.reset_index(drop=True)
# ํ๊ตญ์ index๋ฅผ ๊ฐ์ ธ์จ๋ค.
korea_index = a1.query('country == "South Korea"').index[0]
print(f'{korea_index} ์')
์ฝ๋๋ฅผ ๋๋ ค๋ณธ ๊ฒฐ๊ณผ ํ๊ตญ์ 14์ ์ด๋ค. (๊ฝค ๋๊ตฐ.....)
์ ์ธ๊ณ์์ ์ด๋ ์ ๋ ์์น์ ์๋์ง ์๊ฐํํด์ ๋ณด์.
matplotlib์ barplot์ ์ด์ฉํด๋ณธ๋ค.
โป x์ถ์ ๋๋ผ ์ด๋ฆ์ ํ์ํ๋ฉด ํ
์คํธ๋ค์ด ๊ฒน์ณ์ ๋ญ๊ฐ ๋ญ์ง ์์๋ณผ ์ ์๊ธฐ ๋๋ฌธ์
x์ถ์ ๊ทธ๋ฅ ๋ฐ์ดํฐ ๊ธธ์ด๋ฅผ arange๋ก ๋ฐ์์ ์ธ ๊ฒ์ด๋ค. ์ด์ฐจํผ ํ๊ตญ์ ํ์ดํ๋ก ๋ฐ๋ก ํ์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๊ด์๋ค (?)
# x ์ถ
x = np.arange(len(country_with_rank))
# y ์ถ
y = country_with_rank['alcohol_rate']
# ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฐ๋ค. ์ด ๋, ๋ฐํํ๋ ๋ง๋ ๊ฐ์ฒด ๋ฆฌ์คํธ๋ฅผ ๋ฐ๋๋ค.
# ํ๊ตญ์ ์์น๋ฅผ ํ์ํด์ผํ๊ธฐ ๋๋ฌธ์
bar_list = plt.bar(x, y)
# ํ๊ตญ์ ๋ง๋๋ฅผ ๋นจ๊ฐ์์ผ๋ก ์ค์ ํด์ค๋ค.
bar_list[korea_index].set_color('r')
# ์ด๋
ธํ
์ด์
์ ํ์ดํ ์ต์
arrow_dict1 = {
# ์์
'facecolor' : 'red',
}
# ํ๊ตญ ๋ถ๋ถ์ ์ด๋
ธํ
์ด์
์ ํ์ํ๋ค
# text : ํ์ํ ๋ฌธ์์ด
# xytext : ์ด๋
ธํ
์ด์
์์ ๋ฌธ์์ด ๋ถ๋ถ์ ์์น
# arrowprops : ํ์ดํ ์ต์
plt.annotate(text = 'South Korea', xy=(korea_index, y[korea_index] + 0.04),
xytext = (korea_index + 20, y[korea_index] + 0.1),
arrowprops=arrow_dict1)
plt.show()
ํ๋์ ์์๋ณด๊ธฐ ์ฌ์ด ํ ์์ฑ !!
๐ญ ํ์คํ ์๋์ ์ผ๋ก ๋์ ๋๋ผ๋ ๋ช ์๊ณ , ๊ทธ ๋ค์ ๋ถํฐ๋ ํ ๋จ์ด์ง๋๊ฒ ๋์ ๋ณด์ธ๋ค.
์ฐ๋ฆฌ๋๋ผ๊ฐ ์๊ฐ๋ณด๋ค ์์๊ถ์ ์๋ค๋๊ฒ ์ ๊ธฐํ๋ค. ์ผ๋ณธ, ์ค๊ตญ, ๋๋ง, ๋ถํ๋ ๊ถ๊ธ...
์์์์์ ์ ๋ก ์ ๋ช
ํ ๋๋ผ๋ค ๋ช๊ฐ ํ์ธํด๋ณด๋ฉด ์ด๋จ์ง ๊ถ๊ธํด์, ๋ง์ง๋ง์ผ๋ก ์ถ๊ฐ ๋ถ์ ํด๋ณด์๋ค.
4. ํ๊ตญ, ๋ถํ, ์ผ๋ณธ, ์ค๊ตญ, ํ๊ตญ, ๋ฒ ํธ๋จ ์ ๋
์ฃผ ๋น์จ ๋น๊ตํด๋ณด๊ธฐ
# ํ๊ตญ, ๋ถํ, ์ผ๋ณธ, ์ค๊ตญ, ํ๊ตญ, ๋ฒ ํธ๋จ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
Asia1 = ['South Korea', 'North Korea', 'Japan', 'China', 'Thailand', 'Vietnam']
df100 = drinks.query('country in @Asia1')
# ๊ฐ ๋๋ผ์ ๋
์ฃผ ๋น์จ์ ์์๋๋ก ๋์ดํ๊ธฐ
df200 = df100.sort_values('alcohol_rate', ascending = False, inplace = False)
# ์๊ฐํ
sns.barplot(data = df200, x = 'country', y = 'alcohol_rate', hue = 'country', palette = 'autumn')
plt.title('ํ๋ถ์ผ์คํ๋ฒ ๋
์ฃผ ์์')
plt.show()
๋ถํ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ค 0์ด๋ค..
์๋ฌด๋๋ ์์ง์ ๋ชปํ๊ฒ ์ง ? ๐
๐ญ ํ-์ผ-์ค-ํ-๋ฒ ์์ผ๋ก ๋ํ๋๋ค. ํ๊ตญ๊ณผ ๋ฒ ํธ๋จ์ ๋น์ท๋น์ทํด๋ณด์ด๊ณ ..
์ผ๋ณธ๋ ์ฌ์ผ, ๋งฅ์ฃผ๊ฐ ์ ๋ช
ํ๋ค ๋ณด๋ ๊ฝค๋ ๋๋ค..
๊ทผ๋ฐ ํ๊ตญ์ ๋ฌด์จ ์ผ์ด์ง.. ์์ด๋ ๊ฒ ๋์๊ฒ์ด์ผ ใ
ใ
ใ
ใ
๐ ๋๋ ์
์ฌ๋ฐ๋ค... ๊ด์ฌ์ฌ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋ ๊ถ๊ธํ ๊ฒ๋ ์๊ธฐ๊ณ
๊ณ์ ๊ณ์ ๋ถ์ํ๊ณ ์ถ์ ์์ฌ์ด ์๊ธฐ๋๊ฑฐ ๊ฐ๋ค.
๊ทผ๋ฐ ์์ง ์ธ์ฌ์ดํธ๋ฅผ ์ป๋ ๋ถ๋ถ์์๋ ๋ถ์กฑํ ์ ์ด ๋ง์ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ํ๋ฅผ ๋ณด๋ฉด ๊ทธ๋ฅ ๋๋ค? ๋ฎ๋ค? ์ ๋๋ง ํ์ธํ๊ณ ์๋ค.
์ด ๊ทธ๋ํ์์ ๋์ผ๋๊น ๋ค๋ฅธ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค์ ~~์ ํ์ธํด๋ด์ผ๊ฒ ๋ค. ์ ๋๋ ์๋๋๋ฏ ใ
ใ
๋ฌผ๋ก ๋ ์์ง ๋ฐ์ดํฐ๋ถ์๊ฐ ์ ๋ง์ฃผ....๊ฐ ๋ ์ฃผ๋์ด๋๊น~ ใ
ใ
์ฑ์ฅํ์ ๊ฐ์์๋!!!!!!!
์ถ์ฒ : ๋ฉ์์ด ์ฌ์์ฒ๋ผ