๐Ÿ“•Week3 day4(Matplotlib)

๋ฐ•์ค€ํฌยท2023๋…„ 9์›” 7์ผ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

๋ชฉ๋ก ๋ณด๊ธฐ
17/28
post-thumbnail

Matplotlib

matplotlib์€ ํŒŒ์ด์ฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

matplotlib ์‹œ์ž‘


1.๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž„ํฌํŠธ
matplotlib๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ importํ•˜๋Š”๋ฐ ์ฃผ๋กœ matplotlib.pyplot์„ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

import matplotlib.pyplot as plt

2.์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” Plotting์˜ Options

  • ํฌ๊ธฐ : figsize
  • ์ œ๋ชฉ : title
  • ๋ผ๋ฒจ : _label
  • ๋ˆˆ๊ธˆ : _tics
  • ๋ฒ”๋ก€ : legend

3.๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ

plt.plot([2,4,1,4.5,5.1])#๊บพ์€์„ ๊ทธ๋ž˜ํ”„, ์‹ค์ œ plotting์„ ํ•˜๋Š” ํ•จ์ˆ˜
plt.show()#plt๋ฅผ ํ™•์ธํ•˜๋Š” ๋ช…๋ น

plt.plot()๋Š” ๊บพ์€์„  ๊ทธ๋ž˜ํ”„๋กœ ์‹ค์ œ plotting์„ ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
๊ทธ ํ›„ plt.show()๋ฅผ ํ†ตํ•ด plottingํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
๋ฐ‘์— ์™€ ๊ฐ™์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

  • x,y์ถ• ์„ค์ •
x = np.array([1,2,3,4,5])#์ •์˜์—ญ์˜ ์—ญํ• 
y = np.array([1,4,9,16,25])#์น˜์—ญ์˜ ์—ญํ• 
plt.plot(x,y)
plt.show()


x,y์ขŒํ‘œ๋“ค์˜ ๊ฐ’๋“ค์„ ๊ฐ๊ฐ ์„ค์ •ํ•˜์—ฌ plt.plot()์•ˆ์— ์ธ์ž๋กœ ์ฃผ๊ฒŒ๋˜๋ฉด
ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๊ทธ๋ž˜ํ”„๊ฐ€ ํ‘œํ˜„๋œ๋‹ค. ์—ฌ๊ธฐ์„œ x,y๋ณ€์ˆ˜๋Š” ๊ฐ๊ฐ ์ •์˜์—ญ,์น˜์—ญ์˜ ์—ญํ• ์„ ํ•˜๊ฒŒ๋œ๋‹ค.

x = np.arange(-10,10,0.01)#-10์—์„œ 10๊นŒ์ง€ 0.1์˜ ๊ฐ„๊ฒฉ์œผ๋กœ
plt.plot(x, x**2)
plt.show()


y์ธ์ž ๋ถ€๋ถ„์— x^2 ๊ฐ’์„ ๋„ฃ์œผ๋ฉด y=x^2 ํ•จ์ˆ˜์˜ ํ˜•ํƒœ๋ฅผ ๋„๊ฒŒ ๋œ๋‹ค.

  • ํฌ๊ธฐ : figsize()
plt.figure(figsize=(3,3))

plt.figure()๋Š” plottingํ•  ๋„๋ฉด์„ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด๊ณ  ์„ ์–ธํ•  ๋•Œ, figsize()์•ˆ์— ๋„๋ฉด์˜ ํฌ๊ธฐ๋ฅผ ๋„ฃ์–ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ผ๋ฒจ : _label
#x,y์ถ•์— ์„ค๋ช… ์ถ”๊ฐ€ํ•˜๊ธฐ
x = np.arange(-10,10,0.01)
plt.xlabel("x value")
plt.ylabel("y value")
plt.plot(x, x**2)
plt.show()

์œ„์˜ plot์—์„œ plt.label(" value")์„ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ‘์— ๊ทธ๋ฆผ๊ฐ™์ด ๊ฐ ์ถ•์— ์ด๋ฆ„์ด ์„ค์ •๋œ๋‹ค.

  • ๋ฒ”์œ„ : axis
plt.axis([-5,5,0, 25])#[x_min,x_max,y_min,y_max]

์ด ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด x์ถ•๊ณผ y์ถ•์˜ ๋ฒ”์œ„๊ฐ€ ๊ฐ ๊ฐ (x_min,x_max),(y_min,y_max)๋กœ ์„ค์ •๋˜์–ด ๋ฐ‘์— ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ถœ๋ ฅ๋œ๋‹ค.

  • ๋ˆˆ๊ธˆ : _ticks
plt.xticks([i for i in range(-5, 6,1)])
plt.yticks([i for i in range(0,25,3)])

์ด ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด x์ถ•์˜ ๋ˆˆ๊ธˆ์ด -5๋ถ€ํ„ฐ 5 ๊นŒ์ง€ 1์˜ ๊ฐ„๊ฒฉ์œผ๋กœ, y์ถ•์˜ ๋ˆˆ๊ธˆ์ด 0๋ถ€ํ„ฐ 24 ๊นŒ์ง€ 3์˜ ๊ฐ„๊ฒฉ์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ๋‚˜ํƒ€๋‚œ๋‹ค.

  • ์ œ๋ชฉ : title
