
File name
Commit message
Commit date
File name
Commit message
Commit date
import pandas as pd
import numpy as np
import plotly.graph_objects as go
import plotly.express as px
import plotly.io as pio
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
def age_category(age, stepsize=10):
return np.floor_divide(age, stepsize)*stepsize
def weighted_count(df, values, target, weights):
condition = (df[values] == target)
return sum(df[weights] * condition)
def check_incomesource
df = pd.read_csv("data/MDIS/인구주택총조사2020_영천시_1인가구.csv", index_col=False)
test = df.loc[:,'만나이'].apply(age_category)
x_axis_key = '혼인상태'
df['연령대'] = test
df = df.fillna(0)
keys = df.columns
c23 = df.loc[(df['사회활동-없음'] == 1)]
c3 = c23.loc[(c23['산업대분류'] == 'Z') & (c23['통근통학여부'] == 3)]
c2 = c23.loc[(c23['산업대분류'] != 'Z') | (c23['통근통학여부'] != 3)]
c1 = df.loc[(df['사회활동-없음'] != 1)]
fig = go.Figure()
df.loc[:,"생활비 원천-본인의 일":"생활비 원천-기타"]
colorscheme = ['rgb(13,79,217)', 'rgb(6,136,109)', 'rgb(40,199,7)', 'rgb(245,249,0)', 'rgb(253,151,0)', 'rgb(255,28,0)',
'rgb(255,0,166)', 'rgb(196,99,235)', 'rgb(244,244,495)', 'rgb(212,118,78)']
xaxis_text = ['미취학','초등','중등','고등','2,3년제 대학','4년제 대학','대학원 석사','대학원 박사']
t1group_text = ['전체','대조군','무연고, 통근·통학자','무직, 무연고']
t2group_text = ['읍·면(邑·面)', '동(洞)']
t3group_text = ['미혼', '혼인중', '사별', '이혼']
ymax_ranges = [[0,8000],[0,5000],[0,5000],[0,5000]]
# ymax_ranges = [[0,100],[0,70],[0,70],[0,70]]
for i, data in enumerate([df, c1,c2,c3]):
for em, emd in enumerate([[1,2],[3,3]]):
figdata = data.loc[(data['동읍면부구분코드'] == emd[0]) | (data['동읍면부구분코드'] == emd[1])]
print(data.loc[:,'동읍면부구분코드'])
for j, age in enumerate(sorted(data.loc[:,'연령대'].unique())):
stack_fig = figdata.loc[(data['연령대'] == age)]
weighted_counts = [None] * len(df.loc[:, x_axis_key].unique())
for k ,target in enumerate(sorted(df.loc[:, x_axis_key].unique())):
weighted_counts[k] = weighted_count(stack_fig, x_axis_key,target,'인구가중값') * 1.5610789760036654
fig.add_trace(
go.Bar(
x= t3group_text,
y= weighted_counts ,
# y=stack_fig.loc[:,'교육정도'].value_counts().reindex(df.loc[:,'교육정도'].unique(), fill_value=0
# ).sort_index(),
# text= ['미취학','초등','중등','고등','2,3년제 대학','4년제 대학','대학원 석사','대학원 박사'],
# textfont=dict(
# size=50
# ),
marker_color=colorscheme[j],
name= f'{age}대'
)
)
fig.update_layout(barmode='stack')
fig.update_layout(
title=f'영천시 1인가구 <br>'
f'{t1group_text[i]} {t2group_text[em]}부<br>'
f'연령별 학력별<br>'
f'2020인구 총조사 2%',
font=dict(
size=30
),
margin = dict(
t=400
),
legend = dict(
bgcolor='rgba(88,212,3,0.1)',
itemwidth=30,
orientation='v',
xanchor="right",
yanchor="top",
x=1, y=1,
traceorder='reversed'
),
)
fig.update_yaxes(
# range= ymax_ranges[i],
)
# fig.update_layout(xaxis={'categoryorder':'array',
# 'categoryarray':['10대','20대','30대','40대','50대','60대','70대','80대','90대','100대']})
fig.show()
pio.write_image(fig,
f"figure/영천시_1인가구_연령별_혼인상태별/영천시 1인가구 {t1group_text[i]} {t2group_text[em]}부 연령별 혼인상태별.png"
, format="png", scale=2, width=800, height=2000)
fig = go.Figure()