04. ํ๋ค์ค ๋ฐ์ดํฐํ๋ ์ ๊ธฐ์ด ์ดํด
04. ํ๋ค์ค ๋ฐ์ดํฐํ๋ ์ ๊ธฐ์ด ์ดํด ๊ด๋ จ
01. ๋ฐ์ดํฐํ๋ ์์ ์ถ๋ ฅ
ํ๋ค์ค๋ ๋ฐ์ดํฐ๊ฐ ์์นํ URL์ ์
๋ ฅํ๋ ๊ฒ๋ง์ผ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ฝ์ด์ค๋ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. csv ํ์ผ ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ์ฌ ๋ฐ์ดํฐํ๋ ์์ ์ ์ฅํด๋ด
์๋ค. csv ํ์ผ์ ๋ฐ์ดํฐํ๋ ์์ผ๋ก ์ฝ์ ๋ pd.read_csv()
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์์นํ url์ ๊ธฐ์ฌํ์ฌ ํ์ผ์ ์ฝ์ด์ต์๋ค.
๋ฐ์ดํฐ ๋ก๋
import pandas as pd
url = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/drinks.csv'
drink_df = pd.read_csv(url, ',')
drink_df
์ ํ์
์ ํ์ธํด๋ด
์๋ค.
# ํ์
ํ์ธ
type(drink_df)
๋ฐ์ดํฐํ๋ ์์ด๋ผ๊ณ ์ถ๋ ฅ๋ฉ๋๋ค. drink_df
๋ฅผ ์ถ๋ ฅํด๋ด
์๋ค.
drink_df
๋ฐ์ดํฐํ๋ ์์ ์ถ๋ ฅ
head()
๋ ์์ 5๊ฐ์ ํ์ ์ถ๋ ฅํฉ๋๋ค.
# ์์ 5๊ฐ์ ํ์ ์ถ๋ ฅ
drink_df.head()
head(์ซ์)
๋ ์์ ์
๋ ฅํ ์ซ์๋งํผ์ ํ์ ์ถ๋ ฅํฉ๋๋ค.
# ์์ 10๊ฐ์ ํ์ ์ถ๋ ฅ
drink_df.head(10)
tail()
์ ํ์ 5๊ฐ์ ํ์ ์ถ๋ ฅํฉ๋๋ค.
# ํ์ 5๊ฐ์ ํ์ ์ถ๋ ฅ
drink_df.tail()
sample(์ซ์)
๋ ๋๋ค์ผ๋ก ์ ํ๋ 10๊ฐ์ ํ์ ์ถ๋ ฅํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋์ผ๋ก ํ์
ํ ๋ ์ฐ์์ ์ผ๋ก ์คํํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ํ์
ํ๊ธฐ์ ์ข์ต๋๋ค.
# ๋๋ค์ผ๋ก ์ ํ๋ 10๊ฐ์ ํ์ ์ถ๋ ฅ
drink_df.sample(10)
๋ฐ์ดํฐํ๋ ์์ ์ธ๋ฑ์ค
index
๋ ๋ฐ์ดํฐํ๋ ์์ ์ธ๋ฑ์ค๋ฅผ ํ์ธํฉ๋๋ค.
# ์ธ๋ฑ์ค์ ๋ฒ์ ํ์ธ
drink_df.index
#
# RangeIndex(start=0, stop=193, step=1)
ํ์ฌ ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํด์ +1์ฉ(step
) ์ฆ๊ฐํ์ฌ 192๊น์ง ์์ต๋๋ค. ์ฐธ๊ณ ๋ก 193์์ stopํ๋ค๋ ๊ฒ์ 193์ ํฌํจํ์ง ์๋๋ค๋ ์๋ฏธ์
๋๋ค. ์ฆ, 0๋ฒ๋ถํฐ 192๋ฒ๊น์ง์ ์ํ์ด ์๋ ์
์ด๋ฏ๋ก ์ด ์ํ์ ์๋ 193๊ฐ์
๋๋ค.
๋ฐ์ดํฐํ๋ ์์ ๋ฐ์ดํฐํ์
dtypes
๋ ๊ฐ ๋ฐ์ดํฐํ๋ ์์ ์ด์ ํ์
์ ํ์ธํ ์ ์์ต๋๋ค.
# ๊ฐ ์ปฌ๋ผ์ ํ์
์ถ๋ ฅ
drink_df.dtypes
#
# country object
# beer_servings int64
# spirit_servings int64
# wine_servings int64
# total_litres_of_pure_alcohol float64
# continent object
# dtype: object
์ฐธ๊ณ ๋ก ๋ฐ์ดํฐํ๋ ์์ ํ์
์์ object
๋ผ๊ณ ํํ๋๋ ๋ถ๋ถ์ ํด๋น ํ์
์ด ๋ฌธ์์ด์ด๋ผ๋ ์๋ฏธ์
๋๋ค. int64
๋ ์ ์ํ ๋ฐ์ดํฐ, float64
๋ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
๋ค์ ๋งํด ์์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ํด์ํด๋ณด๋ฉด, country, continent ์ด์ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋์ด์ ธ ์๊ณ , beer_servings
, spirit_servings
, wine_servings
์ด์ ์ ์ํ ๋ฐ์ดํฐ, total_litres_of_prue_alcohol
์ด์ ์ค์ํ ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋์ด์ ธ ์๋ค๋ ์๋ฏธ์
๋๋ค. ์ด๋ฅผ ํตํด์ ๊ฐ ์ด์ ๋ฐ์ดํฐ ์๋ฃํ์ด ๋ฌด์์ธ์ง๋ฅผ ํ์
ํ ์ ์์ต๋๋ค. shape
๋ ๋ฐ์ดํฐํ๋ ์์ ํ๊ณผ ์ด์ ์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐํ๋ ์์ ํฌ๊ธฐ
# ๋ฐ์ดํฐํ๋ ์์ ํ๊ณผ ์ด์ ๊ฐ์ ์ถ๋ ฅ
drink_df.shape
์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ํด๋น ๋ฐ์ดํฐํ๋ ์์ด 193๊ฐ์ ํ, 6๊ฐ์ ์ด์ ๊ฐ์ง๊ณ ์์์ ์๋ ค์ค๋๋ค.
๋ฐ์ดํฐํ๋ ์์ ํ๋ ฌ ๋ณํ
values
๋ ๋ฐ์ดํฐํ๋ ์ ํํ๋ฅผ Numpy ํ๋ ฌ ํํ๋ก ๋ณํํ์ฌ ์ถ๋ ฅํฉ๋๋ค.
# Numpy ํ์
์ผ๋ก ์ถ๋ ฅ
drink_df.values
#
# array([['Afghanistan', 0, 0, 0, 0.0, 'AS'],
# ['Albania', 89, 132, 54, 4.9, 'EU'],
# ['Algeria', 25, 0, 14, 0.7, 'AF'],
# ...,
# ['Yemen', 6, 0, 0, 0.1, 'AS'],
# ['Zambia', 32, 19, 4, 2.5, 'AF'],
# ['Zimbabwe', 64, 18, 4, 4.7, 'AF']], dtype=object)
type(drink_df.values)
#
# numpy.ndarray
Numpy์ ๋ํด์๋ ์ด ์์ ์์ ๋ค๋ฃจ์ง๋ ์์์ง๋ง ์ ๋ง~ ๊ฐ๋จํ ์์ฝํ์๋ฉด ๊ฐ๊ฐ์ ํ์ ์๋์ ๊ฐ์ด ๋ฐ์ดํฐํ๋ ์์ ํ ํํ์์ ์๋์ ๊ฐ์ ํํ๋ก ๋ณํ๋๋ค๊ณ ๋ณด๋ฉด ๋๊ฒ ์ต๋๋ค.
['Afghanistan', 0, 0, 0, 0.0, 'AS']
๋ณํํ ๋ฐ์ดํฐ์ ์ฒซ๋ฒ์งธ ํ์ ์ถ๋ ฅํด๋ณผ๊น์? ์ด๋ ๋ณํ ํ 0๋ฒ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ๋ฉด ๋ฉ๋๋ค.
drink_df.values[0]
#
# array(['Afghanistan', 0, 0, 0, 0.0, 'AS'], dtype=object)
์์ ๊ฐ์ ํํ๋ก ๋ณํ์ด ๋์๋ค๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด for
๋ฌธ ์ ๊ทผ๋ ๊ฐ๋ฅํ๋ค๋ ์๋ฏธ์
๋๋ค.
for element in drink_df.values[0]:
print(element)
#
# Afghanistan
# 0
# 0
# 0
# 0.0
# AS
๋ฐ์ดํฐํ๋ ์์ info
info()
๋ ๋ฐ์ดํฐํ๋ ์์ ์ ๋ฐ์ ์ธ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋๋ค. info()
์ฌ์ฉํ๊ณ , info()
๋ฅผ ํตํด ์ ์ ์๋ ์ ๋ณด๋ค์ ์ต๋ํ ์ ๋ฆฌํด๋ด
์๋ค.
drink_df.info()
#
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 193 entries, 0 to 192
# Data columns (total 6 columns):
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 country 193 non-null object
# 1 beer_servings 193 non-null int64
# 2 spirit_servings 193 non-null int64
# 3 wine_servings 193 non-null int64
# 4 total_litres_of_pure_alcohol 193 non-null float64
# 5 continent 170 non-null object
# dtypes: float64(1), int64(3), object(2)
# memory usage: 9.2+ KB
info()
๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ์ ์ ์์ต๋๋ค.
ํด๋น ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ ์ด๋ค์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ฐ์ดํฐ ๋ถ์ ์ฉ์ด๋ก๋ ๋ฐ์ดํฐ๋ฅผ ํ์
ํ๊ธฐ ์ํ ์ด๋ฌํ ์ด์ ํน์ฑ(feature
) ์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ์ด 6๊ฐ์ ํน์ฑ์ด ์๋ ์
์
๋๋ค.
country
: ๊ตญ๊ฐbeer_servings
: ๋งฅ์ฃผ ์๋น๋spiti_servings
: spirit ์๋น๋wine_servings
: wine ์๋น๋total_litres_of_pure_alcohol
: ์ด ์์ฝ์ฌ ์๋น๋continent
: ๋๋ฅ ์ ๋ณด
info()
์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ก๋ถํฐ ์ด 193๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ฉฐ, contry
, continet
๋ฐ์ดํฐ์ ๊ฒฝ์ฐ์๋ object
. ๋ฐ์ดํฐํ๋ ์์์ object
๋ ๋ฌธ์์ด์ ์๋ฏธํฉ๋๋ค. ๊ทธ ์ธ์๋ ์ ์ํ ๋ฐ์ดํฐ(int64
) ๋๋ ์ค์ํ ๋ฐ์ดํฐ(float64
)๋ก ๊ตฌ์ฑ๋์ด์ ธ ์์์ ์ ์ ์์ต๋๋ค.
๋ ํ๋ ์ฃผ๋ชฉํ ์ ์ ๋ฐ์ดํฐ์ ์ด ๊ฐ์๋ 193๊ฐ์ธ๋ฐ, Non-Null
Count๋ฅผ ๋ณด๋ฉด continent
์ ๊ฒฝ์ฐ์๋ง 170๊ฐ๊ฐ ์์ต๋๋ค.
์ด๋ Null
๋ฐ์ดํฐ. ๋ค์ ๋งํด ๊ฒฐ์ธก ๋ฐ์ดํฐ๊ฐ 23๊ฐ ์กด์ฌํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋ฐ์ดํฐํ๋ ์์ ๊ฒฐ์ธก๊ฐ(Null)
๊ฒฐ์ธก๊ฐ์ด๋ ์ ์์ ์ผ๋ก ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์ ๊ฐ์ ์๋ฏธํฉ๋๋ค. Null
๊ฐ์ด๋ผ๊ณ ๋ ํํํฉ๋๋ค. isnull().sum()
์ ํด๋น ๋ฐ์ดํฐํ๋ ์์ ๊ฐ ์ด์์ Null
๋ฐ์ดํฐ๊ฐ ์ด ๋ช ๊ฐ์ธ์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
print(drink_df.isnull().sum())
#
# country 0
# beer_servings 0
# spirit_servings 0
# wine_servings 0
# total_litres_of_pure_alcohol 0
# continent 23
# dtype: int64
continent
๋ผ๋ ์ด์์ ์ด 23๊ฐ์ Null`(๊ฒฐ์ธก) ๋ฐ์ดํฐ๊ฐ ์์์ ํ์ธํ ์ ์์ต๋๋ค.
02. ๋ฐ์ดํฐํ๋ ์์ ์ด ์ ๊ทผ
์์ ์ฌ์ฉํ๋ ๋์ผํ ๋ฐ์ดํฐํ๋ ์์ธ drink_df๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐ์ดํฐ ๋ก๋
import pandas as pd
url = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/drinks.csv'
drink_df = pd.read_csv(url, ',')
drink_df
๋ฐ์ดํฐํ๋ ์์ ์ด ์ ๊ทผ
๋ฐ์ดํฐํ๋ ์์ ํน์ ์ด์ ์ ๊ทผํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์
๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ.์ด์ ์ด๋ฆ
๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋ ๊ฒ์ ๋๋ค. ๋ค์ ๋งํด, ๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ์ ์ ๊ณ , ์จ์ ์ ์ฐ์ ํ์ ์ด์ ์ด๋ฆ์ ์ ์ผ๋ฉด ํด๋น ์ด๋ง์ ๋ถ๋ฌ์ต๋๋ค.
drink_df.beer_servings
#
# 0 0
# 1 89
# 2 25
# 3 245
# 4 217
# ...
# 188 333
# 189 111
# 190 6
# 191 32
# 192 64
# Name: beer_servings, Length: 193, dtype: int64
๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ['ํด๋น ์ด์ ์ด๋ฆ']
๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์
๋๋ค. ์ด๋ ์์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
# ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ
drink_df['beer_servings']
#
# 0 0
# 1 89
# 2 25
# 3 245
# 4 217
# ...
# 188 333
# 189 111
# 190 6
# 191 32
# 192 64
# Name: beer_servings, Length: 193, dtype: int64
2์ฐจ์ ํ ์ด๋ธ ํํ๋ฅผ ๋ฐ์ดํฐํ๋ ์์ด๋ผ๊ณ ๋ถ๋ฅด์ง๋ง, ์ด๋ ๊ฒ ํน์ ํ๋์ ์ด๋ง์ ๋ถ๋ฌ์ฌ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐํ๋ ์์ด ์๋๋ผ ๋ฐ์ดํฐ ํ์ ์ด ํ๋ค์ค(Pandas)์์ ์ ๊ณตํ๋ ๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์ ์ธ '์๋ฆฌ์ฆ(Series)'๊ฐ ๋ฉ๋๋ค. ์ค์ ๋ก ํน์ ์ด๋ง ๋ถ๋ฌ์ค๊ณ ํ์ ์ ํ์ธํด๋ณผ๊น์?
# ์ปฌ๋ผ์ ํ์
ํ์ธ
type(drink_df.beer_servings)
#
# pandas.core.series.Series
๋ง์ฝ ํ๋์ ์ด์ด ์๋๋ผ ์ ํ์ ์ผ๋ก ๋ค์์ ์ด์ ์ ๊ทผ๋ ค๋ฉด ์ด๋ป๊ฒ ํ๋ฉด ๋ ๊น์?
๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ[['ํน์ ์ด์ ์ด๋ฆ1', 'ํน์ ์ด์ ์ด๋ฆ2']]
์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋ฉด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด์ beer_servings
๊ณผ wine_servings
2๊ฐ์ ์ด๋ง์ ๋ถ๋ฌ์ค๊ณ ์ถ๋ค๊ณ ํด๋ด
์๋ค.
drink_df[['beer_servings','wine_servings']]
๋ ๊ฐ์ ์ด๋ง์ด ๋ฝํ ๋ฐ์ดํฐํ๋ ์์ด ์ถ๋ ฅ๋ฉ๋๋ค.
['ํน์ ์ด์ ์ด๋ฆ1', 'ํน์ ์ด์ ์ด๋ฆ2']
์ ํ์ด์ฌ ๋ฆฌ์คํธ ํํ์
๋๋ค.
๋ค์ ๋งํด ํ์ด์ฌ ๋ฆฌ์คํธ์ ํํ๋ก ์ด์ ์ด๋ฆ์ ๋์ดํ ๋ค์
๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ[์ด์ ์ด๋ฆ์ด ๋์ด๋ ํ์ด์ฌ ๋ฆฌ์คํธ]
๋ฅผ ์ฌ์ฉํด๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
cols = ['beer_servings','wine_servings']
drink_df[cols]
03. ํน์ฑ์ ์์น ์ ๋ณด ํ์ ํ๊ธฐ
์์ ์ฌ์ฉํ๋ ๋์ผํ ๋ฐ์ดํฐํ๋ ์์ธ drink_df๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐ์ดํฐ ๋ก๋
import pandas as pd
url = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/drinks.csv'
drink_df = pd.read_csv(url, ',')
drink_df
ํน์ฑ(features)
์์ ๋ฐ์ดํฐํ๋ ์์ info()
๋ฅผ ์ค๋ช
ํ ์ ์ด ์์ต๋๋ค. info()
๋ ๋ฐ์ดํฐํ๋ ์์ ์ ๋ฐ์ ์ธ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋๋ค.
drink_df.info()
#
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 193 entries, 0 to 192
# Data columns (total 6 columns):
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 country 193 non-null object
# 1 beer_servings 193 non-null int64
# 2 spirit_servings 193 non-null int64
# 3 wine_servings 193 non-null int64
# 4 total_litres_of_pure_alcohol 193 non-null float64
# 5 continent 170 non-null object
# dtypes: float64(1), int64(3), object(2)
# memory usage: 9.2+ KB
info()
๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ์ ์ ์์ต๋๋ค.
ํด๋น ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ ์ด๋ค์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ฐ์ดํฐ ๋ถ์ ์ฉ์ด๋ก๋ ๋ฐ์ดํฐ๋ฅผ ํ์ ํ๊ธฐ ์ํ ์ด๋ฌํ ์ด์ ํน์ฑ(feature) ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ด 6๊ฐ์ ํน์ฑ์ด ์๋ ์ ์ ๋๋ค.
ํน์ฑ์ ์์น ์ ๋ณด ํ์ ํ๊ธฐ
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฐ์ดํฐํ๋ ์์ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ํ์ ํด๊ฐ๋ ๊ณผ์ ์ ์์ํด๋ณผํ ๋ฐ์. ์ซ์์ ๊ฐ์ ์์น ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ณ ์๋ค๋ฉด, ํด๋น ๋ฐ์ดํฐ์ ์ต์๊ฐ, ์ต๋๊ฐ, ํ๊ท ๊ฐ ๋ฑ์ ํ์ ํ๋ ๊ฒ์ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ฅ ์ฒซ ๊ฑธ์์ ๋๋ค.
๋ฐ์ดํฐ๊ฐ ๋ฐ์ดํฐํ๋ ์ ํํ๋ก ์ ์ฅ๋ ์ํฉ์์ ์ด๋ฅผ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ํ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์
describe()
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
drink_df.describe()
describe()
๋ ๋ฐ์ดํฐํ๋ ์์ ์ด ๋ฐ์ดํฐ์ ์(count), ํ๊ท (mean), ํ์คํธ์ฐจ(std), ๋ถ์์(25%, 50%, 75%)๋ฅผ ํ์
ํ์ฌ ์ถ๋ ฅํฉ๋๋ค. ํ์ง๋ง ์ด๋ ์ซ์. ์ฆ, ์์น ์ ๋ณด์ ๊ตญํ๋์ด์ ๊ณ์ฐํ๋ฏ๋ก ๋ฌธ์์ด ํ์
์ ๋ฐ์ดํฐ์๋ country ์ด๊ณผ continent ์ด์ ์ ์ธ๋์์ต๋๋ค. ํน์ ์ด์ ๋ํด์๋ง ์ถ๋ ฅํด๋ณผ ์๋ ์์ต๋๋ค.
drink_df.beer_servings.describe()
#
# count 193.000000
# mean 106.160622
# std 101.143103
# min 0.000000
# 25% 20.000000
# 50% 76.000000
# 75% 188.000000
# max 376.000000
# Name: beer_servings, dtype: float64
ํน์ ์ด์ ์ต๋๊ฐ, ์ต์๊ฐ, ํ๊ท ๊ฐ, ํฉ๊ณ, ์นด์ดํธ๋ ๊ณ์ฐ๊ฐ๋ฅํฉ๋๋ค.
drink_df.beer_servings.mean()
#
# 106.16062176165804
drink_df.beer_servings.max()
#
# 376
drink_df.beer_servings.min()
#
# 0
drink_df.beer_servings.sum()
#
# 20489
drink_df.beer_servings.count()
#
# 193
์ด๋ ๊ฒ ๋ฐ๋ก ๊ณ์ฐํ ์์น๋ฅผ ๋ฝ์ ์ ์๋ค๋ฉด, ์ด ์์น๋ฅผ ๊ฐ์ง๊ณ ๊ณ์ฐ๋ ๊ฐ๋ฅํ๊ฒ ์ฃ ? mean()
์ผ๋ก ํ๊ท ์ ๋ฐ๋ก ๊ตฌํ ์ ์๊ธด ํ์ง๋ง, sum()
๊ณผ count()
๋ฅผ ์ด์ฉํ์ฌ ํ๊ท ์ ๊ณ์ฐํด๋ด
์๋ค.
float(drink_df.beer_servings.sum())/drink_df.beer_servings.count()
#
# 106.16062176165804
04. ์กฐ๊ฑด๋ถ ๋ก์ง
์์ ์ฌ์ฉํ๋ ๋์ผํ ๋ฐ์ดํฐํ๋ ์์ธ drink_df
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐ์ดํฐ ๋ก๋
import pandas as pd
url = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/drinks.csv'
drink_df = pd.read_csv(url, ',')
drink_df
์กฐ๊ฑด๋ถ ๋ก์ง
๋ฐ์ดํฐํ๋ ์์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์กฐ๊ฑด์ ๊ฑธ์ด์ ํด๋น ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๊ฐ๋ค๋ง์ ๋ฝ์์ค๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ์ฐ์ ํน์ ์ด์ ๋ํด์ ์กฐ๊ฑด์ ๊ฑธ์์ ๋ ์ด๋ค ๊ฐ์ ๋ฐํํ๋์ง๋ฅผ ๋ด ์๋ค.
๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ.ํน์ ์ด์ ์ด๋ฆ == 'ํน์ ๊ฐ'
์ด๋ผ๋ ์ฝ๋๋ ๊ฐ ํ์์ ํด๋น ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง๋ฅผ ํ๋จํ์ฌ ๋ง์กฑํ๋ค๋ฉด True
, ์๋๋ผ๋ฉด False
์ ๊ฐ์ ๊ฐ์ง๋ ์๋ฆฌ์ฆ(Series)๋ฅผ ๋ฆฌํดํฉ๋๋ค.
drink_df.continent=='EU'
#
# 0 False
# 1 True
# 2 False# 3 True
# 4 False
# ...
# 188 False
# 189 False
# 190 False
# 191 False
# 192 False
# Name: continent, Length: 193, dtype: bool
ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ ๋ฐ ์กฐ๊ฑด์ ๊ฑธ์์ ๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฑด True
์ False
๋ก ๊ตฌ์ฑ๋ ์๋ฆฌ์ฆ(Series)๊ฐ ์๋๋ผ continent์ ๊ฐ์ด 'EU'์ผ ๋์ ๋ฐ์ดํฐํ๋ ์ ๊ฐ์ ๋ฝ์๋ด๋ ๊ฒ์ผํ
๋ฐ์.
์ด ๊ฒฝ์ฐ์๋ ์ ๋ ๊ฒ True
์ False
๋ก ๊ตฌ์ฑ๋ Series๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํด์ฃผ๋ฉด ๋ฉ๋๋ค.
๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ[True์ False๋ก ๊ตฌ์ฑ๋ ์๋ฆฌ์ฆ]
์ผ๋จ drink_df.continent=='EU'
์ ํ์
์ด ์๋ฆฌ์ฆ์์ ํ์ธํฉ๋๋ค.
type(drink_df.continent=='EU')
#
# pandas.core.series.Series
์ด๋ฅผ ๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ[ ]
์ ๋๊ดํธ ์์ ๋ฃ์ด๋ด
์๋ค. head(20)
์ ์ด์ฉํ์ฌ ์์ 20๊ฐ๋ง ์ถ๋ ฅํฉ๋๋ค.
drink_df[drink_df.continent=='EU'].head(20)
๊ทธ๋ ๋ค๋ฉด ๋ง์ฝ beer_servings
์ ๊ฐ์ด 158๋ณด๋ค ํฐ ๊ฒฝ์ฐ๋ง์ ํํฐ๋งํ๊ณ ์ถ๋ค๋ฉด ์ด๋จ๊น์?
์์ ๋ฐ์ดํฐํ๋ ์์ ์ด์ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฐ์ง๋ฅผ ์๊ฐํ์ต๋๋ค.
๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ.์ด์ ์ด๋ฆ
๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ['์ด์ ์ด๋ฆ']
๋ค์ ๋งํด beer_servings
์ ๊ฐ์ด 158๋ณด๋ค ํฐ ๊ฒฝ์ฐ๋ก ํํฐ๋งํ๋ ์ฝ๋๋ ์๋์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
drink_df[drink_df.beer_servings > 158]
drink_df[drink_df['beer_servings'] > 158]
# ์๋ ๋ ๊ฐ์ง๋ ๋์ผํจ
# drink_df[drink_df.beer_servings > 158]
# drink_df[drink_df['beer_servings'] > 158]
drink_df[drink_df['beer_servings'] > 158].head(20)
๊ทธ๋ ๋ค๋ฉด ์กฐ๊ฑด์ ๊ฑธ๋, ํน์ ์ด ๋ช ๊ฐ๋ง ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด ์ด๋จ๊น์?
์์ ํน์ ์ด๋ค๋ง์ ๋ฝ์์ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ด ์๊ฐํ์์ต๋๋ค.
๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ[['ํน์ ์ด์ ์ด๋ฆ1, 'ํน์ ์ด์ ์ด๋ฆ2']]
์ด๋ฅผ ์์ฉํ์ฌ beer_servings
์ ๊ฐ์ด 10 ์ดํ์ด๋ฉด์ country
, beer_servings
์ ๋ ๊ฐ์ ์ด๋ง์ ๋ฝ์๋ด๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
drink_df[drink_df.beer_servings <= 10][['country','beer_servings']]
์ฐ์ , drink_df[drink_df.beer_servings <= 10]
๋ก ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐํ๋ ์์ ๋ฝ์๋ธ ๋ค์ ์ด ๋ฐ์ดํฐํ๋ ์์ [['country','beer_servings']]
๋ฅผ ๋ถ์ฌ์ 2๊ฐ์ ์ด๋ง์ ๋ฝ์๋ด๋ ๊ฒ์ด์ฃ .
# drink_df[drinks.beer_servings <= 10]๋ ๋ฐ์ดํฐํ๋ ์์ด๋ค.
drink_df[drink_df.beer_servings <= 10][['country','beer_servings']].head(20)
์ด๋ฒ์๋ ์กฐ๊ฑด์ผ๋ก ํํฐ๋งํ์ฌ ์๋ฆฌ์ฆ(Series)๋ฅผ ์ป์ด๋ธ ๋ค์ ํ๊ท (mean)์ ์ป์ด๋ณด๊ฒ ์ต๋๋ค.
drink_df[drink_df.continent=='EU'].beer_servings.mean()
#
# 193.77777777777777
์ ์ฝ๋๋ continent์ ๊ฐ์ด 'EU'์ธ ๊ฒฝ์ฐ๋ก ๋ฐ์ดํฐํ๋ ์์ ๋ฝ์๋ด์ง๋ง, ๊ทธ ์ค beer_serving
s๋ผ๋ ํ๋์ ์ด๋ง์ ๋ฝ์๋ด๋ฏ๋ก (์์ ์ด์ ํ๋๋ง ๋ฝ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐํ๋ ์์ด ์๋๋ผ ์๋ฆฌ์ฆ๊ฐ ๋๋ค๊ณ ์ธ๊ธํ ๋ฐ ์์ต๋๋ค.) ์๋ฆฌ์ฆ๋ก ๋ณํ๋๋ฉฐ, ์๋ฆฌ์ฆ์ ๋ํด์ mean()
์ ์ฌ์ฉํ์ฌ ํ๊ท ๊ฐ์ ๋ฝ์๋ด๊ฒ ๋ฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก continent์ ๊ฐ์ด EU์ธ beer_servings
์ด์ ํ๊ท ๊ฐ(mean)์ ๊ตฌํ๊ฒ ๋๋ ๊ฒ์ด์ฃ .
์ด๋ฒ์๋ beer_servings
์ด์ ํ๊ท ๊ฐ์ ์กฐ๊ฑด์ ๋ฃ์ด๋ณด๊ฒ ์ต๋๋ค.
drink_df[drink_df.beer_servings > drink_df.beer_servings.mean()]
ํด๋น ์ด์ null
๊ฐ(๊ฒฐ์ธก๊ฐ)์ด ์กด์ฌํ๋์ง ์ ๋ฌด์ ๋ํ True์ False์ ์๋ฆฌ์ฆ(Series)๋ก ์ป์ด๋ด๋ ๋ฐฉ๋ฒ์ ํด๋น ์ด์ isnull()
์ ํ๋ฉด ์ ์ ์์ต๋๋ค. isnull()
์ ํด๋น ํ์ Null ๊ฐ์ด ๋ค์ด์๋ ๊ฒฝ์ฐ๋ง True
๋ฅผ ๋ฆฌํดํ๊ณ , ์๋๋ผ๋ฉด False
๋ฅผ ๋ฆฌํดํฉ๋๋ค.
drink_df.continent.isnull()
#
# 0 False
# 1 False
# 2 False
# 3 False
# 4 False
# ...
# 188 False
# 189 False
# 190 False
# 191 False
# 192 False
# Name: continent, Length: 193, dtype: bool
#
drink_df.continent.isnull().sum()
#
# 23
์ด๋ฅผ ์ด์ฉํ๋ฉด ๋ฐ์ดํฐํ๋ ์์์ ํน์ ์ด์ Null ๊ฐ์ด ์์นํ ๊ฒฝ์ฐ๋ง ๋ฝ์ ์ ์์ต๋๋ค.
drink_df[drink_df.continent.isnull()]
len(drink_df[drink_df.continent.isnull()])
#
# 23
continent
์ ๊ฐ์ NaN
๊ฐ(๊ฒฐ์ธก๊ฐ์ ์๋ฏธ)์ธ ๊ฒฝ์ฐ๋ง ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์ฆ, ์ด ๋ฐ์ดํฐ๋ค์ ๋ค๋ฅธ ์ด์๋ ๊ฐ์ด ๋ค ์กด์ฌํ์ง๋ง continent
์ ์ด์๋ ์ค์ง์ ์ผ๋ก ๊ฐ์ด ์กด์ฌํ์ง ์๋๋ค๊ณ ํด์ํ ์ ์์ต๋๋ค.
05. AND
, OR
, NOT
์ฐ์ฐ์ ์ฌ์ฉํ๊ธฐ
์์ ์ฌ์ฉํ๋ ๋์ผํ ๋ฐ์ดํฐํ๋ ์์ธ drink_df
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐ์ดํฐ ๋ก๋
import pandas as pd
url = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/drinks.csv'
drink_df = pd.read_csv(url, ',')
drink_df
AND
, OR
, NOT
์ฐ์ฐ์ ์ฌ์ฉํ๊ธฐ
AND
๋ OR
๋๋ NOT
๊ณผ ๊ฐ์ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ ์กฐ๊ฑด์ ๋์์ ์ฌ์ฉํ๊ฑฐ๋, ์กฐ๊ฑด๋ฌธ ์์ฒด๋ฅผ ๋ฐ๋๋ก ํด์ํ๋๋ก ํ ์๋ ์์ต๋๋ค.
๋ฐ์ดํฐํ๋ ์์์๋ AND, OR, NOT์ ๊ฐ๊ฐ &
, |
, ~
๋ก ํํํฉ๋๋ค.
&
: AND|
: OR~
: NOT
๋ค์ ๋งํด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
A์กฐ๊ฑด & B์กฐ๊ฑด
: A์กฐ๊ฑด๊ณผ B์กฐ๊ฑด ๋ชจ๋ ๋ง์กฑํ๋ ๊ฒฝ์ฐA์กฐ๊ฑด | B์กฐ๊ฑด
: A์กฐ๊ฑด ๋๋ B์กฐ๊ฑด ๋ ์ค ํ๋๋ฅผ ๋ง์กฑํ๋ ๊ฒฝ์ฐ~A์กฐ๊ฑด
: A์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ์ ๋ฐ๋. ์ฆ, A์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ๊ฒฝ์ฐ.
๋ฌผ๋ก ์ค์ ๋ก๋ ์กฐ๊ฑด์ด 2๊ฐ ์ด์์ผ ์๋ ์๊ณ , ์ด๋ค์ ์์ด์ ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ฏ๋ก ์ ์ผ์ด์ค๋ณด๋ค ๋ค์ํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์์ ์ธ ๊ฐ์ง ๊ฒฝ์ฐ์ ๋ํด์๋ง ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
์ฐ์ NOT์ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ฅผ ๋ด ์๋ค.
drink_df[~(drink_df.continent=='EU')]
์ ์ฝ๋๋ continent์ ๊ฐ์ด 'EU'๊ฐ ์๋ ๊ฒฝ์ฐ๋ง์ ํํฐ๋งํ๋ ์ฝ๋์ ๋๋ค.
์ด๋ฒ์๋ ๋ ๊ฐ์ ์กฐ๊ฑด ๋ชจ๋๊ฐ ์ฐธ์ธ ๊ฒฝ์ฐ๋ง์ ํํฐ๋งํ๋ AND๋ฅผ ์ฌ์ฉํด๋ด ์๋ค.
drink_df[(drink_df.continent=='EU') & (drink_df.wine_servings > 300)]
์ ์ฝ๋๋ continent
์ ๊ฐ์ด 'EU'์ด๋ฉด์ wine_servings
์ ๊ฐ์ด 300๋ณด๋ค ํฐ ๊ฒฝ์ฐ๋ง์ ํํฐ๋งํฉ๋๋ค. ๋ ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ์ 193๊ฐ์ ํ ์ค ๋จ 3๊ฐ๋ฟ์
๋๋ค.
ํ์ง๋ง ๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๋ ๊ฒ์ด ์๋๋ผ ๋จ, ํ ๊ฐ๋ง ๋ง์กฑํ๋๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์ผ๋ ค๊ณ ํ๋ค๋ฉด AND
๋ฅผ ๋จ์ง OR
๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ ๊ฐ์ ์กฐ๊ฑด์ ๊ฐ์ง๋ง AND
๋ฅผ ๋จ์ํ OR
๋ก ๋ฐ๊พผ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ๊ฐ ๋ช ๊ฐ๋ ๋ฝํ๋์ง ํ์ธํด๋ด
์๋ค.
len(์
๋ ฅ)
์ ์ฌ์ฉํ๋ฉด ์ ๋ ฅ์ ๊ธธ์ด๋ฅผ ๊ณ์ฐํ์ฌ ์๋ ค์ค๋๋ค. ๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ์ ์ ๋ ฅ์ผ๋ก ํ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐํ๋ ์์ ํ์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
# OR ์กฐ๊ฑด
len(drink_df[(drink_df.continent=='EU') | (drink_df.wine_servings > 300)])
#
# 45
AND
์กฐ๊ฑด์ ์ฌ์ฉํ์์ ๊ฒฝ์ฐ์๋ ํ์ด 3๊ฐ๋ฐ์ ์์์ง๋ง, ์ด๋ฒ์๋ 45๊ฐ๋ก ํจ์ฌ ๋ง์ต๋๋ค.
06. ๋ก์ง๊ณผ ์์น ์ ๋ณด์ ๊ฒฐํฉ & ์ ๋ ฌ
์์ ์ฌ์ฉํ๋ ๋์ผํ ๋ฐ์ดํฐํ๋ ์์ธ drink_df
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐ์ดํฐ ๋ก๋
import pandas as pd
url = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/drinks.csv'
drink_df = pd.read_csv(url, ',')
drink_df
๋ก์ง๊ณผ ์์น ์ ๋ณด์ ๊ฒฐํฉ
drink_df
์์ total_litres_of_pure_alchohol
์ ๊ฐ์ด ์ต๋๊ฐ์ธ ๊ฒฝ์ฐ์ country
์ด์ ์ถ๋ ฅํ๋ค๋ฉด?
- ํน์ ์ด์ ์ต๋๊ฐ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ด ๋ฌด์์ด์๋์ง ์๊ฐํด๋ด ์๋ค.
- ํน์ ์ด๋ง์ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ์ด ๋ฌด์์ด์๋์ง ์๊ฐํด๋ด ์๋ค.
# ์ด๋ค ๋๋ผ๊ฐ total litres of pure alcohol์ ๊ฐ์ด ๊ฐ์ฅ ํด๊น์?
drink_df[drink_df.total_litres_of_pure_alcohol == drink_df.total_litres_of_pure_alcohol.max()]['country']
#
# 15 Belarus
# Name: country, dtype: object
์ฐ์ drink_df.total_litres_of_pure_alcohol.max()
๋ฅผ ํตํด์ total_litres_of_pure_alcohol
์ด์ ์ต๋๊ฐ์ ๊ตฌํ๊ณ , ์ด๋ฅผ ๋ก์ง์ ์ ์ฉํ์ฌ ์ถ๋ ฅํ ์ ์์ต๋๋ค.
์ด๋ฒ์๋ drink_df
์์ wine_servings
์ ๊ฐ์ด 300๋ณด๋ค ํฌ๊ฑฐ๋, beer_servings
์ ๊ฐ์ด 300๋ณด๋ค ํฌ๊ฑฐ๋, spirit_servings
์ ๊ฐ์ด 300๋ณด๋ค ํฐ ๊ฒฝ์ฐ์ country
์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์นด์ดํธํ์์ ๋์ ์ซ์๋ฅผ ์ถ๋ ฅํด๋ด
์๋ค. ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ ๊ณ ๋ คํด์ผํ ๊ฒ์ ์ด ๋ ๊ฐ์ง์
๋๋ค.
- ๋ค์์ ์กฐ๊ฑด์ '๋๋'์ผ๋ก ํ ๋ฒ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋ฌด์์ด์๋์ง ์๊ฐํด๋ด ์๋ค.
- ์ซ์๋ฅผ '์นด์ดํธ' ํ๋ ๋ฐฉ๋ฒ์ด ๋ฌด์์ด์๋์ง ์๊ฐํด๋ด ์๋ค.
# ์ด๋ฒ์๋ drink_df์์ wine_servings์ ๊ฐ์ด 300๋ณด๋ค ํฌ๊ฑฐ๋,
# beer_servings์ ๊ฐ์ด 300๋ณด๋ค ํฌ๊ฑฐ๋,
# spirit_servings์ ๊ฐ์ด 300๋ณด๋ค ํฐ ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ ์นด์ดํธํ์์ ๋์ ์ซ์๋ฅผ ์ถ๋ ฅํด๋ด
์๋ค.
drink_df[(drink_df.wine_servings > 300) | (drink_df.beer_servings > 300) | (drink_df.spirit_servings > 300)].country.count()
#
# 18
์ ๋ ฌ
๋ฐ์ดํฐ๋ฅผ ํน์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด์ ๋ณผ ์๋ ์์ต๋๋ค.
์ ๋ ฌํด์ ๋ณด๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ.sort_values('์ ๋ ฌ ๊ธฐ์ค์ด ๋๋ ์ด์ ์ด๋ฆ')
drink_df.sort_values('beer_servings') # ํน์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
beer_servings
์ ์ด์ ๋ณด๋ฉด ์ค๋ฆ์ฐจ์์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ง๋ง, ๋ง์ฝ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ ์ถ๋ค๋ฉด ๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ.sort_values('์ ๋ ฌ ๊ธฐ์ค์ด ๋๋ ์ด์ ์ด๋ฆ', ascending=False)
sort_values
์ ์ธ์๋ก ascending=False
๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด ๋ฉ๋๋ค.
# ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
drink_df.sort_values('beer_servings', ascending=False)
์ ๋ ฌ์ ๊ธฐ์ค์ ํ๋์ ์ด์ด ์๋๋ผ ๋ค์์ ์ด์ผ ์ ์์ต๋๋ค. ์ด์ ์ด๋ฆ๋ค์ ์์๋กํ๋ ๋ฆฌ์คํธ๋ฅผ sort_values
์ ์
๋ ฅ์ผ๋ก ์ฌ์ฉํ๋ฉด ํด๋น ์ด๋ค์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ ์ํํฉ๋๋ค.
# 2๊ฐ์ ์ปฌ๋ผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
drink_df.sort_values(['beer_servings', 'wine_servings'])
07. ์๊ด ๊ด๊ณ ๋ถ์
์๊ด ๋ถ์ ์ด๋ ๋ ๋ณ์ ๊ฐ์ ์ ํ์ ๊ด๊ณ๋ฅผ ์๊ด ๊ณ์๋ก ํํํ๋ ๊ฒ์ ๋งํฉ๋๋ค. ์๊ด ๊ณ์๋ฅผ ๊ตฌํ๋ ๊ฒ์ ๊ณต๋ถ์ฐ์ ๊ฐ๋ ์ ํฌํจํ๋๋ฐ, ๊ณต๋ถ์ฐ์ 2๊ฐ์ ๋ณ์์ ๋ํ ์๊ด ์ ๋. 2๊ฐ์ ๋ณ์ ์ค ํ๋์ ๊ฐ์ด ์์นํ๋ ๊ฒฝํฅ์ ๋ณด์ด๋ฉด ๋ค๋ฅธ ๊ฐ๋ ์์นํ๋ ๊ฒฝํฅ์ ์์น๋ก ํํํ ๊ฒ์ ๋๋ค. ํ์ง๋ง ๊ณต๋ถ์ฐ๋ง์ผ๋ก ๋ ํ๋ฅ ๋ณ์์ ์๊ด ๊ด๊ณ๋ฅผ ๊ตฌํ๋ค๋ฉด ๋ ๋ณ์์ ๋จ์ ํฌ๊ธฐ์ ์ํฅ์ ๋ฐ์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ -1๊ณผ 1 ์ฌ์ด ๊ฐ์ผ๋ก ๋ณํํฉ๋๋ค. ์ด๋ฅผ ์๊ด ๊ณ์๋ผ ํฉ๋๋ค.
๋ง์ฝ ์๊ด ๊ณ์๊ฐ 1์ ๊ฐ๊น๋ค๋ฉด ์๋ก ๊ฐํ ์์ ์๊ด ๊ด๊ณ๊ฐ ์๋ ๊ฒ์ด๊ณ , -1์ ๊ฐ๊น๋ค๋ฉด ์์ ์๊ด ๊ด๊ณ๊ฐ ์๋ ๊ฒ์ ๋๋ค. 0์ด๋ฉด ์๊ด ๊ด๊ณ๊ฐ ์์ต๋๋ค.
Matplotlib
๋ ํ์ด์ฌ์์ ์๋ฃ๋ฅผ ์ฐจํธ๋ ํ๋กฏ์ผ๋ก ์๊ฐํํ๋ ํจํค์ง์
๋๋ค. Seaborn
์ Matplotlib
์ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ํ ํ
๋ง์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์๊ฐํ ํจํค์ง์
๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ๊ธฐ์ํด์ Matplotlib๋ง์ ์ฌ์ฉํ ์๋ ์๊ณ , Seaborn์ ์ฌ์ฉํ ์๋ ์์ผ๋ฉฐ, ์ด ๋ ๊ฐ์ง๋ฅผ ํจ๊ป ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
์๊ด๊ด๊ณ ๋ถ์
์๊ด๊ด๊ณ ๋ถ์ ์ค์ต์ ์ํด ์์๋ก ๋ฐ์ดํฐํ๋ ์์ ํ๋ ๋ง๋ค์ด๋ด ์๋ค.
import pandas as pd # ํ๋ค์ค ์ํฌํธ.
import matplotlib.pyplot as plt # ๋งทํ๋กฏ๋ฆฝ ์ํฌํธ.
import seaborn as sns # ์๋ณธ ์ํฌํธ
๋ค์์ ํ์ด์ฌ ๋ฆฌ์คํธ๋ฅผ ํตํด ๋ฐ์ดํฐํ๋ ์์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
pd.DataFrame({"์ด์ด๋ฆ1":๋ฆฌ์คํธ1, "์ด์ด๋ฆ2":๋ฆฌ์คํธ2, "์ด์ด๋ฆ3":๋ฆฌ์คํธ3})
test_df = pd.DataFrame({"v1":[100,200,300,400], "v2":[400,200,100,250], "v3":[40,60,60,100]})
test_df
| . | v1 | v2 | v3 | | :--- | ---: | ---: ---: | | 0 | 100 | 400 | 40 | | 1 | 200 | 200 | 60 | | 2 | 300 | 100 | 60 | | 3 | 400 | 250 | 10 |
๋ฐ์ดํฐ์ ์๊ด๊ณ์๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ.corr(method='pearson')
corr = test_df.corr(method = 'pearson')
corr
| . | v1 | v2 | v3 | | :--- | ---: | ---: ---: | | v1 | 1.000000 | -0.568038 | 0.923381 | | v2 | -0.568038 | 1.000000 | -0.291397 | | v3 | 0.923381 | -0.291397 | 1.000000 |
ํํธ๋งต ๊ทธ๋ฆฌ๊ธฐ
๋ฐ์ดํฐํ๋ ์์์ .values
๋ฅผ ํ๊ฒ๋๋ฉด ๋ฐ์ดํฐํ๋ ์์ ๊ฐ ํ์ด ๋ง์น ๋ฆฌ์คํธ ํํ๋ก ๋ณํ๋์ด์ ์ถ๋ ฅ์ด ๋ฉ๋๋ค. ์ด๋ฅผ ๋ค์ ์ฐจํธ๋ฅผ ๊ทธ๋ฆด ๋, ์
๋ ฅ์ผ๋ก ์ฌ์ฉํ ๊ฒ์
๋๋ค.
corr.values
#
# array([[ 1. , -0.56803756, 0.92338052],
# [-0.56803756, 1. , -0.29139712],
# [ 0.92338052, -0.29139712, 1. ]])
์ฐจํธ์ ์ด๋ฆ์ ์
๋ ฅํ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ด column_names
๋ผ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ญ๋๋ค.
column_names = ['ver1', 'ver2', 'ver3']
์ผ๋ฐ์ ์ผ๋ก ์๊ด๊ณ์ ์ฐจํธ๋ฅผ ๊ทธ๋ฆด ๋๋ seaborn
์์ ์ ๊ณตํ๋ heatmap()
์ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค. seaborn
์ sns
์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ํฌํธํ์๋ค๋ฉด, ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
sns.heatmap(๋ฐ์ดํฐํ๋ ์์ ์๊ด๊ณ์ ๋ฐ์ดํฐ)
์๋ ์ฝ๋์ heatmap
์์ ์ฌ์ฉํ๋ ๊ฐ์ข
์ถ๊ฐ์ ์ธ ์ค์ ๊ฐ์ ๋ํด์ ์ฃผ์์ ๋ฌ์๋์์ต๋๋ค. ์ด ์ค์ ๊ฐ๋ค์ ํ์์ ์ธ ์
๋ ฅ์ด ์๋๋ฉฐ, ์ข ๋ ์์๊ฒ ์ฐจํธ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํด์ ์ฌ๋ฌ๋ถ๋ค์ด ์ถ๊ฐ์ ์ผ๋ก ์กฐ์ํ๋ ๊ฒ๋ค์
๋๋ค.
# ๋ ์ด๋ธ์ ํฐํธ ์ฌ์ด์ฆ๋ฅผ ์กฐ์
sns.set(font_scale=2.0)
test_heatmap = sns.heatmap(corr.values, # ๋ฐ์ดํฐ
cbar = False, # ์ค๋ฅธ์ชฝ ์ปฌ๋ฌ ๋ง๋ ์ถ๋ ฅ ์ฌ๋ถ
annot = True, # ์ฐจํธ์ ์ซ์๋ฅผ ๋ณด์ฌ์ค ๊ฒ์ธ์ง ์ฌ๋ถ
annot_kws={'size' : 20}, # ์ซ์ ์ถ๋ ฅ ์ ์ซ์ ํฌ๊ธฐ ์กฐ์
fmt = '.2f', # ์ซ์์ ์ถ๋ ฅ ์์์ ์๋ฆฌ ๊ฐ์ ์กฐ์
square = 'True', # ์ฐจํธ๋ฅผ ์ ์ฌ๊ฐํ์ผ๋ก ํ ๊ฒ์ธ์ง
yticklabels=column_names, # y์ถ์ ์ปฌ๋ผ๋ช
์ถ๋ ฅ
xticklabels=column_names) # x์ถ์ ์ปฌ๋ผ๋ช
์ถ๋ ฅ
plt.tight_layout()
plt.show()
์ด๋ฒ์๋ cbar
๋ฅผ True
๋ก ํด๋ด
์๋ค.
# ๋ ์ด๋ธ์ ํฐํธ ์ฌ์ด์ฆ๋ฅผ ์กฐ์
sns.set(font_scale=2.0)
test_heatmap = sns.heatmap(corr.values,
cbar = True,
annot = True,
annot_kws={'size' : 20},
fmt = '.2f',
square = True,
yticklabels=column_names,
xticklabels=column_names)
plt.tight_layout()
plt.show()
๊ฐ์ข
์ค์ ๊ฐ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ๊ฐ์ฅ ์ฝ๊ฒ ์ ์ ์๋ ๋ฐฉ๋ฒ์ ํด๋น ์ค์ ๊ฐ์ ์ง์์ ์ฌ์ถ๋ ฅํด๋ณด๋ ๊ฒ์
๋๋ค! ์๋ฅผ ๋ค์ด์ fmt = '.2f'
์ ๊ฐ์ fmt = '.3f'
์ผ๋ก ๋ฐ๊ฟ์ ์ฌ์คํํด๋ณด์ธ์. ๊ทธ๋ฌ๋ฉด ์ฐจํธ ์์ ์ซ์๊ฐ ์์์ ์
์งธ์๋ฆฌ๊น์ง ์ถ๋ ฅ ๋ ๊ฒ์
๋๋ค.
๋ค๋ฅธ ์ค์ ๊ฐ์ ๋ํด์๋ ์ฌ๋ฌ๋ถ๋ค์ด ์์ ์์ฌ๋ก ๋ฐ๊ฟ์ ์ถ๋ ฅํด๋ณด์ธ์.
์๊ด ๋ถ์์ ์๊ฐํ ํ ์ ์๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐ์ ๋(scatter plot) ๋ฅผ ๊ทธ๋ฆฌ๋ ๊ฒ์ ๋๋ค. ์ฐ์ ๋๋ ์ขํ์์ ์ ๋ค์ ํ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ ๊ฐ ๋ณ์ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๊ทธ๋ํ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ณ์ A๊ฐ ์ฆ๊ฐํ ๋ ๋ณ์ B ๋ํ ์ฆ๊ฐํ๋ ์ด๋ค ์๊ด ๊ด๊ณ๊ฐ ์๋์ง, ์๋๋ฉด ์๋ฌด๋ฐ ๊ด๊ณ๊ฐ ์๋์ง ์ฐ์ ๋๋ฅผ ํตํด์ ํ์ธํด ๋ณผ ์ ์์ต๋๋ค.
seaborn
์ sns
๋ ์ด๋ฆ์ผ๋ก ์ํฌํธํ์๋ค๋ฉด, ์ฐ์ ๋๋ฅผ ๊ทธ๋ฆฌ๋ ๊ธฐ๋ณธ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. pairplot
์ ๊ฐ ์ด์ ์กฐํฉ์ ๋ํด์ ์ฐ์ ๋๋ฅผ ๊ทธ๋ฆฌ๊ณ , ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ง๋๋ ๋๊ฐ์ ์์ญ์๋ ํด๋น ๋ฐ์ดํฐ์ ํ์คํ ๊ทธ๋จ์ ๊ทธ๋ฆฝ๋๋ค.
sns.pairplot(๋ฐ์ดํฐํ๋ ์)
# whitegrid = ๋ฐฐ๊ฒฝ์ ํ์ ์ ์ ๋ฃ๋๋ค.
sns.set(style='whitegrid')
sns.pairplot(test_df)
plt.show()
์ง๊ธ์ ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ์ ์ด์ ์ฐ์ ๋๋ฅผ ํด์ํ๊ธฐ์๋ ๋ฌด๋ฆฌ๊ฐ ์์ต๋๋ค. ์ฐ์ ๋์ ํด์์ ์ฃผ๋ฅ ๋ฐ์ดํฐ์ ๋ํด์ ์งํํด๋ณด๊ฒ ์ต๋๋ค!
08. ์์ฉ! ์๊ด ๊ด๊ณ ๋ถ์๊ณผ ์ฐ์ ๋
์์ ์ฌ์ฉํ๋ ๋์ผํ ๋ฐ์ดํฐํ๋ ์์ธ drink_df
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐ์ดํฐ ๋ก๋
import pandas as pd
url = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/drinks.csv'
drink_df = pd.read_csv(url, ',')
drink_df
์ฃผ๋ฅ ๋ฐ์ดํฐ์ ์๊ด ๊ณ์
์ฃผ๋ฅ ๋ฐ์ดํฐ์ ๊ฐ ํน์ฑ(feature
)์ ๋ํด์ ์๊ด๊ณ์๋ฅผ ๊ณ์ฐํ๊ณ , ์ด๋ฅผ seaborn
์ heatmap
๊ณผ pairplot
์ ํตํด์ ์๊ฐํํด๋ด
์๋ค! ์ฐ์ , 'beer_servings
', 'wine_servings
' ๋ ํน์ฑ ๊ฐ์ ์๊ด๊ณ์๋ฅผ ๊ณ์ฐํด๋ณด๊ฒ ์ต๋๋ค.
# 'beer_servings', 'wine_servings' ๋ ํผ์ฒ๊ฐ์ ์๊ด๊ณ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
# pearson์ ์๊ด๊ณ์๋ฅผ ๊ตฌํ๋ ๊ณ์ฐ ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ์๋ฏธํ๋ฉฐ, ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ด๋ ๋ฐฉ๋ฒ์
๋๋ค.
corr = drink_df[['beer_servings', 'wine_servings']].corr(method = 'pearson')
corr
์ฃผ๋ฅ ๋ฐ์ดํฐ์ ๊ฐ ํน์ฑ(feature
)์ ๋ํด์ ์๊ด๊ณ์๋ฅผ ๊ณ์ฐํ๊ณ , ์ด๋ฅผ seaborn
์ heatmap๊ณผ pairplot
์ ํตํด์ ์๊ฐํํด๋ด
์๋ค! ์ฐ์ , 'beer_servings
', 'wine_servings
' ๋ ํน์ฑ ๊ฐ์ ์๊ด๊ณ์๋ฅผ ๊ณ์ฐํด๋ณด๊ฒ ์ต๋๋ค.
# ํผ์ฒ๊ฐ์ ์๊ด๊ณ์ ํ๋ ฌ์ ๊ตฌํฉ๋๋ค.
cols = ['beer_servings', 'spirit_servings', 'wine_servings', 'total_litres_of_pure_alcohol']
corr = drink_df[cols].corr(method = 'pearson')
corr
๊ฐ์ฅ ์๊ด๊ณ์ ๊ฐ์ด ๋์ ๊ฒฝ์ฐ๋ beer_servings
์ total_litres_of_pure_alcohold
์ ์๊ด๊ณ์ ๊ฐ์ผ๋ก 0.835839์ ํด๋น๋ฉ๋๋ค. ์ด๋ฅผ seaborn
์ heatmap
์ ํตํด์ ์๊ฐํํด๋ด
์๋ค. ์ฐ์ heatmap
์ ์
๋ ฅ์ ๋ง๋ค๊ธฐ ์ํด์ ์๊ด๊ณ์๊ฐ์ .values
๋ฅผ ์ ์ฉ์์ผ์ค๋๋ค.
corr.values
#
# array([[1. , 0.45881887, 0.52717169, 0.83583863],
# [0.45881887, 1. , 0.19479705, 0.65496818],
# [0.52717169, 0.19479705, 1. , 0.66759834],
# [0.83583863, 0.65496818, 0.66759834, 1. ]])
ํํธ๋งต ์ฐจํธ์ x
์ถ๊ณผ y
์ถ์ ๊ฐ๊ฐ์ ๋ ์ด๋ธ์ ๋ฌ์์ฃผ๊ธฐ ์ํด์ ๋ค์์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
column_names = ['beer', 'spirit', 'wine', 'alcohol']
seaborn
์ heatmap
์๊ฐํ๋ฅผ ์งํํด๋ด
์๋ค!
import seaborn as sns
import matplotlib.pyplot as plt
# ๋ ์ด๋ธ์ ํฐํธ ์ฌ์ด์ฆ๋ฅผ ์กฐ์
sns.set(font_scale=1.5)
hm = sns.heatmap(corr.values,
cbar=True,
annot=True,
square=True,
fmt='.2f',
annot_kws={'size': 15},
yticklabels=column_names,
xticklabels=column_names)
plt.tight_layout()
plt.show()
cbar
๋ ์ค๋ฅธ์ชฝ์ ์๋ ๋ง๋(๋ฒ์ฃผ)๋ฅผ ํ์ํ๋ ๊ฒ์ ๋๋ค.annot
๋ ์๊ด๊ณ์๋ฅผ ํ์ํฉ๋๋ค.square
๋ ์ ์ฌ๊ฐํ์ผ๋ก ์ง์ ํ๋ ๊ฒ์ด๋ฉฐ, False๋ก ์ค์ ์ ์ง์ฌ๊ฐํ์ด ๋ฉ๋๋ค.fmt
๋ ์๊ด๊ณ์์ ์์์ ์๋ฆฌ์๋ฅผ ์ง์ ํฉ๋๋ค.annot_kws
๋ ์๊ด๊ณ์์ ๊ธ์ ํฌ๊ธฐ๋ฅผ ์ง์ ํฉ๋๋ค.yticklabels
๋ y์ถ ๋ ์ด๋ธ ๊ฐ์ ์๋ฏธํฉ๋๋ค.xticklabels
๋ x์ถ ๋ ์ด๋ธ ๊ฐ์ ์๋ฏธํฉ๋๋ค.
alcohol
์ ๋์ฒด์ ์ผ๋ก ๋ค๋ฅธ ํน์ฑ๋ค๊ณผ ๋ชจ๋ ์๊ด ๊ณ์๊ฐ ๋์ต๋๋ค. ์ด๋ฏธ ์๊ฐํ๋ฅผ ์งํํ๊ธฐ ์ ์๋ ํ์ธํ ๋ด์ฉ์ด๊ธฐ๋ ํ์ง๋ง, ๊ทธ ์ค์์๋ 0.84๋ก beer
์ ์๊ด ๊ณ์๊ฐ์ด ๊ฐ์ฅ ๋์ต๋๋ค. ์์ ํ์ธํ์์ ๋๋ 0.835839์์ง๋ง, ์ฌ๊ธฐ์๋ ์์์ ๋ ์๋ฆฌ๊น์ง๋ง ์ถ๋ ฅํ๋ฉด์ ๋ฐ์ฌ๋ฆผ๋์ด 0.84๋ก ์ถ๋ ฅ๋ ๊ฒ์ด๋ผ ๋ณด๋ฉด ๋ฉ๋๋ค.
ํผ์ด์จ์ ์๊ด๊ณ์๋ ์ผ๋ฐ์ ์ผ๋ก,
- ๊ฐ์ด -1.0 ~ -0.7 ์ด๋ฉด, ๊ฐํ ์์ ์๊ด๊ด๊ณ ๊ฐ์ด -0.7 ~ -0.3 ์ด๋ฉด, ๋๋ ทํ ์์ ์๊ด๊ด๊ณ
- ๊ฐ์ด -0.3 ~ -0.1 ์ด๋ฉด, ์ฝํ ์์ ์๊ด๊ด๊ณ
- ๊ฐ์ด -0.1 ~ +0.1 ์ด๋ฉด, ์๋ค๊ณ ํ ์ ์๋ ์๊ด๊ด๊ณ
- ๊ฐ์ด +0.1 ~ +0.3 ์ด๋ฉด, ์ฝํ ์์ ์๊ด๊ด๊ณ
- ๊ฐ์ด +0.3 ~ +0.7 ์ด๋ฉด, ๋๋ ทํ ์์ ์๊ด๊ด๊ณ
- ๊ฐ์ด +0.7 ~ +1.0 ์ด๋ฉด, ๊ฐํ ์์ ์๊ด๊ด๊ณ ๋ก ํด์๋ฉ๋๋ค.
์ฐ์ ๋
์ฃผ๋ฅ ๋ฐ์ดํฐ์ ์ฐ์ ๋. ์ฆ, pairplot
์ ํ์ธํด๋ด
์๋ค. pairplot
์ ๋ฐ์ดํฐํ๋ ์์ ์ธ์๋ก ๋ฐ์ ๊ทธ๋ฆฌ๋(grid
) ํํ๋ก ๊ฐ ๋ฐ์ดํฐ ์ด์ ์กฐํฉ์ ๋ํด ์ฐ์ ๋๋ฅผ ๊ทธ๋ฆฝ๋๋ค. ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ง๋๋ ๋๊ฐ์ ์์ญ์๋ ํด๋น ๋ฐ์ดํฐ์ ํ์คํ ๊ทธ๋จ์ ๊ทธ๋ฆฝ๋๋ค.
# ์๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ ํผ์ฒ๊ฐ์ scatter plot์ ์ถ๋ ฅํฉ๋๋ค.
sns.set(style='whitegrid')
sns.pairplot(drink_df[['beer_servings', 'spirit_servings',
'wine_servings', 'total_litres_of_pure_alcohol']])
plt.show()
09. ๋ฐ์ดํฐ ํ์ํ๊ธฐ (๊ฒฐ์ธก๊ฐ ์ ๊ฑฐ, ์๊ฐํ, ํต๊ณ ํ์ธ)
์์ ์ฌ์ฉํ๋ ๋์ผํ ๋ฐ์ดํฐํ๋ ์์ธ drink_df๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐ์ดํฐ ๋ก๋
import pandas as pd
url = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/drinks.csv'
drink_df = pd.read_csv(url, ',')
drink_df
๊ฒฐ์ธก๊ฐ ์ ๊ฑฐ
๊ฒฐ์ธก๊ฐ์ ํ์์ ๋ฐ์ดํฐ ๋ถ์์์๋, ๊ทธ ํ ๋ ๋์๊ฐ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๋ถ์์ ํ ๋์๋ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์๋ ๊ฐ์ ๋๋ค. ๊ฒฐ์ธก๊ฐ์ ์์ ์ ๊ฑฐ๋ฅผ ํด์ฃผ๊ฑฐ๋, ํน์ ๊ฐ์ผ๋ก ์ฑ์์ฃผ๊ฑฐ๋ ํฌ๊ฒ ๋ ๊ฐ์ง ์ ํ์ ํด์ค ์ ์์ต๋๋ค.
์ ๊ฑฐํ ๋๋ ์ฃผ๋ก dropna()
๋ฅผ ์ฐ๋ ๋ฐ๋ฉด, ์ฑ์์ค ๋๋ ์ฃผ๋ก fillna()
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ continent
์ด์ ๊ฒฐ์ธก๊ฐ์ด 23๊ฐ๊ฐ ์๋ ๊ฒ์ ํ์ธํ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ํน์ ๊ฐ์ผ๋ก ์ฑ์ฐ๋ fillna()
๋ฅผ ์ฌ์ฉํด๋ณด๊ฒ ์ต๋๋ค.
# ๊ฒฐ์ธก ๋ฐ์ดํฐ๋ฅผ ํน์ ๊ฐ์ผ๋ก ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ .fillna()๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
# ์ด ๊ฒฝ์ฐ ๊ธฐํ ๊ฐ์ด๋ผ๋ ์๋ฏธ์์ 'ETC'๋ฅผ ๋ฃ์ด์ค๋ค.
drink_df['continent'] = drink_df['continent'].fillna('ETC')
drink_df.sample(10)
continent
์ด์ ๊ฒฐ์ธก๊ฐ์ด ์์ ๊ฒฝ์ฐ 'ETC'๋ผ๋ ๊ฐ์ผ๋ก ์ฑ์ฐ๋๋ก ํ์ต๋๋ค. ์ฑ์ฐ๊ณ ๋์ ๋๋ค์ผ๋ก 10๊ฐ๋ฅผ ์ถ๋ ฅํ๋๋ก ํด๋ณด์๋๋ฐ, ETC๋ ๊ฐ์ด ์ค๊ฐ์ ๋ณด์
๋๋ค. ์ด์ ๊ฒฐ์ธก๊ฐ์ด ์ฌ๋ผ์ก๋์ง ์์ ๋ฐฐ์ด ์ฝ๋์ธ isnull().sum()
์ผ๋ก ํ์ธํด๋ด
์๋ค.
drink_df.isnull().sum()
#
# country 0
# beer_servings 0
# spirit_servings 0
# wine_servings 0
# total_litres_of_pure_alcohol 0
# continent 0
# dtype: int64
์ด์ continent
์ด์๋ ๊ฒฐ์ธก๊ฐ์ด ์กด์ฌํ์ง ์์ต๋๋ค.
ํ์ด์ฐจํธ ๊ทธ๋ฆฌ๊ธฐ
ํ์ด ์ฐจํธ๋ฅผ ๊ทธ๋ฆฌ๋ ค๋ฉด
- ํ์ด ์ฐจํธ๋ก ์ฌ์ฉํ ๋ฐ์ดํฐ์ ์ด๋ฆ์ด ๋ด๊ธด ๋ฆฌ์คํธ,
- ๊ทธ๋ฆฌ๊ณ ํด๋น ์ด๋ฆ์ ํด๋นํ๋ ๋ฐ์ดํฐ์ ๊ฐ์ด ๋ด๊ธด ๋ฆฌ์คํธ
์ด ๋ ๊ฐ์ง๊ฐ ํ์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ continent
์ ๋ํด์ ํ์ด์ฐจํธ๋ฅผ ๊ทธ๋ ค๋ณด๊ณ ์ ํฉ๋๋ค. ํ์ด ์ฐจํธ์ ๊ฐ์ผ๋ก๋ continent
์ ์๋ ๊ฐ ๊ฐ๋ค์ ๊ฐ์๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๊ตฌ์. continent
์ด์ ๋ํด์ value_counts()
๋ฅผ ์ฌ์ฉํ์์ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด๋ณด๊ณ , ํ์
์ ํ์ธํด๋ด
์๋ค.
drink_df['continent'].value_counts()
#
# AF 53
# EU 45
# AS 44
# ETC 23
# OC 16
# SA 12
# Name: continent, dtype: int64
type(drink_df['continent'].value_counts())
#
# pandas.core.series.Series
์ธ๋ฑ์ค์๋ continents
์ ์ด๋ฆ, ๊ทธ๋ฆฌ๊ณ ์ค์ ๊ฐ ๋ถ๋ถ์๋ ํด๋น continents
์ ์๋ ๊ฐ๋ค์ ๊ฐ๊ฐ ์นด์ดํธํ ๊ฐ์ด ๋ค์ด๊ฐ์์ต๋๋ค. ์ธ๋ฑ์ค๋ index
๋ก ์ ๊ทผํ๊ณ ๊ฐ์ ๋ํด์๋ values
๋ก ์ ๊ทผํ๋ฏ๋ก ๊ฐ๊ฐ ์ ๊ทผ ํ์ ๋ฆฌ์คํธ๋ก ๊ฐ์ ๋ณํํ๋ tolist()
๋ฅผ ์ฌ์ฉํด์ค๋๋ค.
pie_labels = drink_df['continent'].value_counts().index.tolist()
pie_values = drink_df['continent'].value_counts().values.tolist()
print(pie_labels)
print(pie_values)
#
# ['AF', 'EU', 'AS', 'ETC', 'OC', 'SA']
# [53, 45, 44, 23, 16, 12]
์ด์ ํ์ด ์ฐจํธ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํด ํ์ํ ๋ ๊ฐ์ง๋ฅผ ์ป์์ต๋๋ค. ํ์ด ์ฐจํธ๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ์ plt.pie()
๋ฅผ ์ฌ์ฉํฉ๋๋ค. autopct
๋ ์์์ ์ ๋ช ๊ฐ๊น์ง ์ถ๋ ฅํ ์ง๋ฅผ ์ ํ๊ธฐ ์ํ ๊ฐ์
๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
plt.pie(๋ฐ์ดํฐ์ ์ค์ง์ ์ธ ๊ฐ, labels=๋ฐ์ดํฐ์ ๋ ์ด๋ธ ๋ฆฌ์คํธ)
autopct
๋ ์์์ ์ ๋ช ๊ฐ๊น์ง ์ถ๋ ฅํ ์ง๋ฅผ ์ ํ๊ธฐ ์ํ ๊ฐ์
๋๋ค.
plt.pie(pie_values, labels=pie_labels, autopct='%.02f%%')
plt.title('Percentage of each continent')
plt.show()
GroupBy
๋ฅผ ์ด์ฉํ ํต๊ณ ํ์ธ
GroupBy
๋ ํน์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํํ ํ์ ๊ทธ๋ฃน ๋ณ๋ก ํต๊ณ์ ์ธ ์์น ์ ๋ณด๋ฅผ ๊ตฌํ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฐ์ดํฐํ๋ ์์ ์ด๋ฆ.groupby('๊ทธ๋ฃนํ ๊ธฐ์ค์ด ๋๋ ์ด')['๋ณด๊ณ ์ ํ๋ ์ด'].ํต๊ณ ํจ์
GroupBy
๋ฅผ ํตํด์ ์์น ์ ๋ณด๋ฅผ ๊ณ์ฐํด๋ด
์๋ค.
- ์ด๋ค ๋๋ฅ์ด ํ๊ท ์ ์ผ๋ก ๋งฅ์ฃผ๋ฅผ ๋ ๋จน์๊น?
๋๋ฅ์ ๋ํ ์ด์ continent
์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋งฅ์ฃผ์ ์๋น๋์ beer_servings
์ด์
๋๋ค.
ํ๊ท ์ ๊ตฌํ๋ ํจ์๋ mean()
์ด๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค.
์ด๋ค ๋๋ฅ์ด ํ๊ท ์ ์ผ๋ก ๋งฅ์ฃผ๋ฅผ ๋ ๋จน์๊น์?
drink_df.groupby('continent')['beer_servings'].mean()
#
# continent
# AF 61.471698
# AS 37.045455
# ETC 145.434783
# EU 193.777778
# OC 89.687500
# SA 175.083333
# Name: beer_servings, dtype: float64
type(drink_df.groupby('continent')['beer_servings'].mean())
#
# pandas.core.series.Series
๊ฐ ๋๋ฅ ๋ณ๋ก ์์ธ ์๋น์ ๋ํ ํต๊ณ ์ ๋ณด๋ฅผ ์ถ๋ ฅํด๋ณผ๊น์?
drink_df.groupby('continent')['wine_servings'].describe()
๋ชจ๋ ์ปฌ๋ผ์ ๋ํด์ ๋๋ฅ๋ณ๋ก ํ๊ท ์์ฝ ์๋น๋์ ์ถ๋ ฅํด๋ณผ๊น์
drink_df.groupby('continent').mean()
์ ์ฒด ํ๊ท ๋ณด๋ค ๋ง์ ์์ฝ์ฌ์ ์ญ์ทจํ๋ ๋๋ฅ์ ๊ตฌํด๋ด ์๋ค.
total_mean = drink_df.total_litres_of_pure_alcohol.mean()
continent_mean = drink_df.groupby('continent')['total_litres_of_pure_alcohol'].mean()
continent_over_mean = continent_mean[continent_mean >= total_mean]
print(continent_over_mean)
#
# continent
# ETC 5.995652
# EU 8.617778
# SA 6.308333
# Name: total_litres_of_pure_alcohol, dtype: float64
ํ๊ท wine_servings
์ด ๊ฐ์ฅ ๋์ ๋๋ฅ์ ๊ตฌํด๋ด
์๋ค.
beer_continent = drink_df.groupby('continent').wine_servings.mean().idxmax()
print(beer_continent)
10. Quiz
Quiz 1
sklearn
์ ๋จธ์ ๋ฌ๋ ํจํค์ง๋ก ๊ฐ์ข
๋จธ์ ๋ฌ๋ ๋ฐ์ดํฐ์
๋ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ์ด๋ฒ ํด์ฆ์์ ์ฌ์ฉํ ๋จธ์ ๋ฌ๋ ๋ฐ์ดํฐ์
์ iris data(๋ถ๊ฝ ๋ฐ์ดํฐ)์
๋๋ค.
# ํด์ฆ์ ํ์ํ ํจํค์ง๋ ์๋์ ๋ ๊ฐ์ง๊ฐ ์ ๋ถ๊ฐ ์๋๋๋ค.
# ์ฌ๋ฌ๋ถ๋ค์ ํ์์ ๋ฐ๋ผ์ ํจํค์ง๋ฅผ ์ง์ ์ถ๊ฐํ์
๋ ๋ฉ๋๋ค.
import pandas as pd
from sklearn import datasets
# ๋ถ๊ฝ ๋ฐ์ดํฐ ๋ก๋
iris_data = datasets.load_iris()
iris
๋ฐ์ดํฐ์
์ ๊ฐ ์ด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Sepal Length : ๊ฝ๋ฐ์นจ์ ๊ธธ์ด ์ ๋ณด
- Sepal Width : ๊ฝ๋ฐ์นจ์ ๋๋น ์ ๋ณด
- Petal Length : ๊ฝ์์ ๊ธธ์ด ์ ๋ณด
- Petal Width : ๊ฝ์์ ๋๋น ์ ๋ณด
์ด๋ฌํ 4๊ฐ์ ํน์ฑ์ ์๋ ค์คํ ๋
๊ฝ์ ์ข ๋ฅ๋ฅผ ์์ธกํด๋ณด๋ผ๋ ๊ฒ์ด iris ๋ฐ์ดํฐ์ ์ด ์ ์ํ๋ ๋จธ์ ๋ฌ๋ ๋ฌธ์ ์ ๋๋ค.
- Species ๊ฝ์ ์ข ๋ฅ ์ ๋ณด : setosa / versicolor / virginica ์ 3์ข ๋ฅ.
์ฐ์ 4๊ฐ์ ํน์ฑ์ ํด๋น๋๋ ๋ฐ์ดํฐ๋ฅผ df_data์ ๋ก๋ํฉ๋๋ค.
df_data = pd.DataFrame(iris_data['data'], columns=iris_data['feature_names'])
df_data.sample(5)
4๊ฐ์ ์ด์ด ์ถ๋ ฅ๋๋๋ฐ, ๊ฐ๊ฐ ๊ฝ๋ฐ์นจ์ ๊ธธ์ด ์ ๋ณด, ๊ฝ๋ฐ์นจ์ ๋๋น ์ ๋ณด, ๊ฝ์์ ๊ธธ์ด ์ ๋ณด, ๊ฝ์์ ๋๋น ์ ๋ณด์ ํด๋น๋ฉ๋๋ค. iris ๋ฐ์ดํฐ(๋ถ๊ฝ ๋ฐ์ดํฐ)๋ ์ด 4๊ฐ์ ํน์ฑ๋ง ๋ณด๊ณ ์ด ๊ฝ์ด ์ด๋ค ํ์ข ์ ๋ถ๊ฝ์ธ์ง๋ฅผ ์์ธกํด์ผํ๋ ๋จธ์ ๋ฌ๋ ๋ฌธ์ ๋ฅผ ์ํ ๋ฐ์ดํฐ์ ์ ๋๋ค. ์ ๋ต์ ํด๋น๋๋ ๋ ์ด๋ธ์ df_target์ ๋ก๋ํฉ๋๋ค.
df_target = pd.DataFrame(iris_data['target'], columns=['species'])
df_target.sample(5)
์ด ์๋ฆฌ์ฆ์๋ ์ด๋ค ๊ฐ๋ค์ด ์๋์ง ์ถ๋ ฅํด๋ด ์๋ค.
# ๊ฐ์ ์ข
๋ฅ๋ฅผ ์ ๋ถ ์ถ๋ ฅ
df_target['species'].unique()
array([0, 1, 2])
์ซ์๊ฐ 0, 1, 2๊ฐ ๋์ค๋๋ฐ ๊ฐ๊ฐ์ด ์๋ฏธํ๋ ํ์ข ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- 0 = setosa
- 1 = versicolor
- 2 = virginica
pd.concat()
์ ์ฌ์ฉํ๋ฉด ์ ๋ฐ์ดํฐํ๋ ์๊ณผ ์๋ฆฌ์ฆ๋ฅผ ํ๋์ ๋ฐ์ดํฐํ๋ ์์ผ๋ก ํฉ์น๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
df = pd.concat([df_data, df_target], axis=1)
df
์ด๋ ๊ฒ 150๊ฐ์ ํ๊ณผ 5๊ฐ์ ์ด์ ๊ฐ์ง ๋ถ๊ฝ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ดํฐํ๋ ์์ ๋ก๋๋ ์ํ์ ๋๋ค.
์ด 150๊ฐ์ ๋ถ๊ฝ์ด ์๋๋ฐ, ์ข ๋ฅ๋ 3๊ฐ์๊ณ ,
๊ฐ ๋ถ๊ฝ์ ๊ฝ๋ฐ์นจ์ ๊ธธ์ด์ ๋๋น, ๊ฝ์์ ๊ธธ์ด์ ๋๋น๋ฅผ ๊ธฐ๋กํ ๋ฐ์ดํฐ์ ์ธ ๊ฒ์ด์ฃ .
์ฌ๋ฌ๋ถ๋ค์ ํด์ฆ๋ ์ด ๋ถ๊ฝ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ๋ฐ์ดํฐํ๋ ์์ ๊ธฐ๋ฅ(์กฐ๊ฑด๋ถ ํํฐ๋ง, ์๊ด ๊ณ์ ๋ถ์ ๋ฑ), Matplotlib, Seaborn์ ์ฌ์ฉํ์ฌ ๊ฐ์ข ํต๊ณ ์ ๋ณด๋ฅผ ๊ตฌํ๊ณ , ์๊ฐํ๋ฅผ ํด๋ณด๋ ๊ฒ์ ๋๋ค. ๋จ ํ๋์ ์ ๋ต์ด ์กด์ฌํ๋ ๊ฒ์ ์๋๋๋ค. ์ฌ๋ฌ๋ถ๋ค์ด ๋ฐฐ์ด ๋ด์ฉ๋ค์ ๋ณต์ตํ์ฌ ์ต๋ํ ์ฑ์คํ๊ฒ ํด์ฆ๋ฅผ ์ํํด๋ณด์ธ์.