ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2월 1주차-2/6(4)]📊 파이썬을 활용한 인구 데이터 시각화(파이차트&산점도)
    Why Not SW CAMP 5기/수업 기록 2025. 2. 6. 17:02

    데이터 분석을 하다 보면, 데이터를 보다 직관적으로 이해하기 위해 시각화를 활용하는 경우가 많습니다. 이번 포스팅에서는 파이썬의 matplotlib 라이브러리를 활용해 인구 데이터를 시각화하는 다양한 방법을 정리해보겠습니다.


    1️⃣ 인구 구조 시각화 📈

    인구 구조 데이터를 분석하고 시각화하는 과정은 다음과 같습니다.

    ✅ 1-1. 인구 데이터 불러오기

    먼저, CSV 파일을 읽고 데이터를 가져오는 코드입니다.

    import csv
    import matplotlib.pyplot as plt
    
    f = open('./data/age.csv')  # 인구 데이터 파일 열기
    data = csv.reader(f)
    
    result = []
    
    name = input('인구 구조가 알고 싶은 지역 이름을 입력해주세요: ')
    
    for row in data:
        if name in row[0]:  # 입력한 지역명이 포함된 데이터 찾기
            for i in row[3:]:  # 0~100세 인구수 추출
                result.append(int(i))
    
    plt.style.use('ggplot')
    plt.title(name + ' 지역의 인구 구조')
    plt.plot(result)  # 선 그래프 출력
    plt.show()
    
    plt.bar(range(101), result)  # 막대 그래프 출력
    plt.show()
    
    plt.barh(range(101), result)  # 가로 막대 그래프 출력
    plt.show()
    

    🔎 📌 분석 포인트

    ✅ 특정 지역의 연령별 인구 구조를 선 그래프, 막대 그래프, 가로 막대 그래프로 시각화
    ✅ input()을 활용해 원하는 지역명을 입력하면 해당 데이터만 출력
    ✅ plt.plot(), plt.bar(), plt.barh() 등을 활용해 여러 방식으로 표현


    2️⃣ 남녀 성별 인구 분포 분석 👫

    지역별 남녀 성비를 그래프로 표현해볼까요?

    ✅ 2-1. 남녀 성비 비교 (막대 그래프)

    import csv
    import matplotlib.pyplot as plt
    
    f = open('./data/gender.csv')
    data = csv.reader(f)
    
    m = []  # 남성 인구
    f = []  # 여성 인구
    
    name = input('남녀 분포가 알고 싶은 지역 이름을 입력해주세요: ')
    
    for row in data:
        if name in row[0]:
            for i in row[3:104]:  # 남성 데이터 (0~100세)
                m.append(-int(i))  # 왼쪽으로 출력하기 위해 음수로 변환
            for i in row[106:]:  # 여성 데이터 (0~100세)
                f.append(int(i))
    
    plt.style.use('ggplot')
    plt.figure(figsize=(10,5), dpi=300)
    plt.rc('font', family='Malgun Gothic')  
    plt.rcParams['axes.unicode_minus'] = False
    plt.title(name + ' 지역의 인구 구조')
    
    plt.barh(range(101), m, label='Male')  # 남성 데이터
    plt.barh(range(101), f, label='Female')  # 여성 데이터
    plt.legend()
    plt.show()
    

    ✅ 2-2. 남녀 성비 비교 (선 그래프)

    import csv
    import matplotlib.pyplot as plt
    
    f = open('./data/gender.csv')
    data = csv.reader(f)
    
    m = []
    f = []
    
    name = input('궁금한 지역을 입력해주세요: ')
    
    for row in data:
        if name in row[0]:
            for i in range(3, 104):
                m.append(int(row[i]))  # 남성 데이터
                f.append(int(row[i + 103]))  # 여성 데이터
            break
    
    plt.plot(m, label='Male')  # 남성 선 그래프
    plt.plot(f, label='Female')  # 여성 선 그래프
    plt.legend()
    plt.show()
    

    🔎 📌 분석 포인트

    ✅ 남성 인구는 음수로 변환하여 가로 막대 그래프에서 왼쪽으로 출력
    ✅ plt.plot()을 사용하여 선 그래프로 표현 가능
    ✅ 지역별 남녀 성비 차이를 직관적으로 확인 가능


    3️⃣ 파이 차트 🥧

    파이 차트를 활용하면 전체 대비 특정 데이터의 비율을 쉽게 확인할 수 있습니다.

    ✅ 3-1. 기본 파이 차트

    import matplotlib.pyplot as plt
    
    plt.rc('font', family='Malgun Gothic')  # 한글 폰트 설정
    size = [2441, 2312, 1031, 1233]  # 데이터 값
    label = ['A형', 'B형', 'AB형', 'O형']  # 라벨 설정
    color = ['darkmagenta', 'pink', 'deeppink', 'hotpink']
    
    plt.pie(size, 
            labels=label, 
            colors=color, 
            autopct='%.1f%%', 
            explode=(0, 0, 0.1, 0))  # AB형만 강조
    plt.axis('equal')  # 원형 유지
    plt.legend()
    plt.show()
    

    ✅ 3-2. 지역별 남녀 성비 파이 차트

    import csv
    import matplotlib.pyplot as plt
    
    f = open('./data/gender.csv')
    data = csv.reader(f)
    
    name = input('찾고 싶은 지역 이름을 입력해주세요: ')
    
    size = []  
    
    for row in data:
        if name in row[0]:
            m = sum(map(int, row[3:104]))  # 남성 인구 총합
            f = sum(map(int, row[106:]))  # 여성 인구 총합
            size = [m, f]
            break
    
    plt.rc('font', family='Malgun Gothic')
    label = ['Male', 'Female']
    color = ['crimson', 'darkcyan']
    
    plt.pie(size, 
            labels=label, 
            colors=color, 
            autopct='%.1f%%', 
            startangle=90)  # 90도 회전
    plt.title(name + ' 지역의 남녀 성비')
    plt.legend()
    plt.show()
    

    🔎 📌 분석 포인트

    ✅ 전체 데이터 중 특정 데이터의 비율을 표현
    ✅ explode 옵션을 활용해 특정 데이터 강조 가능
    ✅ autopct='%.1f%%'을 사용하여 백분율 표시


    4️⃣ 산점도 (Scatter Plot) 📍

    산점도는 두 개의 데이터를 비교할 때 유용합니다.

    ✅ 4-1. 기본 산점도

    import matplotlib.pyplot as plt
    
    plt.style.use('ggplot')
    x = [1, 2, 3, 4]
    y = [10, 20, 30, 40]
    size = [100, 25, 200, 180]
    
    plt.scatter(x, y, s=size, c=range(4), cmap='jet')
    plt.colorbar()
    plt.show()
    

    ✅ 4-2. 남녀 인구 산점도

    import csv
    import matplotlib.pyplot as plt
    import math
    
    f = open('./data/gender.csv')
    data = csv.reader(f)
    
    m = []
    f = []
    size = []
    
    name = input('궁금한 지역을 입력해주세요: ')
    
    for row in data:
        if name in row[0]:
            for i in range(3, 104):
                m.append(int(row[i]))
                f.append(int(row[i + 103]))
                size.append(math.sqrt(int(row[i]) + int(row[i + 103])))  # 크기 조절
            break
    
    plt.rc('font', family='Malgun Gothic')
    plt.scatter(m, f, s=size, c=range(101), cmap='jet', alpha=0.5)
    plt.colorbar()
    plt.plot(range(max(m)), range(max(m)), 'g')  # 추세선 추가
    plt.xlabel('Male')
    plt.ylabel('Female')
    plt.show()
    

    🔎 📌 분석 포인트

    ✅ scatter()를 사용해 두 데이터의 관계를 시각화
    ✅ math.sqrt()를 활용해 점 크기 조절
    ✅ plt.plot()을 사용해 추세선 추가 가능


    🏆 결론

    다양한 시각화 방법을 통해 인구 데이터를 쉽게 분석 가능
    파이썬 matplotlib을 활용하면 직관적인 그래프 제작 가능
    파이 차트, 산점도, 막대 그래프, 선 그래프를 적절히 조합하여 데이터 인사이트 도출

     

Designed by Tistory.