[2월 1주차-2/6(4)]📊 파이썬을 활용한 인구 데이터 시각화(파이차트&산점도)
데이터 분석을 하다 보면, 데이터를 보다 직관적으로 이해하기 위해 시각화를 활용하는 경우가 많습니다. 이번 포스팅에서는 파이썬의 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을 활용하면 직관적인 그래프 제작 가능
✅ 파이 차트, 산점도, 막대 그래프, 선 그래프를 적절히 조합하여 데이터 인사이트 도출