240510 Today I Learn
๐ก matplotlib
์๊ฐํ๋ฅผ ์ํ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ก, ๋ค์ํ ์ข ๋ฅ์ ๊ทธ๋ํ๋ฅผ ์์ฑํ๊ธฐ ์ํ ๋๊ตฌ๋ฅผ ์ ๊ณต
- 2D ๊ทธ๋ํฝ์ ์์ฑํ๋ ๋ฐ ์ฃผ๋ก ์ฌ์ฉ
- ์ ๊ทธ๋ํ, ๋ง๋ ๊ทธ๋ํ, ํ์คํ ๊ทธ๋จ, ์ฐ์ ๋, ํ์ด ์ฐจํธ ๋ฑ ๋ค์ํ ์๊ฐํ ๋ฐฉ์์ ์ง์
- ๊ทธ๋ํ๋ฅผ ์์, ์คํ์ผ, ๋ ์ด๋ธ, ์ถ ๋ฒ์ ๋ฑ์ ์กฐ์ ํ์ฌ ์ํ๋ ํํ๋ก ์๊ฐํํ ์ ์์
๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ ๋๊ตฌ
matplotlib๋ก ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ
import pandas as pd
import matplotlib.pyplot as plt
๐ฝ ์์ ๋ฐ์ดํฐ์
๋๋ณด๊ธฐ
newjeans = pd.DataFrame({
'name' : ['Minji','Hanni','Danielle','Haerin', 'Hyein'],
'age' : [20, 19, 19, 17, 16],
'nationality' : ['Korea', 'Australia', 'Australia','Korea','Korea'],
'height': [169,161.7, 165, 165, 170]
})
- ์ด๋ฆ์ x์ถ์ผ๋ก, ํค๋ฅผ y์ถ์ผ๋ก ํ๋ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค๋ณด์
x = newjeans['name']
y = newjeans['height']
plt.plot(x,y)
๊ธฐ๋ณธ ๋๊ตฌ ( ์ ๋ชฉ, ์ถ์ด๋ฆ, ๋ฒ๋ก ์ถ๊ฐํ๊ธฐ)
x = newjeans['name']
y = newjeans['height']
plt.plot(x,y)
plt.xlabel('members')
plt.ylabel('height(cm)')
plt.title('Newjeans Height')
plt.legend(['height'])
- ์ถ์ด๋ฆ ์ง์ ํ๊ธฐ : .xlabel('์ถ์ด๋ฆ'), .ylabel('์ถ์ด๋ฆ')
- ์ฐจํธ ์ ๋ชฉ ์ง์ ํ๊ธฐ : .title('์ ๋ชฉ', fontsize = ๊ธ์จ ํฌ๊ธฐ)
- ๋ฒ๋ก ์ง์ ํ๊ธฐ : .legend(['๋ฒ๋ก๋ช '])
์คํ์ผ ์ค์ ํ๊ธฐ
newjeans.plot(x='name', y = 'height', color='blue', linestyle='--', marker='o')
- color (์์)
- ๊ธฐ๋ณธ์์ : 'blue', 'green', 'red', 'cyan', 'magenta', 'yellow', 'black', 'white'
- RGB๊ฐ ์ง์ ์ ๋ ฅ
- linestyle(์ ์คํ์ผ) : '-'(์ค์ ), '--'(๋์์ ), ':'(์ ์ ), '-.'(์ -๋์์ )
- marker(๋ง์ปค) : 'o'(์), '^'(์ผ๊ฐํ), 's'(์ฌ๊ฐํ), '+'(ํ๋ฌ์ค), 'x'(์์ค)
๊ธฐํ (ํ ์คํธ ์ถ๊ฐํ๊ธฐ, ๊ทธ๋ํ ์ฌ์ด์ฆ ๋ณ๊ฒฝํ๊ธฐ)
- ํ ์คํธ ์ถ๊ฐํ๊ธฐ
- ๊ทธ๋ํ ์ฌ์ด์ฆ ๋ณ๊ฒฝํ๊ธฐ
plt.figure(figsize=(16,9))
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Example Plot')
→ ์๋ฆฌ์ฆ plot์ ์ฌ์ด์ฆ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ์ ๋์๋ plot ์ค์ ์์ `plt.figure(figsize=(๊ฐ๋ก,์ธ๋ก))` ๋ฅผ ๋ฃ์ด ์ฌ์ด์ฆ๋ฅผ ์ง์ ํด์ค๋ค.
fig, plt_newjeans = plt.subplots(figsize=(16,9))
plt_newjeans=newjeans.plot(x='name', y = 'height', color='blue', label='h', ax=plt_newjeans)
→ ๋ฐ์ดํฐ ํ๋ ์ plot์ ๊ฒฝ์ฐ `subplots`๋ฅผ ํ์ฉํด์ ๋ฐ์ค๋ฅผ ๋ง๋ค์ด ์ค ๋ค ๊ทธ ์์ plot์ ์ง์ด๋ฃ๋ ๋ฐฉ์์ผ๋ก ํด์ผํจ! ์ด๋ ๋ฐ๋์ `ax=plt_newjeans`์ ๊ฐ์ด ์ถ์ ์ง์ ํด์ค์ผ ํจ
๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ ์ฐจํธ
๊ทธ๋ํ ์ ํ
|
์๋ฃ ์ ํ
|
ํน์ง
|
Line Plot
|
์ฐ์ํ ๋ฐ์ดํฐ
|
๋ฐ์ดํฐ์ ๋ณํ ๋ฐ ์ถ์ด๋ฅผ ์๊ฐํ
|
Bar Plot
|
๋ฒ์ฃผํ ๋ฐ์ดํฐ
|
์นดํ
๊ณ ๋ฆฌ ๋ณ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ๋น๊ต
|
Histogram
|
์ฐ์ํ ๋ฐ์ดํฐ
|
๋ฐ์ดํฐ ๋ถํฌ, ๋น๋, ํจํด ๋ฑ์ ์ดํด
|
Pie Chart
|
๋ฒ์ฃผํ ๋ฐ์ดํฐ์ ๋น์จ
|
๋ฒ์ฃผ๋ณ ์๋์ ๋น์จ์ ๋ถ์ฑ๊ผด ๋ชจ์์ผ๋ก ์๊ฐํ
|
Box Plot
|
์ฐ์ํ ๋ฐ์ดํฐ์ ๋ถํฌ
|
์ค์๊ฐ, ์ฌ๋ถ์์, ์ต์๊ฐ, ์ต๋๊ฐ, ์ด์์น ํ์ธ
|
Scatter Plot
|
๋ ๋ณ์ ๊ฐ ๊ด๊ณ
|
๋ณ์ ๊ฐ์ ๊ด๊ณ, ๊ตฐ์ง, ์ด์์น ๋ฑ ํ์ธ
|
Line
๐ก Line Chart
๋ฐ์ดํฐ ๊ฐ์ ์ฐ์์ ์ธ ๊ด๊ณ๋ฅผ ์๊ฐํํ๋ ๋ฐ์ ์ ํฉ. ์ฃผ๋ก ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ์ ๋ณํ๋ฅผ ๋ํ๋
plt.plot(x='x์ถ์ ๋ค์ด๊ฐ ๊ฐ', y='y์ถ์ ๋ฃ์ ๊ฐ')โ
1. ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
flights = sns.load_dataset('flights')
grouped = flights[['year','passengers']].groupby('year').sum('passengers').reset_index()
grouped
2. Line Chart ๊ทธ๋ฆฌ๊ธฐ
plt.plot(grouped['year'],grouped['passengers'])
Bar vs. Histogram
๐กBar Chart
๋ฒ์ฃผํ ๋ฐ์ดํฐ(group by๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ ๊ทธ๋ฃนํ ํด์ค์ผ ํจ)๋ฅผ ๋ํ๋ด๋ฉฐ, ๊ฐ๊ฐ์ ๋ง๋๋ก ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๋ ๋ฐ์ ์ฌ์ฉ๋จ.
plt.bar(x='x์ถ์ ๋ค์ด๊ฐ ๊ฐ', y='y์ถ์ ๋ค์ด๊ฐ ๊ฐ')โ
df = newjeans.groupby('age')['name'].count().reset_index(name = 'cnt')
plt.bar(df['age'],df['cnt'])
๐กHistogram
์ฐ์๋ ๋ฐ์ดํฐ์ ๋ถํฌ๋ฅผ ๋ณด์ฌ์ค๋ค. ์ฃผ๋ก ๋ฐ์ดํฐ์ ๋น๋๋ฅผ ์๊ฐํํ์ฌ ํด๋น ๋ฐ์ดํฐ์ ๋ถํฌ๋ฅผ ์ดํดํ๋ ๋ฐ ์ฌ์ฉ๋จ
plt.hist(๋ฐ์ดํฐ, color = '์์', bins = ๋ช๊ฐ์ bar๋ฅผ ๋ง๋ค๊ณ ์ถ์์ง, width = '๋ง๋๊ทธ๋ํ์ ๋๋น')
plt.hist(iris['sepal_length'], bins = 5, width=0.5, color='green')
๐ก ๋ง๋๊ทธ๋ํ vs. ํ์คํ ๊ทธ๋จ
๊ตฌ๋ถ ๋ง๋ ๊ทธ๋ํ ํ์คํ ๊ทธ๋จ ๋ฐ์ดํฐ ์ ํ ๋ฒ์ฃผํ ๋ฐ์ดํฐ ๋น๊ต ์ฐ์์ ๋ฐ์ดํฐ ๋ถํฌ ๋ง๋ ํํ ์์ง or ์ํ ๋ง๋ (ํฌ๊ธฐ) ๋ง๋๊ฐ ๋ถ์ด์๋ ํํ (๋น๋) ์๊ฐํ ์ ํ ํด๋น ๋ฒ์ฃผ์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ X์ถ์ ๋ฐ์ดํฐ ๊ฐ์ ๋ฒ์๋ฅผ, Y์ถ์ ํด๋น ๋ฒ์์์์ ๋น๋๋ฅผ ๋ํ๋ ์์ ํ๋ณ ํ๋งค๋, ๊ตญ๊ฐ๋ณ GDP ๋ฑ์ ๋น๊ต ์ํ ์ ์ ๋ถํฌ, ์จ๋ ๋ณํ ๋ฑ ์ฐ์์ ์ธ ๋ฐ์ดํฐ์ ๋ถํฌ
Piechart
๐ก Pie Chart
์ ์ฒด์์ ๊ฐ ๋ถ๋ถ์ ๋น์จ์ ๋ณด์ฌ์ฃผ๋ ๊ทธ๋ํ๋ก ์ฃผ๋ก ์นดํ ๊ณ ๋ฆฌ๋ณ ๋น์จ์ ๋ณด์ฌ์ฃผ๋๋ฐ ์ฌ์ฉ๋จ
plt.pie(๋ฒ์ฃผ ์์ ๋ค์ด๊ฐ ๊ฐ,labels= '๋ฒ์ฃผ๋ก ์ฌ์ฉ๋ ์๋ฆฌ์ฆ', autopct='๋ฐ์ดํฐ ๋ ์ด๋ธ ํ์ ํ์')โ
- auptopct = '%1.1f%%' → 20.0% ๋ก ํ์
- auptopct = '%1.1f%%' → 20.00%๋ก ํ์
df = newjeans.groupby('age')['name'].count().reset_index(name = 'cnt')
plt.pie(df['cnt'],labels=df['age'], autopct='%1.f%%')
Boxplot
๐กBoxplot
- ๋ฐ์ดํฐ์ ๋ถํฌ์ ์ค์๊ฐ, ์ด์์น๋ฅผ ํ๋์ ํ์ ํ ์ ์์
- ๋ค์์ ๊ทธ๋ฃน ๋๋ ๋ฒ์ฃผ ๊ฐ์ ๋ฐ์ดํฐ ๋ถํฌ๋ฅผ ๋น๊ตํ๋ ๋ฐ ์ ์ฉ
- ํต๊ณ์ ์ผ๋ก ์ค์ํ ๋ฐ์ดํฐ์ ํน์ฑ์ ์๊ฐ์ ์ผ๋ก ํํํ ๋ ํ์ฉ๋จ
plt.boxplot(๋ฐ์ค plot์ ๊ทธ๋ฆด ์๋ฆฌ์ฆ ๋ฐ์ดํฐ, labels = ๋ ์ด๋ธ๋ช , whis = 1.5, vert=True)
- whis = 1.5(๊ธฐ๋ณธ๊ฐ) → whis : ์์ผ์ ๊ธธ์ด
- vert = True(๊ธฐ๋ณธ๊ฐ) → ๋ฐ์คํ๋กฏ์ด ์์ง์ผ๋ก ๊ทธ๋ ค์ง (vert=false๋ก ํ๋ ๊ฒฝ์ฐ ๊ฐ๋ก๋ก ๊ทธ๋ฆผ)
- Boxplot ๋ณด๋ ๋ฒ
- ์์(Box): ๋ฐ์ดํฐ์ ์ค์๊ฐ๊ณผ ์ฌ๋ถ์์(25%์ 75%)๋ฅผ ๋ํ๋ ๋๋ค. ์์์ ์๋์ชฝ ๋์ 25%์ ๊ฐ(1์ฌ๋ถ์์), ์์์ ์์ชฝ ๋์ 75%์ ๊ฐ(3์ฌ๋ถ์์)์ ๋ํ๋ ๋๋ค. ์์์ ์ค์์ ์์นํ ์ ์ ์ค์๊ฐ์ ๋ํ๋ ๋๋ค.
- ์์ผ(Whisker): ์์์ ์ ์๋๋ก ์ฐ์ฅ๋๋ ์ ์ผ๋ก, ์ผ๋ฐ์ ์ผ๋ก 1.5๋ฐฐ์ ์ฌ๋ถ์ ๋ฒ์๋ก ๊ณ์ฐ๋๋๋ฐ, ์ด ๋ฒ์๋ฅผ ๋์ด๊ฐ๋ ๊ฐ์ ์ด์์น(outlier)๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์์ผ์ ๋์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ๋ํ๋ ๋๋ค.
- ์ด์์น(Outliers): ์์ผ ๋ถ๋ถ์ ๋ฒ์ด๋๋ ๊ฐ๋ณ ๋ฐ์ดํฐ ํฌ์ธํธ๋ก, ์ผ๋ฐ์ ์ธ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฐ๋ค์ ์๋ฏธํฉ๋๋ค. ์ด์์น๋ ๋ฐ์ค ํ๋กฏ์์ ๋ ๋ฆฝ์ ์ผ๋ก ํ์๋ฉ๋๋ค.
- Boxplot ๊ทธ๋ฆฌ๊ธฐ(iris)
iris = sns.load_dataset('iris')
cols = ['sepal_length','sepal_width','petal_length','petal_width']
new_df = plt.boxplot(iris[cols], labels = cols, whis = 1.5, vert=True)
Scatter
๐ก Scatter Plot
๋ ๋ณ์ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ผ๋ก ํ์ํ์ฌ ๋ณด์ฌ์ฃผ๋ ๊ทธ๋ํ๋ก ๊ฐ ์ ์ด ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ๋ํ๋ด๋ฉฐ, ๊ทธ ์ ๋ค์ด ์ด๋ป๊ฒ ๋ถํฌ๋์ด ์๋์ง ์๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์์.
plt.scatter(x='x์ถ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ', y='y์ถ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ')โ
plt.scatter(iris['petal_length'],iris['sepal_length'], color='pink', s=20, alpha = 0.5)
- color = '์์์ง์ '
- s/ area = '์ ํฌ๊ธฐ ์ง์ '
- alpha = ํฌ๋ช ๋ → ๋ง์ ๊ฐ๋ค์ด ๊ฒน์ณ ์๋ ๊ฒฝ์ฐ ํฌ๋ช ๋๋ฅผ ์ฃผ๋ฉด, ์งํ๊ฒ ๋ณด์ด๋ ๋ถ๋ถ์ ๊ฐ์ด ๋ง์ด ๋ชฐ๋ฆฐ๊ฒ์ ํ์ธํ ์ ์์
๐ก ํผ์ด์จ ์๊ด๊ณ์
๋ ๋ณ์ ๊ฐ์ ์ ํ์ ์ธ ๊ด๊ณ๋ฅผ ์ธก์ ํ๊ธฐ ์ํ ํต๊ณ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋์ ๋๋ค. ์ฃผ๋ก ์ฐ์ํ ๋ณ์๋ค ๊ฐ์ ์๊ด๊ด๊ณ๋ฅผ ํ๊ฐํ๋ ๋ฐ ์ฌ์ฉ.
#ํ์ด์ฌ์์ ์๊ด๊ณ์ ๊ตฌํ๊ธฐ(.corr) iris.corr(numeric_only=True)โ
- ๋ฒ์: -1์์ 1 ์ฌ์ด์ ๊ฐ์ ๊ฐ์ง๋๋ค.
- ์์ ์๊ด๊ด๊ณ: 1์ ๊ฐ๊น์ธ์๋ก ๊ฐํ ์์ ์ ํ๊ด๊ณ๋ฅผ ๋ํ๋ ๋๋ค.
- ์์ ์๊ด๊ด๊ณ: -1์ ๊ฐ๊น์ธ์๋ก ๊ฐํ ์์ ์ ํ๊ด๊ณ๋ฅผ ๋ํ๋ ๋๋ค.
- ๋ฌด์๊ด ๊ด๊ณ: 0์ ๊ฐ๊น์ธ์๋ก ์ ํ๊ด๊ณ๊ฐ ๊ฑฐ์ ์๊ฑฐ๋ ์ฝํ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋๋ค