plt.title("y = x^2 graph")

์ด ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด ๊ทธ๋ž˜ํ”„์˜ ์ œ๋ชฉ์ด ์ถ”๊ฐ€๋˜์–ด ๋‚˜ํƒ€๋‚œ๋‹ค.
๋˜ ๋ฒ”๋ก€๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ

plt.plot(x, x**2, label="trand")

plot์—์„œ label์ธ์ž์— ๋ฒ”๋ก€์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฒ”๋ก€๊ฐ€ ๊ทธ๋ž˜ํ”„์— ๋‚˜ํƒ€๋‚œ๋‹ค.

Matplotlib Case Study


๊บพ์€์„  ๊ทธ๋ž˜ํ”„๋Š” ์œ„์—์„œ ์•Œ์•„๋ดค์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ case์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ์•Œ์•„๋ณด๊ฒ ๋‹ค.

  • ์‚ฐ์ ๋„(scatter plot)

    ์‚ฐ์ ๋„๋Š” ํ•œ ๊ฐ€์ง€ ๋ณ€์ˆ˜์˜ ์‹œ๊ฐ„์˜ ๋ณ€ํ™”์— ๋Œ€ํ•ด ํ‘œํ˜„ํ•ด์•ผ ํ•  ๊ฐ’์ด ๋งŽ์€ ๊ฒฝ์šฐ, ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ณ€์ˆ˜์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์œ ์šฉํ•˜๋‹ค. ๋‘ ๊ฐ€์ง€ ์ด์ƒ์˜ ๋ณ€์ˆ˜๋“ค์— ๋Œ€ํ•ด์„œ ๋ชจ๋ธ๋ง์„ ํ•˜๋Š” ํšŒ๊ท€๋ถ„์„์— ์žˆ์–ด์„œ๋„ ์ฒ˜์Œ์— ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ์„ ๋ณด๋Š”๋ฐ ์•„์ฃผ ์œ ์šฉํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

plt.scatter(x,y)
plt.show()

scatter plot๋„ plt.plot๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ plt.scatter๋กœ ์•ˆ์— x,y์ธ์ž๋ฅผ ๋„ฃ๊ณ  ์‹คํ–‰ํ•œ๋‹ค.

  • ๋ฐ•์Šค ๊ทธ๋ฆผ(box plot)

    ์ˆ˜์น˜ํ˜• ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ •๋ณด(Q1, Q2, Q3, min, max)๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

plt.boxplot((x,y))
plt.title("Box plot of x, y")
plt.show()
#์•„๋ž˜๋ถ€ํ„ฐ ์ตœ์†Ÿ๊ฐ’, ํ•˜์œ„ 25%, ์ค‘์•™๊ฐ’, ์ƒ์œ„ 25%, ์ตœ๋Œ“๊ฐ’)

  • ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„(Bar plot)

    ๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ์˜ ๊ฐ’๊ณผ ๊ทธ ๊ฐ’์˜ ํฌ๊ธฐ๋ฅผ ์ง์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ทธ๋ฆผ

plt.bar(x, y)
plt.xticks(np.arange(0, 20, 1))
plt.show()


์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ํžˆ์Šคํ† ๊ทธ๋žจ์ด๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋Š”๋ฐ ํžˆ์Šคํ† ๊ทธ๋žจ์€ ๊ณ„๊ธ‰์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค. ๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ ํ›„ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฐ๋‹ค.

plt.hist(y, bins=np.arange(0,20,2))#bin : ๊ณ„๊ธ‰์„ ๊ตฌ์„ฑํ•  ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•œ๋‹ค. 
plt.xticks(np.arange(0,20,2))
plt.show()

  • ์›ํ˜• ๊ทธ๋ž˜ํ”„(Pie chart)

    ๋ฐ์ดํ„ฐ ์ „์ฒด์— ๋Œ€ํ•œ ๋ถ€๋ถ„์˜ ๋น„์œจ์„ ๋ถ€์ฑ„๊ผด๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋น„์œจ ํ™•์ธ์— ์šฉ์ดํ•˜๋‹ค.

z = [100,200,300,400]
plt.pie(z,labels=['one', 'two', 'three', 'four'])
plt.show()

๋” ๋‹ค์–‘ํ•œ ๊ทธ๋ž˜ํ”„, Seaborn Case Study


Seaborn์€ matplotlib๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋” ๋‹ค์–‘ํ•œ ์‹œ๊ฐํ™” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž„ํฌํŠธ

import seaborn as sns

์ปค๋„๋ฐ€๋„๊ทธ๋ฆผ(Kernel Density Plot)

ํžˆ์Šคํ† ๊ทธ๋žจ๊ณผ ๊ฐ™์€ ์—ฐ์†์ ์ธ ๋ถ„ํฌ๋ฅผ ๊ณก์„ ํ™”ํ•ด์„œ ๊ทธ๋ฆฐ ๊ทธ๋ฆผ์œผ๋กœ
sns.kdeplot()์„ ์‚ฌ์šฉํ•ด plottingํ•œ๋‹ค.

