[Python] ์ฃผํผํฐ ๋ ธํธ๋ถ์ ์ด์ฉํ ๋ฐ์ดํฐ ์๊ฐํ ๐ (4)
ใ ์ฃผํผํฐ ๋ ธํธ๋ถ์ ํ์ฉํ ๋ฐ์ดํฐ ์๊ฐํ ใ
[ ํ์ด ์ฐจํธ๋ฅผ ํ์ฉํ ๋ฐ์ดํฐ ์๊ฐํ ์์ ]
function | Description | Syntax | Parameters |
matplotlib.pyplot.pie() | - ํ์ด ์ฐจํธ ์์ฑ - *x* ๋ฐฐ์ด์ ์ํ ์ฐจํธ ์์ฑ ๊ฐ ๋ถ์ฑ๊ผด ๋ฉด์ ์ x/sum(x)๋ก ์ฃผ์ด์ง. - ์๊ธฐ๋ x์ถ์ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ๋กฏ |
plt.pie( x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, normalize=None, data=None, ) |
x - ๋ถ์ฑ๊ผด ํฌ๊ธฐ๋ฅผ ์ง์ (1D ์ ์ฌ๋ฐฐ์ด ํ์ ) explode [๊ธฐ๋ณธ๊ฐ : None] - ๋ถ์ฑ๊ผด์ด ํ์ด ์ฐจํธ์ ์ค์ฌ์์ ๋ฒ์ด๋๋ ์ ๋๋ฅผ ์ค์ (์ ์ฌ๋ฐฐ์ด ํ์ ) labels [๊ธฐ๋ณธ๊ฐ : None] - ๊ฐ ๋ถ์ฑ๊ผด์ ๋ ์ด๋ธ์ ์ค์ colors [๊ธฐ๋ณธ๊ฐ : None] - ํ์ด ์ฐจํธ์ ๊ฐ ๋ถ์ฑ๊ผด์ด ์ง๋๋ ์ผ๋ จ์ ์์์ ์ค์ (์ ์ฌ๋ฐฐ์ด ํ์ ) autopct [๊ธฐ๋ณธ๊ฐ : None] - ๋ถ์ฑ๊ผด ๋ ์ด๋ธ์ด ํ์๋ ํ์ ์ ํ์์ ์ง์ (None || str || callable ํ์ ) startangle [๊ธฐ๋ณธ๊ฐ : 0] - ํ์ด์ ์์ ๋ถ๋ถ์ด ํ์ ํ๋ x์ถ ๊ฐ๋ ์ค์ (๋ฐ์๊ณ ๋ฐฉํฅ ์ด๋) |
โ ์ง์ญ๋ณ ๋จ/๋ ์ธ๊ตฌ ๋ถํฌ ๋ฐ์ดํฐ๋ฅผ ํ์ด์ฐจํธ๋ก ์๊ฐํ
# ํ์ด ์ฐจํธ ์ฌ์ฉ ์์
import matplotlib.pyplot as plt
size = [2441, 2312, 1031, 1233] # ํ์ด ์ฐจํธ์ ์๊ฐํํ ๋ฆฌ์คํธ ์์ฑ
color = ['darkmagenta', 'deeppink', 'hotpink', 'pink'] # ๊ฐ ๋ ์ด๋ธ์ ์์ ์ค์
label = ['Aํ','Bํ','ABํ', 'Oํ'] # ๋ถ์ฑ๊ผด ์์ญ์ ์ด๋ฆ ์ค์
plt.axis('equal') # plt.axis() : ์ถ ์์ฑ ์ค์ , *equal* : ๋์ผ ์ค์ผ์ผ๋ง ์ค์ (์ํ ์ํ ์ ์ง)
plt.rc('font', family = 'Malgun Gothic') # ์ฐจํธ ํฐํธ ์ค์
plt.pie(size, labels = label, autopct = '%.1f%%', colors=color, explode = (0,0,0.1,0))
plt.legend() # ๋ฒ๋ก ํ์
plt.show()
โก matplotlib ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ mcolors ์์ ์ ๋ณด ํ์ธ ์์
# matplotlib ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ mcolors์ ์์ ์ ๋ณด ํ์ธ ์์
import matplotlib.pyplot as plt
from matplotlib import colors as mcolors
colors = dict(mcolors.BASE_COLORS, **mcolors.CSS4_COLORS)
# Sort colors by hue, saturation, value and name.
by_hsv = sorted((tuple(mcolors.rgb_to_hsv(mcolors.to_rgba(color)[:3])), name)
for name, color in colors.items())
sorted_names = [name for hsv, name in by_hsv]
n = len(sorted_names)
ncols = 4
nrows = n // ncols
fig, ax = plt.subplots(figsize=(9, 8), dpi = 300)
# Get height and width
X, Y = fig.get_dpi() * fig.get_size_inches()
h = Y / (nrows + 1)
w = X / ncols
for i, name in enumerate(sorted_names):
row = i % nrows
col = i // nrows
y = Y - (row * h) - h
xi_line = w * (col + 0.05)
xf_line = w * (col + 0.25)
xi_text = w * (col + 0.3)
ax.text(xi_text, y, name, fontsize=(10),
horizontalalignment='left',
verticalalignment='center')
ax.hlines(y + h * 0.1, xi_line, xf_line,
color=colors[name], linewidth=(6))
ax.set_xlim(0, X)
ax.set_ylim(0, Y)
ax.set_axis_off()
fig.subplots_adjust(left=0, right=1,
top=1, bottom=0,
hspace=0, wspace=0)
plt.show()
โข ํน์ ์ง์ญ์ ๋จ/๋ ์ฑ๋น ํ์ด ์ฐจํธ๋ฅผ ํตํ ์๊ฐํ ์์
# ์ง์ญ์ ์ด๋ฆ์ ์ ๋ฌ๋ฐ์ ๋จ๋
์ ์ฑ๋น๋ฅผ pie chart๋ก ์๊ฐํํ๋ ์์
import csv
import matplotlib.pyplot as plt
f = open('gender.csv')
data = csv.reader(f)
size = []
name = input('์ฐพ๊ณ ์ถ์ ์ง์ญ์ ์ด๋ฆ์ ์๋ ค์ฃผ์ธ์ : ')
for row in data :
if name in row[0] :
m = 0 # ์ง์ญ๋ณ ์ด ๋จ์ฑ ์ธ๊ตฌ๋ฅผ ์ ์ฅํ ๋ณ์
f = 0 # ์ง์ญ๋ณ ์ด ์ฌ์ฑ ์ธ๊ตฌ๋ฅผ ์ ์ฅํ ๋ณ์
for i in range(101) :
m += int(row[i+3]) # ์ง์ญ๋ณ ๋จ์ฑ์ 0~100์ธ ์ธ๊ตฌ ๋ฐ์ดํฐ์ ํฉ์ m์ ์ ์ฅ
f += int(row[i+106]) # ์ง์ญ๋ณ ์ฌ์ฑ์ 0~100์ธ ์ธ๊ตฌ ๋ฐ์ดํฐ์ ํฉ์ f์ ์ ์ฅ
break
# ํน์ ์ง์ญ์ ๋จ์ฑ ์ด ์ธ๊ตฌ๋ฅผ size[0], ์ฌ์ฑ ์ด ์ธ๊ตฌ๋ฅผ size[1] ๋ฆฌ์คํธ์ ์ฝ์
size.append(m)
size.append(f)
plt.rc('font', family ='Malgun Gothic') # ํฐํธ ์ง์
color = ['crimson', 'darkcyan'] # ์์ ์ง์
plt.axis('equal') # ์ถ ์ง์
# ํ์ด ์ฐจํธ ์์ ๋ถ๋ถ์ด ํ์ ํ๋ ์ถ ์ง์ (๋ฐ์๊ณ ๋ฐฉํฅ ์ด๋) [default : 0(3์ ๋ฐฉํฅ)]
plt.pie(size, labels = ['๋จ','์ฌ'], autopct ='%.1f%%', colors = color, startangle = 90)
plt.title(name + ' ์ง์ญ์ ๋จ๋
์ฑ๋ณ ๋น์จ')
plt.show()
############ [์คํ ๊ฒฐ๊ณผ] ############
์ฐพ๊ณ ์ถ์ ์ง์ญ์ ์ด๋ฆ์ ์๋ ค์ฃผ์ธ์ : ์ ์ฃผํน๋ณ์์น๋
โฃ ๊บพ์์ ๊ทธ๋ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ถ ์์ ๋น๊ต ์์
# ํน์ ์ง์ญ์ ์ฐ๋ น๋ณ ๋จ/๋
์ฑ๋ณ ๋น์จ ๊บพ์์ ๊ทธ๋ํ๋ฅผ ํ์ฉํด ์๊ฐํ
import csv
import matplotlib.pyplot as plt
f = open('gender.csv')
data = csv.reader(f)
m = []
f = []
name = input('๊ถ๊ธํ ๋๋ค๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ : ')
for row in data :
if name in row[0] :
for i in range(3,104) :
m.append(int(row[i]))
f.append(int(row[i+103]))
break
plt.style.use('seaborn')
plt.rc('font', family = 'Malgun Gothic')
plt.plot(m, label = 'Male')
plt.plot(f, label = 'Female')
plt.legend()
plt.title(name + ' ์ง์ญ์ ๋จ๋
์ฑ๋ณ ๋น์จ')
#plt.figure(figsize=(6, 8), dpi=300)
plt.show()
############ [์คํ ๊ฒฐ๊ณผ] ############
๊ถ๊ธํ ๋๋ค๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ : ์ ์ฃผํน๋ณ์์น๋
โค ๋ง๋ ๊ทธ๋ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ถ ์์ ๋น๊ต ์์
# ์ง์ญ๋ณ ๋จ๋
์ธ๊ตฌ ์ฐจ์ด ์๊ฐํ๋ฅผ ๋ง๋ ๊ทธ๋ํ๋ฅผ ํ์ฉ
import csv
import matplotlib.pyplot as plt
f = open('gender.csv')
data = csv.reader(f)
result = []
name = input('๊ถ๊ธํ ๋๋ค๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ : ')
for row in data :
if name in row[0] :
for i in range(3,104) :
# ๊ฐ ์ฐ๋ น๋ณ ๋จ์ฑ ๋ฐ์ดํฐ - ์ฌ์ฑ ๋ฐ์ดํฐ์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฆฌ์คํธ์ ์ ์ฅํจ์ผ๋ก
# ์์ ๊ฐ : ์ฌ์ฑ์ ๋นํด ๋จ์ฑ์ ์ธ๊ตฌ๊ฐ ์ ๋๊ฐ ๋งํผ ๋ง๋ค๋ ๊ฒฐ๊ณผ ๋์ถ,
# ์์ ๊ฐ : ๋จ์ฑ์ ๋นํด ์ฌ์ฑ์ ์ธ๊ตฌ๊ฐ ์ ๋๊ฐ ๋งํผ ๋ง๋ค๋ ๊ฒฐ๊ณผ ๋์ถ
result.append(int(row[i]) - int(row[i+103]))
break
plt.rcParams['axes.unicode_minus'] = False
plt.rc('font', family = 'Malgun Gothic')
plt.title(name + ' ์ง์ญ์ ๋จ๋
์ฑ๋ณ ๋น์จ')
plt.bar(range(101), result)
plt.show()
############ [์คํ ๊ฒฐ๊ณผ] ############
๊ถ๊ธํ ๋๋ค๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ : ์ ์ฃผํน๋ณ์์น๋
์ด ์ธ๊ตฌ์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ ๋ ์๊ฐ์ ์ผ๋ก ํ์ด์ฐจํธ๊ฐ ํธ๋ฆฌํ์ง๋ง
๋จ/๋ ์ฐ๋ น๋ณ ๋ฐ์ดํฐ์ ๊ฐ์ ์ธ๋ถํ๋ ์งํ๋ฅผ ๋น๊ตํ ์ ๊บพ์์ ๊ทธ๋ํ, ๋ง๋ ๊ทธ๋ํ ๋ฑ์ด ์ฉ์ดํจ
[ ์ฐ์ ๋ ์ฐจํธ๋ฅผ ํ์ฉํ ๋ฐ์ดํฐ ์๊ฐํ ์์ ]
function | Description | Syntax | Parameters |
matplot.lib.pyplot.scatter() | - ๋ค์ํ ๋ง์ปค ํฌ๊ธฐ ๋ฐ ์์์ ๊ฐ์ง y ๋ x์ ์ฐ์ ๋ ๊ทธ๋ํ ์์ฑ - ๋ฐ์ดํฐ๊ฐ ์๊ด ๊ด๊ณ ํ์ ์ ์ฉ์ด - ์ฐ์ ๋ ๊ทธ๋ํ์ ๋ง์ปค ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ฐจํธ๋ฅผ ๋ฒ๋ธ ์ฐจํธ๋ผ ํจ |
plt.scatter( x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs, ) |
x, y - ๋ฐ์ดํฐ ์์น ํ์ (์ค์ || ์ ์ฌ๋ฐฐ์ด ํ์ ) s [๊ธฐ๋ณธ๊ฐ : None] - ๋ง์ปค์ ํฌ๊ธฐ ์ง์ (์ค์ || ์ ์ฌ๋ฐฐ์ด ํ์ ) c [๊ธฐ๋ณธ๊ฐ : None] - ๋ง์ปค ์์ ์ง์ (์ ์ฌ๋ฐฐ์ด || ์์๋ชฉ๋ก) marker - ๋ง์ปค ์คํ์ผ ์ง์ cmap [๊ธฐ๋ณธ๊ฐ : rc:`image.cmap`] - colormap ์ธ์คํด์ค ๋๋ ๋ฑ๋ก๋ colormap ์ด๋ฆ์ ํตํด ์ค์ - c๊ฐ ์ค์ํ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ๊ฐ๋ฅ (str || `~matplotlib.colors.Colormap` ํ์ ) alpha [๊ธฐ๋ณธ๊ฐ : 0] - ๋ง์ปค์ ํฌ๋ช ๋ ์ง์ |
โ ์ฐ์ ๋ ๊ทธ๋ํ ์ฌ์ฉ ์์
import matplotlib.pyplot as plt
plt.style.use('ggplot')
# x, y : ๋ฐ์ดํฐ ์์น ํ์
x = [1, 2, 3, 4]
y = [10, 30, 20, 40]
# s : ๋ง์ปค์ ํฌ๊ธฐ ์ง์ (points**2)
size = [100, 300, 200, 400]
# c : ๋ง์ปค์ ์์ ์ง์
colors = ['red','blue','green','gold']
plt.scatter(x, y, s = size, c = colors)
plt.colorbar()
plt.show()
โก ํน์ ์ง์ญ์ ๋ํ ์ธ๊ตฌ ์ฐํฌ๋ ์๊ฐํ ์์ (1)
import csv
import matplotlib.pyplot as plt
f = open('gender.csv')
data = csv.reader(f)
m = []
f = []
name = input('๊ถ๊ธํ ๋๋ค๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ : ')
for row in data :
if name in row[0] :
for i in range(3,104) :
m.append(int(row[i]))
f.append(int(row[i+103]))
break
plt.style.use('ggplot')
# ๋ง์ปค์ ์์ ๋ฒ์ ์ง์ ํ colormap์ ์ ์ฉ ์ํค๋ฉด
# ์ฐ๋ น๋ณ ์ธ๊ตฌ ๋ถํฌ ์ ๋๋ฅผ ์ธก์ ํ๊ธฐ ์ฉ์ด
plt.scatter(x=m, y=f, c=range(101), alpha=0.7, cmap='Accent', marker='x')
plt.colorbar()
# ์ถ์ธ์ ์ ๊ธฐ์ค์ผ๋ก y์ถ์ ๊ฐ๊น์ธ ์๋ก ์ฌ์ฑ์ ์ธ๊ตฌ๊ฐ ๋ง๊ณ ,
# x์ถ์ ๊ฐ๊น์ธ์๋ก ๋จ์ฑ์ ์ธ๊ตฌ๊ฐ ๋ง์ ๊ฒ์ ํ์ธ ๊ฐ๋ฅ
plt.plot(range(max(m)), range(max(m)), color='black', alpha=0.2) # ์ถ์ธ์ (๊ธฐ์ค์ด ๋๋ ์ ) ์ถ๊ฐ
plt.show()
############ [์คํ ๊ฒฐ๊ณผ] ############
๊ถ๊ธํ ๋๋ค๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ : ์ ์ฃผํน๋ณ์์น๋
โข ํน์ ์ง์ญ์ ๋ํ ์ธ๊ตฌ ์ฐํฌ๋ ์๊ฐํ ์์ (2)
import csv
import math
import matplotlib.pyplot as plt
f = open('gender.csv')
data = csv.reader(f)
m = []
f = []
size = []
name = input('๊ถ๊ธํ ๋๋ค๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ : ')
for row in data :
if name in row[0] :
for i in range(3,104) :
m.append(int(row[i]))
f.append(int(row[i+103]))
size.append(math.sqrt(int(row[i]) + int(row[i+103])))
break
plt.style.use('ggplot')
plt.rc('font',family='Malgun Gothic')
plt.figure(figsize = (10,5), dpi=300)
plt.title(name+' ์ง์ญ์ ์ฑ๋ณ ์ธ๊ตฌ ๊ทธ๋ํ')
plt.scatter(m, f, s = size, c = range(101), alpha=0.5, cmap='jet')
plt.colorbar()
plt.plot(range(max(m)),range(max(m)), 'g')
plt.xlabel('๋จ์ฑ ์ธ๊ตฌ ์')
plt.ylabel('์ฌ์ฑ ์ธ๊ตฌ ์')
plt.show()
############ [์คํ ๊ฒฐ๊ณผ] ############
๊ถ๊ธํ ๋๋ค๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ : ์ ์ฃผํน๋ณ์์น๋