TOP
class="layout-aside-left paging-number">
본문 바로가기
데이터분석 만능열쇠 [파이썬]/<파이썬 데이터 분석>

[파이썬] 우리나라 인구 소멸 위기 지역 분석 - 4

by 기록자_Recordian 2024. 5. 1.
728x90
반응형
시작에 앞서
해당 내용은 <파이썬으로 데이터 주무르기> -민형기 저, BJPUBLIC 출판사 의 내용을 토대로 작성되었습니다.
보다 자세한 내용은 해당 교재를 확인하여 주시기 바랍니다.

이전 시간 분석
 

[파이썬] 우리나라 인구 소멸 위기 지역 분석 - 3

시작에 앞서해당 내용은 -민형기 저, BJPUBLIC 출판사 의 내용을 토대로 작성되었습니다. 보다 자세한 내용은 해당 교재를 확인하여 주시기 바랍니다.이전 시간 분석 [파이썬] 우리나라 인구 소멸

puppy-foot-it.tistory.com


인구소멸위기지역 확인

 

전 시간에 그렸던 인구수합계에서 bool 형이었던 것을 1과 0으로 바꾼다.

pop['소멸위기지역'] = [1 if con else 0 for con in pop['소멸위기지역']]
drawKorea('소멸위기지역', pop, 'Reds')

소멸위기지역 표시 코드
인구 소멸 위기 지역 그리기

 


인구 현황에서 여성 인구 비율 확인하기

 

기존에 작성했던 drawKorea 함수 내용 중 일부를 변경해야 하는데, 그 이유는 표현하고자 하는 데이터에 음(-)의 값이 있는지 여부에 따라 일부 설정이 바뀌어야 하기 때문.

def drawKorea(targetData, blockedMap, cmapname):
    gamma = 0.75

    whitelabelmin = 20.

    datalabel = targetData

    tmp_max = max([ np.abs(min(blockedMap[targetData])),
                   np.abs(max(blockedMap[targetData]))])

    vmin, vmax = -tmp_max, tmp_max

    mapdata = blockedMap.pivot_table(index='y', columns='x', values=targetData)
    masked_mapdata = np.ma.masked_where(np.isnan(mapdata), mapdata)
    
    plt.figure(figsize=(9, 11))
    plt.pcolor(masked_mapdata, vmin=vmin, vmax=vmax, cmap=cmapname, 
               edgecolor='#aaaaaa', linewidth=0.5)

    # 지역 이름 표시
    for idx, row in blockedMap.iterrows():
        # 광역시는 구 이름이 겹치는 경우가 많아서 시단위 이름도 같이 표시한다. 
        #(중구, 서구)
        if len(row['ID'].split())==2:
            dispname = '{}\n{}'.format(row['ID'].split()[0], row['ID'].split()[1])
        elif row['ID'][:2]=='고성':
            dispname = '고성'
        else:
            dispname = row['ID']

        # 서대문구, 서귀포시 같이 이름이 3자 이상인 경우에 작은 글자로 표시한다.
        if len(dispname.splitlines()[-1]) >= 3:
            fontsize, linespacing = 10.0, 1.1
        else:
            fontsize, linespacing = 11, 1.

        annocolor = 'white' if np.abs(row[targetData]) > whitelabelmin else 'black'
        plt.annotate(dispname, (row['x']+0.5, row['y']+0.5), weight='bold',
                     fontsize=fontsize, ha='center', va='center', color=annocolor,
                     linespacing=linespacing)

    # 시도 경계 그린다.
    for path in BORDER_LINES:
        ys, xs = zip(*path)
        plt.plot(xs, ys, c='black', lw=2)

    plt.gca().invert_yaxis()

    plt.axis('off')

    cb = plt.colorbar(shrink=.1, aspect=10)
    cb.set_label(datalabel)

    plt.tight_layout()
    plt.show()

 

그런 다음, 여성 인구수와 합계를 나눈 다음 0.5를 빼는 작업을 하고 (0이면 여성 인구수가 50%)

▶ drawKorea에 색상 팔레트를 지정할 때 RdBu 같은 설정을 사용하면 0을 기준으로 좌우가 다른 색상을 갖도록 할 수 있음

 

pop['여성비'] = (pop['인구수여자']/pop['인구수합계'] - 0.5)*100
drawKorea('여성비', pop, 'RdBu')

여성비율 구하는 코드
여성비율 표시 지도

파란색으로 갈수록 여성비가 높은 것이고, 빨간색으로 갈수록 여성비가 낮은 것

 

그러나, 이 데이터는 전체 여성 인구를 대상으로 한 것이기 때문에 소멸위기지역의 기준인 20-39세 여성 데이터로 변경하여야 한다.

pop['2030여성비'] = (pop['20-39세여자']/pop['20-39세합계'] - 0.5)*100
drawKorea('2030여성비', pop, 'RdBu')

20-30대 여성 인구비율 코드
대한민국 20-30대 여성 인구 비율


Folium에서 인구 소멸 위기 지역 표현하기

 

원래 pop 데이터에서 ID 컬럼을 index로 설정

pop_folium = pop.set_index('ID')
pop_folium.head()

id를 index로 설정

 

Folium과 json 을 import

import folium
import json
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)

 

folium, json import

 

인구수합계 표현하기

geo_path = '../data/05. skorea_municipalities_geo_simple.json'
geo_data = json.load(open(geo_path, encoding='utf-8'))

map = folium.Map(location=[36.2002, 127.054], zoom_start=7)
folium.Choropleth(geo_data = geo_data,
               data = pop_folium['인구수합계'],
               columns = [pop_folium.index, pop_folium['인구수합계']],
               fill_color = 'YlGnBu', #PuRd, YlGnBu
               key_on = 'feature.id').add_to(map)
map

 

인구수합계 folium
인구수합계 folium 시각화
수도권에 인구가 밀집되어 있는 것을 알 수 있다

 

인구 소멸 위기 지역 표현하기

map = folium.Map(location=[36.2002, 127.054], zoom_start=7)
folium.Choropleth(geo_data = geo_data,
               data = pop_folium['소멸위기지역'],
               columns = [pop_folium.index, pop_folium['소멸위기지역']],
               fill_color = 'PuRd', #PuRd, YlGnBu
               key_on = 'feature.id').add_to(map)
map

 

인구 소멸 위기 지역 folium 코드
인구 소멸 위기 지역 folium 시각화
수도권을 제외한 대다수의 도시가 인구 소멸 위기 지역임을 알 수 있다


마무리. CSV 저장하기
draw_korea_raw.to_csv("../data/05. draw_korea.csv", encoding='utf-8', sep='.')

전체 코드 및 csv 파일

 

population-checkpoint.ipynb
2.61MB
05. draw_korea.csv
0.00MB

728x90
반응형