AI를 활용한 재밌는 것들을 개발합니다

2019년 5월 21일 화요일

[ python dash ] 부동산 지역별 인구수 및 세대당 인구 bar chart 구현

이전 시간 참고 :
부동산 지역별 평균연령 bar chart 구현
https://euhyeji.blogspot.com/2019/05/python-dash-bar-chart.html )

부동산 지역별 평당 매매/전세 가격 bar chart 구현
https://euhyeji.blogspot.com/2019/05/python-dash-bar-chart_17.html )

이번 시간에는 지역별 인구수와 세대당 인원수 bar chart를 구현해 보자. 원소스에는 세대수도 포함되어 있으나 세대당 인원수 값이 있어서 본 구현에서는 제외하였다.

1. 원 소스 획득 ( 행정안전부 : http://27.101.213.4/index.jsp# )

주민등록 인구 및 세대현황 -> 통계표 -> 조회기간 월간 -> 구분 모두 체크 -> 검색 클릭 -> 전체읍면동 체크 -> csv 파일 다운로드
다운로드 받은 CSV를 열어보면 아래와 같다.


[행정구역] 컬럼은 이전 '지역별 평균연령'에서 사용했던 전처리 과정을 그대로 할 것이다. 다른 컬럼들은 [총인구수], [세대수], [세대당 인구], [남/녀 인구수], [남여 비율] 이 있다.

행전안전부 사이트 그래프에서 그려보면 아래와 같이 나온다.
총인구수와 세대수가 나오는데 나는 세대수 대신 세대당 인원수를 보여 줄 것이다.

2. dash : 총인구수 bar chart

@app.callback(
    Output('PopulationGraph', 'figure'),
    [Input('category1', 'value'),
     Input('category2', 'value'),
     Input('category3', 'value')])
def update_PopulationGraph(selected_category1, selected_category2, selected_category3):
    return {
        'data': [go.Bar(
            x=population_graph['읍/면/동'],
            y=population_graph['2019년04월_총인구수'],
            text=population_graph['2019년04월_총인구수'],
            textposition = 'auto',
            opacity=0.6,
            marker=dict(
                color='rgb(158,202,225)',
                line=dict(
                    color='rgb(8,48,107)',
                    width=1.5),
            ),
        )],
        'layout': go.Layout(
            xaxis={
            },
            yaxis=dict(
                title = '총인구수',
            ),
            margin={'l': 40, 'b': 100, 't': 10, 'r': 40},
            hovermode='closest',
            height=300
        )
    }

3. dash : 세대당 인원수 bar chart

def update_NewestGraph(selected_category1, selected_category2, selected_category3):
    return {
        'data': [trace_avgage,
                 go.Bar(x=price_graph['읍/면/동'], y=[0], name='y dummy', hoverinfo='none', showlegend=False), 
                 go.Bar(x=population_graph['읍/면/동'],y=[0],yaxis='y2', name='y2 dummy', hoverinfo='none', showlegend=False),
                 trace_popinfamily],
        'layout': go.Layout(
            xaxis={
                #'title': '읍/면/동',                
            },
            yaxis=dict(
                title = '평균연령',
                anchor='x',
                rangemode="tozero",
                range = [25,max(price_graph['2019년04월_평균연령'])]
                #range = [25,70]
            ),
            yaxis2=dict(
                title='세대당 인구수',
                titlefont=dict(
                    color='rgb(148, 103, 189)'
                ),
                tickfont=dict(
                    color='rgb(148, 103, 189)'
                ),
                anchor='x',
                rangemode="tozero",
                overlaying='y',
                side='right',
                range = [1,max(population_graph['2019년04월_세대당 인구'])]
            ),
            margin={'l': 40, 'b': 100, 't': 10, 'r': 40},
            hovermode='closest',
            height=300
        )
    }

4. 구현 결과 : geenieland.na.to

아래와 같이 기존 chart에 총인구수와 세대당 인원수가 추가된 것을 확인 할 수 있다.

댓글 없음:

댓글 쓰기

가장 많이 본 글