๊ด€๋ฆฌ ๋ฉ”๋‰ด

ruriruriya

[Python] ํŒŒ์ด์ฌ ๋งทํ”Œ๋กฏ๋ฆฝ(Matplotlib) - ํžˆ์Šคํ† ๊ทธ๋žจ(plt.hist()) ๋ณธ๋ฌธ

๐ŸPython/Matplotlib

[Python] ํŒŒ์ด์ฌ ๋งทํ”Œ๋กฏ๋ฆฝ(Matplotlib) - ํžˆ์Šคํ† ๊ทธ๋žจ(plt.hist())

๋ฃจ๋ฆฌ์•ผใ…‘ 2023. 11. 21. 18:16
๋ฐ˜์‘ํ˜•

matplotlib๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํžˆ์Šคํ† ๊ทธ๋žจ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ์˜ ๋ถ„ํฌ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐ ํšจ๊ณผ์ ์ด๋‹ค. ํžˆ์Šคํ† ๊ทธ๋žจ์€ ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ์…‹์—์„œ ๊ฐ ๊ตฌ๊ฐ„(bin)์— ์†ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๋นˆ๋„๋ฅผ ๋ง‰๋Œ€๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

ํžˆ์Šคํ† ๊ทธ๋žจ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„  plt.hist() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํžˆ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ๋ฐ์ดํ„ฐ์…‹์˜ ๋ถ„ํฌ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.

ํžˆ์Šคํ† ๊ทธ๋žจ์„ ์ด์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ์˜ ๋ถ„ํฌ๋ฅผ ๋ˆˆ์œผ๋กœ ํŒŒ์•…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
๊ตฌ๊ฐ„์ด ์—ฌ๋Ÿฌ๊ฐœ ์ด๋ฉด bins๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

ํžˆ์Šคํ† ๊ทธ๋žจ์€, ๋˜‘๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ ์„œ ์ฐจํŠธ ๋ชจ์–‘์ด ์ „ํ˜€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํ•ด์„์„ ์ž˜ ํ•ด์•ผํ•œ๋‹ค.

์•„๋ž˜ ๋ฐ์ดํ„ฐ๋กœ ํžˆ์Šคํ† ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ณด์ž.

>> df = pd.read_csv('../data/pokemon.csv')
>> df

plt.hist() ํ•จ์ˆ˜

speed  ์ปฌ๋Ÿผ์˜ ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•˜์—ฌ ๊ตฌ๊ฐ„์„ ์„ค์ •ํ•˜๊ณ  plt.hist() ํžˆ์Šคํ† ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ณด์ž.
bin ์†์„ฑ์„ ์•ˆ์“ฐ๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ 10๊ฐœ ๊ตฌ๊ฐ„์œผ๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.

>> df['speed'].describe()
count    807.000000
mean      65.830235
std       27.736838
min        5.000000
25%       45.000000
50%       65.000000
75%       85.000000
max      160.000000
Name: speed, dtype: float64
>> plt.hist(data= df, x= 'speed', rwidth=0.8)
>> plt.show()

 

bins์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•

1. ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’ ๋ณ€๊ฒฝ

bins ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ  20์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด 20๊ฐœ๋กœ ๊ตฌ๊ฐ„์„ ์ •ํ•ด์ค€๋‹ค.

>> plt.hist(data= df, x= 'speed', rwidth=0.8, bins=20) 
>> plt.show()

 

2. ์ปฌ๋Ÿผ ์กฐ๊ฑด ์ ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ

speed๋ฅผ 3๋‹จ์œ„๋กœ, 7๋‹จ์œ„๋กœ, 10๋‹จ์œ„๋กœ ์ตœ์†Œ๊ฐ’๋ถ€ํ„ฐ ์ตœ๋Œ€๊ฐ’ ์‚ฌ์ด๋กœ ์„ค์ •ํ•œ๋‹ค.

๋จผ์ € ์ตœ์†Œ๊ฐ’ 5๋ถ€ํ„ฐ ์ตœ๋Œ€๊ฐ’ 160๊นŒ์ง€๋ฅผ 3๋‹จ์œ„๋กœ numpy ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ arange() ํ•จ์ˆ˜๋กœ array ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ณ€์ˆ˜ my_bins์— ๋„ฃ๊ณ 
bins ์†์„ฑ์— my_bins ๋ณ€์ˆ˜๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

>> df['speed'].min()
5
>> df['speed'].max()
160
>> my_bins = np.arange(5,160+3,3) # 5๋ถ€ํ„ฐ 160๊นŒ์ง€ 3๋‹จ์œผ๋กœ ํฌํ•จํ•˜๊ฒ ๋‹ค
>> my_bins
array([  5,   8,  11,  14,  17,  20,  23,  26,  29,  32,  35,  38,  41,
        44,  47,  50,  53,  56,  59,  62,  65,  68,  71,  74,  77,  80,
        83,  86,  89,  92,  95,  98, 101, 104, 107, 110, 113, 116, 119,
       122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158,
       161])
>> plt.hist(data= df, x= 'speed', rwidth=0.8, bins=my_bins) # bins ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€๊ฒฝ
>> plt.show()

 

๋‹ค์Œ์€ ๊ตฌ๊ฐ„์„ 10๋‹จ์œ„๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ํžˆ์Šคํ† ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด ์ถœ๋ ฅํ•œ๋‹ค.

>> my_bins=np.arange(5,160+10,10)
>> plt.hist(data= df, x= 'speed', rwidth=0.8, bins=my_bins) # bins ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€๊ฒฝ
>> plt.show()

 

ํ•˜๋‚˜์˜ ์ฐจํŠธ ์˜์—ญ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ฐจํŠธ(plot)์„ ๊ทธ๋ฆฌ๊ธฐ

>> plt.figure(figsize=(12,5)) # ์ฐจํŠธ ์‚ฌ์ด์ฆˆ ์กฐ์ ˆ

>> plt.subplot(1,2,1)

>> plt.title('speed his. bins 3')
>> plt.xlabel('Speed')
>> plt.ylabel('# of Characters')
>> my_bins = np.arange(5,160+3,3)
>> plt.hist(data= df, x= 'speed', rwidth=0.8, bins=my_bins)

>> plt.subplot(1,2,2)

>> plt.title('speed his. bins 10')
>> plt.xlabel('Speed')
>> plt.ylabel('# of Characters')

>> my_bins=np.arange(5,160+10,10)
>> plt.hist(data= df, x= 'speed', rwidth=0.8, bins=my_bins)

>> plt.show() #show๋Š” ํ•˜๋‚˜๋งŒ ํ•˜๋‚˜์˜์˜์—ญ์— ๋‘๊ฐœ์˜ ๋น„๊ต ์ฐจํŠธ๊ฐ€ ๋ณด์—ฌ์ง„๋‹ค.

๋ฐ˜์‘ํ˜•