๐๐ 1. ๋ฏธ๊ตญ์ state ๋ณ ๋ฉด์ ๋น ์ธ๊ตฌ์ ๊ตฌํ๊ธฐ(3) - ์๊ฐํ
1. ์ ์ฒ๋ฆฌ ์ข ํฉ
๐ ๋จผ์ ๋ฏธ๋ฆฌ ์ ์ฒ๋ฆฌํ๊ณ ๊ฐ๊ณตํ ๋ฐ์ดํฐ density_2013_tot ์ ๊ฐ์ ธ์ค์.
๐ ์ง๋ ํฌ์คํ
(1),(2) ์์ ๋ง๋ ์ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ํ๋ฒ์ ์ข
ํฉํ๋ค.
import pandas as pd
pop = pd.read_csv("Data/state-population.csv", encoding = 'utf-8-sig')
area = pd.read_csv("Data/state-areas.csv", encoding = 'utf-8-sig')
abb = pd.read_csv("Data/state-abbrevs.csv", encoding = 'utf-8-sig')
pop = pop.dropna()
cols = pop.columns.to_list()
cols[0] = 'abbreviation'
pop.columns = cols
pop_tot = pop[pop['ages'] == 'total']
pop_18 = pop[pop['ages'] == 'under18']
abb_area = pd.merge(area, abb, on = 'state', how = 'outer')
abb_area = abb_area.fillna("PR")
pop_age_tot_final = pd.merge(pop_tot, abb_area, on = 'abbreviation', how = 'outer').dropna()
pop_age_18_final = pd.merge(pop_18, abb_area, on = 'abbreviation', how = 'outer').dropna()
pop_age_tot_final['pop/area'] = pop_age_tot_final['population'] / pop_age_tot_final['area (sq. mi)']
pop_age_18_final['pop/area'] = pop_age_18_final['population'] / pop_age_18_final['area (sq. mi)']
density_2013_tot = pop_age_tot_final[pop_age_tot_final['year']== 2013]
density_2013_tot = density_2013_tot.sort_values('pop/area', ascending=False)
density_2013_tot = density_2013_tot[['abbreviation', 'pop/area']]
density_2013_tot = density_2013_tot.set_index('abbreviation')
density_2013_tot_top10 = density_2013_tot[:10]
density_2013_tot_top10
>>
pop/area
abbreviation
DC 9506.602941
PR 1028.473969
NJ 1020.332378
RI 680.589644
CT 648.643579
MA 634.090384
MD 477.860401
DE 473.771238
NY 360.736613
FL 297.345722
์ง์ญ์ ์ฝ์ด๋ฅผ ๊ฐ์ง abbreviation์ด์ ์ธ๋ฑ์ค๋ก ์ค์ ํด์คฌ๋ค.
2. ์๊ฐํ
2.1. iplot
๐ ๋จผ์ iplot์ผ๋ก ์๊ฐํํด๋ณด์.
๐ iplot ์ ์ํฌํธํด์ค๋ค.
import chart_studio.plotly as py
import cufflinks as cf
cf.go_offline(connected = True)
๐ ์ด์ iplot์ layout์ ์ค์ ํ์.
layout = {
'title' : {
'text' : '<b>Population / Area about total ages in 2013</b>',
'font' : {
'size' : 20
},
'x' : 0.5
},
'xaxis' : {
'showticklabels' : True,
'title': {
'text' : 'Abbreviation',
'font' : {'size' : 15}
}
},
'yaxis' : {
'showticklabels' : True,
'dtick' : 1000,
'title' : {
'text' : 'pop/area',
'font' : {'size' : 15}
}
}
}
๐ ๋จ์ ์์น ๋น๊ต์ด๋ฏ๋ก bar ๊ทธ๋ํ๋ก ์๊ฐํํ๋ค.
density_2013_tot_top10.iplot(kind = 'bar', layout = layout)
2.2. plotly
๐ ์ด๋ฒ์๋ plotly๋ก ์๊ฐํํด๋ณด์.
๐ plotly๋ฅผ ์ํฌํธํด์ค๋ค.
import plotly.graph_objects as go
import plotly.offline as pyo
pyo.init_notebook_mode()
๐ ๊ทธ๋ํ์ ํ ํ๋ฆฟ์ ์ ํด์ฃผ๊ณ ์ถ๋ค๋ฉด plotly์ ํ ํ๋ฆฟ ๋ชฉ๋ก์ ๋ถ๋ฌ์์ ํ์ธํด๋ณด์.
import plotly. io as pio
pio.templates
>>
Templates configuration
-----------------------
Default template: 'plotly'
Available templates:
['ggplot2', 'seaborn', 'simple_white', 'plotly',
'plotly_white', 'plotly_dark', 'presentation', 'xgridoff',
'ygridoff', 'gridon', 'none']
๐ ์ธ๊ตฌ์๊ฐ ์ ์ผ ๋ง์ DC ์ง์ญ์ ๊ทธ๋ํ๋ ์๊น์ ๋ค๋ฅด๊ฒ ํด์ฃผ๊ธฐ ์ํด colors ๋ฆฌ์คํธ๋ฅผ ํ๋ ๋ง๋ค์ด์ค๋ค.
colors = ['#04BFAD',] * len(density_2013_tot_top10)
colors[0] = '#F25C5C'
๐ layout๊ณผ annotation์ ์ค์ ํด์ฃผ๊ณ ๊ทธ๋ํ๋ฅผ ์ถ๋ ฅํ์.
fig = go.Figure()
fig.add_trace(
go.Bar(
x = density_2013_tot_top10.index, y = density_2013_tot_top10['pop/area'],
marker_color = colors
)
)
fig.update_layout(
{
'title' : {
'text' : '<b>Population / Area about total ages in 2013</b>',
'font' : {'size' : 20},
'x' : 0.5
},
'xaxis' : {'title' : {'text' : 'Abbreviation'}, 'showticklabels' : True},
'yaxis' : {'title' : {'text' : 'pop/area'}, 'showticklabels' : True, 'dtick' : 1000},
'template' : 'plotly_white'
}
)
fig.add_annotation({
'x' : "DC",
'y' : 9550,
'text' : 'pop / area in DC',
'showarrow' : True,
'font' : {'size' : 10, 'color' : 'white'},
'align' : 'center',
'arrowhead' : 2,
'arrowsize' : 1,
'arrowwidth' : 2,
'arrowcolor' : '#04BFAD',
'ax' : 20, 'ay' : -50,
'bordercolor' : '#04BFAD',
'borderwidth' : 2,
'borderpad' : 7,
'bgcolor' : '#F25C5C',
'opacity' : 0.9
})
fig.show()
๐ ๋ฐ์ดํฐ ๋ถ์ ๊ฒฐ๊ณผ ์์ฑํด DC์ ๋ฉด์ ๋ณ ์ธ๊ตฌ์๊ฐ ์๋์ ์ผ๋ก ๋ง์์ ํ์ธํ ์ ์๋ค. ์๋ฌด๋๋ 177 ์ ๊ณฑํฌ๋ก๋ฏธํฐ๋ฐ์ ๋์ง ์๋ ๊ทธ๋ ๊ฒ ํฌ์ง ์์ ๊ตฌ์ญ์ ๋ง์ ํ์ ๊ตฌ์ญ์ด ๋ชฐ๋ ค์์ด์ ๊ทธ๋ฐ ๊ฒ ์๋๊น ์ถ๋ค. ๊ทธ ์ธ์ ๋ค๋ฅธ ์ง์ญ๋ค๊ณผ ์์ฑํด์ ์ฐจ์ด๊ฐ ๋๋ฌด ๋ง์ด ๋์ ์ ์ง์ญ๋ค๋ผ๋ฆฌ ๋น๊ตํ๊ธฐ์๋ ๋ถ์์ ์๋ฏธ๊ฐ ํ๋ ค์ง ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ค. ์ ๋ฐ์ดํฐ๋ ๋จ์ง ๋ฏธ๊ตญ ๋ด์์ ๋ฉด์ ๋ณ ์ธ๊ตฌ์๊ฐ ๊ฐ์ฅ ๋ง์ ๋ช๊ฐ์ ์ง์ญ์ ๋ฝ์๋ ๋ฐ์ดํฐ๋ผ๊ณ ์๊ฐํ๋ ๊ฒ์ด ๋ซ๋ค๊ณ ์๊ฐํ๋ค.
๐ ์ง์ ์๋ฌด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ๋ถ์์ ์งํํ ๊ฒ์ ์ฒ์์ธ๋ฐ ํ์คํ ์ง์ ํด๋ณผ๋ ๋ชธ์ ์ต๋๋ค. ์ด์ข๊ฒ๋ ๊ฒฐ์ธก์น๊ฐ ๋ณ๋ก ์๋ ๊นจ๋ํ ๋ฐ์ดํฐ๋ฅผ ๊ณจ๋์ง๋ง ์ฒ์์ด๋ผ ๊ทธ๋ฐ์ง ์ด๊ฒ๋ ์๊ฐ์ด ์กฐ๊ธ ๋ค์๋ค. ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฒฝํํด๋ณด์!!
๐ plotly ๋ฅผ ์ฌ์ฉํ๋ ๋ฐ์ ์ข ๋ ์ต์ํด์ง ํ์๊ฐ ์์ ๊ฒ ๊ฐ๋ค.
๐ Matplotlib๋ ๊ณต๋ถํ๊ธฐ.
Leave a comment