프로젝트3 : 웹데이터 분석 4일차(~12)

박영선·2023년 5월 15일
0

카르토그램으로 인구현황 시각화 하기1

필요데이터 가져오기

draw_korea_raw = pd.read_excel("../data/07_draw_korea_raw.xlsx")
draw_korea_raw

draw_korea_raw_stacked = pd.DataFrame(draw_korea_raw.stack())
draw_korea_raw_stacked

draw_korea_raw_stacked.reset_index(inplace=True)
draw_korea_raw_stacked

# 컬럼명 변경
draw_korea_raw_stacked.rename(columns={"level_0":"y", "level_1": "x",0:"ID"},
                             inplace = True)
draw_korea_raw_stacked

엑셀 경계선 입력

BORDER_LINES=[
    [(5,1),(5,2),(7,2),(7,3),(11,3),(11,0)], #인천
    [(5,4),(5,5),(2,5),(2,7),(4,7),(4,9),(7,9),(7,7),(9,7),(9,5),(10,5),(10,4),(5,4)], # 서울
    [(1,7),(1,8),(3,8),(3,10),(10,10),(10,7),(12,7),(12,6),(11,6),(11,5),(12,5),(11,4),(11,3)], # 경기도
    [(8,10),(8,11),(6,11),(6,12)], # 강원도
    [(12,5),(13,5),(13,4),(14,4),(14,5),(15,5),(15,4),(16,4),(16,2)], # 충북
    [(16,4),(17,4),(17,5),(16,5),(16,6),(19,6),(19,5),(20,5),(20,4),(21,4),(21,3),(19,3),(19,1)], # 전북 
    [(13,5),(13,6),(16,6),(13,5),(14,5)], # 대전, 세종
    [(21,2),(21,3),(22,3),(22,4),(24,4),(24,2),(21,2)], # 광주
    [(20,5),(21,5),(21,6),(23,6)], # 전남
    [(10,8),(12,8),(12,9),(14,9),(14,8),(16,8),(16,6)], # 충북
    [(14,9),(14,11),(14,12),(13,1),(13,13)], # 경북
    [(15,8),(17,8),(17,10),(16,10),(16,11),(14,11)], # 대구
    [(17,9),(18,9),(18,8),(19,8),(19,9),(20,9),(20,10),(21,10)], # 부산
    [(16,11),(16,13)],
    [(27,5),(27,6),(25,6)]
]

카르토그램으로 인구현황 시각화 하기2

def plot_text_simple(draw_korea):
    for idx, row in draw_korea.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"]
        if len(dispname.splitlines()[-1]) >=3:
            fontsize, linespacing = 9.5, 1.5
        else:
            fontsize, linespacing = 11, 1.2
        
            
        plt.annotate(
            dispname,(row["x"] + 0.5, row["y"]+0.5),
            weight="bold",
            fontsize = fontsize,
            linespacing = linespacing,
            ha = "center", # 수평정렬
            va = "center" # 수직정렬
        )
def simpleDraw (draw_korea):
    plt.figure(figsize=(8,11))
    plot_text_simple(draw_korea)
    
    for path in BORDER_LINES:
        ys, xs = zip(*path)
        plt.plot(xs,ys,c="black",lw=1.5)
        
    plt.gca().invert_yaxis()
    plt.axis("off")
    plt.tight_layout()
    plt.show()

카르토그램으로 인구현황 시각화 하기3

머지를 위한 검증작업

머지

카르토그램으로 인구현황 시각화 하기4

그려놓은 지도에 색상 표기 하기

카르토그램으로 인구현황 시각화 하기5(folium 지도시각화)

데이터 저장

draw_korea.to_csv("../data/07_draw_korea.csv",encoding="utf-8",sep=",")
profile
데이터분석 공부 시작했습니다

0개의 댓글