์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Android
- serverless
- RESTful API
- ํ์ด์ฌ
- ์๋ฐ๊ณต๋ถ
- ์คํธ๋ฆผ๋ฆฟ
- streamlit
- ์น๋์๋ณด๋ ์ ์
- ์๋ฐํ๋ก๊ทธ๋๋ฐ
- ์น๋์๋ณด๋ ๊ธฐ์ด
- Matplotlib ๊ธฐ์ด
- ์คํธ๋ฆผ๋ฆฟ ๊ธฐ๋ณธ
- ์๋ฐ
- ์๋๋ก์ด๋ ์คํ๋์ค
- ์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ
- Streamlit๊ธฐ์ด
- Streamlit๊ธฐ๋ณธ
- ํ๋ค์ค๊ณต๋ถ
- ์๋ฐ์คํฌ๋ฆฝํธ
- java
- ์๋ฐ์คํฌ๋ฆฝํธ ๊ณต๋ถ
- Pandas
- db
- MySQL
- ํ์ด์ฌ๊ณต๋ถ
- ์๋ฐ๊ธฐ์ด
- ํ๋ค์ค
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์๋ฐ์ด๋ณด
- JavaScript
- Today
- Total
ruriruriya
[Python] ํ์ด์ฌ ๋งทํ๋กฏ๋ฆฝ(Matplotlib) - ๋ง๋๊ธฐ ๋ฐ ์ฐจํธ(Bar Charts) ๋ณธ๋ฌธ
[Python] ํ์ด์ฌ ๋งทํ๋กฏ๋ฆฝ(Matplotlib) - ๋ง๋๊ธฐ ๋ฐ ์ฐจํธ(Bar Charts)
๋ฃจ๋ฆฌ์ผใ 2023. 11. 20. 23:31
Matplotlib๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ ์ฐจํธ(Bar Chart)๋ฅผ ๊ฐ๋จํ๊ฒ ๋ง๋ค ์ ์๋ค. ์ฃผ๋ก plt.bar() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ก ์๊ฐํํ ์ ์๋ค.
์ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ํฌํธ(import) ํด์ค๋ค.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
์ด๋ฒ์ csv ์ค์ ํฌ์ผ๋ชฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋ฐ์ดํฐํ๋ ์์ ๋ง๋ค์ด ํ์ฉํด๋ณธ๋ค.
>> df = pd.read_csv('../data/pokemon.csv')
>> df
๋ฐ์ดํฐ ํ๋ ์ describe() ํจ์๋ก ์ ๋ณด๋ฅผ ํ์ธํด๋ณด๋
generation_id๋ ๋ฐ์ดํฐ ๊ฐ์ด ์ค๋ณต๋๋ ๊ฑธ ํ์ธํด๋ณผ ์ ์๋ค.
์ด ์ฒ๋ผ ์ค๋ณต๋๋ ๋ฐ์ดํฐ ๊ฐ์ด ์๋ ๊ฒ์ ์นดํ
๊ณ ๋ฆฌ์ปฌ ๋ฐ์ดํฐ(Categorical Data)๋ผ๊ณ ํ๋ค.
>> df.describe()
nunique() ํจ์์ unique() ํจ์๋ฅผ ์ฌ์ฉํด์ ์นดํ
๊ณ ๋ฆฌ์ปฌ ๋ฐ์ดํฐ ๊ฐฏ์์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์๋ ์ง ํ์ธํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ generation_id ์ปฌ๋ผ์ value_counts๋ฅผ ์ฌ์ฉํด์ ์์ด๋ ๋ณ๋ก ์บ๋ฆญํฐ๊ฐ ๋ช๊ฐ ์ฉ ์๋์ง ํ์ธํ๋ค.
>> df['generation_id'].nunique()
7
>> df['generation_id'].unique()
array([1, 2, 3, 4, 5, 6, 7], dtype=int64)
>> # ๊ฐ ์ ๋๋ ์ด์
์์ด๋๋ณ๋ก, ์บ๋ฆญํฐ๊ฐ ๋ช ๊ฐ์ฉ ์๋ ๊ฒ์ธ๊ฐ?
>> df['generation_id'].value_counts()
generation_id
5 156
1 151
3 135
4 107
2 100
7 86
6 72
Name: count, dtype: int64
seaborn ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋
Seaborn์ ํ์ด์ฌ์ ๋ฐ์ดํฐ ์๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ก, Matplotlib์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก์ง๋ง ๋ ๊ฐํธํ๊ณ ๋ฉ์ง ์๊ฐํ๋ฅผ ์ํ ๊ณ ์์ค ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.
Seaborn์ ํต๊ณ ๊ทธ๋ํฝ์ค๋ฅผ ์ํ ๊ณ ๊ธ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋ฉฐ, ํนํ ํต๊ณ ๋ชจ๋ธ์ ์ดํด๋ฅผ ๋๊ธฐ ์ํ ๊ทธ๋ํฝ ๊ธฐ๋ฒ๋ค์ ํฌํจํ๊ณ ์๋ค. ๋ค์ํ ์ข ๋ฅ์ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆด ๋ ์ง๊ด์ ์ด๊ณ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ API๋ฅผ ์ ๊ณตํ์ฌ ๋ฐ์ดํฐ ์๊ฐํ ์์ ์ ๋์ฑ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด ์ค๋ค.
Seaborn ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ secountplot ํจ์
Seaborn์ countplot() ํจ์๋ ๋ฒ์ฃผํ ๋ฐ์ดํฐ์ ๋น๋๋ฅผ ์๊ฐํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ์ฃผ์ด์ง ๋ฐ์ดํฐ์ ๊ฐ ๋ฒ์ฃผ์ ์ํ๋ ๊ด์ธก์น์ ๊ฐ์๋ฅผ ๋ง๋ ๊ทธ๋ํ๋ก ๋ํ๋ด๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
ํน์ ์ปฌ๋ผ์ด ์นดํ
๊ณ ๋ฆฌ์ปฌ ๋ฐ์ดํฐ์ผ ๋,
๊ฐ ํ
์ดํฐ๊ฐ ๋ช๊ฐ ์ฉ ์๋์ง๋ฅผ ์ฐจํธ๋ก ๋ํ๋ด๊ณ ์ถ์ผ๋ฉด
serborn์ countplot ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
data ์์ฑ ํ๋ผ๋ฏธํฐ๋ ๊ผญ ๋ช
์ํด์ผํ๋ค.
์ด๋ ๊ฒ ํจ์๋ด์ ์์ฑ๊ณผ ์์ฑ๊ฐ์ ์
๋ ฅํ๊ณ show() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด
์๋์ฒ๋ผ ์๋ก๋ฌ๋กํ ๋ฐ ์ฐจํธ๋ฅผ ๋ณผ ์ ์๋ค.
>> sb.countplot(data= df, x='generation_id' ) # data ์์ฑ ํ๋ผ๋ฏธํฐ ๊ผญ ๋ช
์
>> plt.show()
๋ฐ ์ปฌ๋ฌ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ
seaborn ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ๋ color_palette() ํจ์๋ ์ปฌ๋ฌ ํ๋ ํธ๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ฏธ๋ฆฌ ์ ์๋ ์ปฌ๋ฌ ํ๋ ํธ๋ฅผ ๋ถ๋ฌ์ฌ ๋ ์ฌ์ฉ๋๋ค. ์ด ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฐํํ ๋ ์ฌ์ฉํ ์ปฌ๋ฌ๋ค์ ์ง์ ํ ์ ์๋ค.
ํ๋ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค ๋ฒํธ๋ก ์ปฌ๋ฌ ํ์ธ์ ํ ๋ค์
>> sb.color_palette()
base_color ๋ณ์์ ์ปฌ๋ฌ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ์ฌ ๋ฃ์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์๊น ์ฌ์ฉํ countplot ํจ์ ์์ฑ์ color๋ฅผ ์ถ๊ฐํ๋ค.
๊ทธ๋ผ ์๋์ฒ๋ผ ์ํ๋ ์์์ผ๋ก ๋ฐ๋๋ค.
>> base_color = sb.color_palette()[4]
>> sb.countplot(data= df, x='generation_id' , color = base_color)
>> plt.show()
๋ฐ์ดํฐ ๊ฐ ๋๊ณ ๋ฎ์ ์์๋๋ก ๋ฐ๊พธ๊ธฐ
์ ๋๋ ์ด์
์์ด๋ ์ปฌ๋ผ์ value_count() ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธ ๋ค์ index ์์๋ฅผ ํ์ธํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ธํ ๊ฒ์ ๋ณ์์ ๋ฃ์ด ์ค ๋ค์
order ์์ฑ์ ์ถ๊ฐํด์ ๋ฐ์ดํฐ ์์๊ฐ ๋์ ์์ผ๋ก ๋ฐ๋์๋์ง ํ์ธํ๋ค.
>> base_order= df['generation_id'].value_counts().index
>> base_order
Index([5, 1, 3, 4, 2, 7, 6], dtype='int64', name='generation_id')
>> sb.countplot(data= df, x='generation_id' , color = base_color, order=base_order)
>> plt.show()
์ญ์์ผ๋ก ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ์ ํ์ด์ฌ์ reversed()ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์๋ค.
>> base_order=list(reversed(base_order))
>> sb.countplot(data= df, x='generation_id' , color = base_color, order=base_order)
>> plt.show()
y์ขํ๋ก ๊ฐ๋ก ๋ฐ ์ฐจํธ ๋ง๋ค๊ธฐ
๋จผ์ ํด๋น ์ปฌ๋ผ์ ๋ฐ์ดํฐ๋ณ ๊ฐฏ์๋ฅผ ํ์ธํ ํ ๋ณ์์ ๋ฃ๋๋ค.
>> df['type_1'].value_counts()
>> base_order2= df['type_1'].value_counts().index
type_1
water 114
normal 105
grass 78
bug 72
fire 53
psychic 53
rock 46
electric 40
poison 34
ground 32
dark 29
fighting 29
ghost 27
dragon 27
steel 24
ice 23
fairy 18
flying 3
Name: count, dtype: int64
๊ทธ๋ฆฌ๊ณ x ๋์ y๋ก ๋ฐ๊พธ๊ณ order ํจ์์๋ ์๋ก์ด ๋ณ์๋ฅผ ๋ฃ์ด์ค๋ค.
๊ทธ๋ ๊ฒ ๊ฐ๋ก ๋ฐ ํํ๋ก ์ฐจํธ๋ฅผ ์์ฑํ ์ ์๋ค!
>> sb.countplot(data= df, y='type_1', order = base_order2)
>> plt.xticks(rotation = 0)
>> plt.title('TYPE 01') # ์ฐจํธ ์ ๋ชฉ์ ๋ฃ์ ์ ์๋ ํจ์
>> plt.xlabel('COUNT') # X์ถ ๋ผ๋ฒจ์ ๋ฃ์ ์ ์๋ ํจ์
>> plt.ylabel('TYPE 1') # y์ถ ํ๋ฒจ์ ๋ฃ์ ์ ์๋ ํจ์
>> sb.set(rc={"figure.figsize": (15,8)}) # seaborn ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ด์ฆ ๋น์จ ์กฐ์ ํ ์ ์๋ ํจ์
>> plt.show()