์ด์ „์— plt.hist()๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฐ ์ ์ด ์žˆ๋Š”๋ฐ ์•Œ์•„๋ณด๊ธฐ ์‰ฝ์ง€ ์•Š์•˜๋‹ค. sns.kdeplot()์€ ๊ณก์„ ํ™”ํ•ด์„œ ๊ทธ๋ ค์„œ ์•Œ์•„๋ณด๊ธฐ ์‰ฝ๊ฒŒ๋œ๋‹ค.

sns.kdeplot(y,fill = True)#fill์ธ์ž ๊ทธ๋ž˜ํ”„ ์•ˆ์— ์žˆ๋Š” ๋ถ€๋ถ„์— ์ƒ‰์น ์„ ํ•˜๋Š” ์ธ์ž
plt.show()

์นด์šดํŠธ๊ทธ๋ฆผ(Count Plot)

๋ฒ”์ฃผํ˜• column์˜ ๋นˆ๋„์ˆ˜๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š”๋ฐ Groupbyํ›„์˜ ๋„์ˆ˜๋ฅผ ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ํšจ๊ณผ๋ฅผ ๊ฐ€์ง„๋‹ค.
sns.countplot()๋ฅผ ์ด์šฉํ•ด plottingํ•œ๋‹ค.

๋จผ์ € groupbyํ›„์˜ ๋„์ˆ˜๋ฅผ ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค.

vote_df = pd.DataFrame({"name":['Andy', 'Bob', 'Cat'],"vote":[True, True, False]})
vote_count = vote_df.groupby('vote').count()
plt.bar(x=[False,True],height=vote_count['name'])
plt.show()

๋จผ์ € ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์–ธํ•ด์ค€ ํ›„ groupby๋ฅผ ํ†ตํ•ด ๊ฐ value์— ๋Œ€ํ•œ count๋ฅผ ํ•˜๊ณ  barplot๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

๋‹ค์Œ์€ countplot๋ฅผ ์ด์šฉํ•ด ํ•œ๋ฒˆ์— plotํ•ด๋ณด์•˜๋‹ค.

sns.countplot(x= vote_df['vote'])
plt.show()


์ด์ฒ˜๋Ÿผ ๋ฒ”์ฃผํ˜• column์˜ ๋นˆ๋„์ˆ˜๋ฅผ ์‹œ๊ฐํ™” ํ•  ๋•Œ countplot๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

์บฃ๊ทธ๋ฆผ(Cat Plot)

์ˆซ์žํ˜•๋ณ€์ˆ˜์™€ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜์˜ ๊ด€๊ณ„๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.
sns.cat.plot()๋ฅผ ์ด์šฉํ•˜์—ฌ plottingํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๋Š” ์ €๋ฒˆ์— ์‚ฌ์šฉํ–ˆ๋˜ covid๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

s = sns.catplot(x='WHO Region',y='Confirmed',data=covid, kind='strip')#kind๋Š” strip์ด ๋””ํดํŠธ
s.fig.set_size_inches(10,6)#plot์‚ฌ์ด์ฆˆ ์„ค์ •
plt.show()


์—ฌ๊ธฐ์„œ๋Š” ์ˆซ์žํ˜• ๋ณ€์ˆ˜์ธ Confirmed์™€ ๋ฒ”์ฃผํ˜•๋ณ€์ˆ˜์ธ WHO Region๊ณผ์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด์—ˆ๋‹ค.

์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ swarmplot๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋Š”๋ฐ ์ด plot์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ญ‰์ณ์žˆ์–ด์„œ ํ‘œ์‹œ๊ฐ€ ์ž˜ ์•ˆ๋  ๋•Œ ๋ญ‰์ณ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํฉ์–ด๋†”์„œ ์ž˜ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

sns.swarmplot(x="WHO Region", y='Recovered', data=covid)
plt.show()

ํžˆํŠธ๋งต(Heatmap)

๋ฐ์ดํ„ฐ์˜ ํ–‰๋ ฌ์„ ์ƒ‰์ƒ์œผ๋กœ ํ‘œํ˜„ํ•ด์ฃผ๋Š” ๊ทธ๋ž˜ํ”„์ด๋‹ค.
sns.heatmap()์„ ์ด์šฉํ•˜์—ฌ plottingํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” covid๋ฐ์ดํ„ฐ์˜ ์ˆซ์žํ˜• ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ์ƒ๊ด€๊ณ„์ˆ˜๋ฅผ heatmap๋กœ ๋‚˜ํƒ€๋ƒˆ๋‹ค.

sns.heatmap(covid.corr(numeric_only=True))#์—ฌ๊ธฐ์„œ๋Š” numeric_only์˜ต์…˜์„ ์•ˆ์ ์—ˆ์„ ๋•Œ covid๋ฐ์ดํ„ฐ์— ๋ฌธ์ž์—ด์ด ์žˆ์–ด์„œ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค.
plt.show()

๋~!


profile
๊ฒŒ์„๋ €๋˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณต๋ถ€

0๊ฐœ์˜ ๋Œ“๊ธ€