LG U+ why not SW 5/python DA _ exercise

파이썬 데이터 분석 예제 _ 우리 동네 인구 데이터 연령 및 성별 간단 분석 / 파이차트, 산점도, 추세선

wangatheringdata 2025. 3. 9. 19:43

 

 

 

 

파이썬

 

 

 

 

 

1.  모듈 import 및 데이터 추출, 시각화

import csv
import matplotlib.pyplot as plt

f = open('./data/gender.csv', 'r', encoding='cp949')
data = csv.reader(f)



m = []     #3:104 _ csv 상 데이터의 분포
f = []     #106: _ csv 상 데이터의 분포

name = input('찾을 지역을 입력하세요! _ ').strip()

for row in data :
    if '신도림' in row[0] :
        for i in row[3:104] :
#0기준으로 봤을 때 m의 자료가 왼쪽으로 위치한다고 하면, 모든 자료는 -int
            m.append(-int(i))

        for i in row[106:] :
            f.append(int(i))

print(len(m), len(f))     #808 808



plt.style.use('ggplot')
plt.figure(figsize=(10, 5), dpi=300)
plt.rc('font', family='AppleGothic')
plt.rcParams['axes.unicode_minus']=False     #-값 부분이 손상됨을 방지
plt.title('지역의 남녀 성별 인구 분포')
plt.barh(range(808), m, label='남자')     #range는 위 len() 값과 일치해야 실행됨
plt.barh(range(808), f, label='여자')
plt.legend()
plt.title(name + ' 지역의 남녀 성별 인구 분포')
plt.show()

 

 

 

2.  파이차트를 이용한 시각화

2-1. 파이차트 :    .pie()

    전체 데이터 중 특정 데이터의 비율을 파이 형태로 표현

plt.pie([10, 20])
plt.show()

 

size = [2441, 2312, 1031, 1233]
label = ['A형', 'B형', 'AB형', '0형']
color = ['r', 'g', 'b', 'y']



plt.axis('equal')
plt.rc('font', family='AppleGothic')
plt.pie(size,
        labels=label,
        autopct='%.1f%%',    #'%.1f%%' : 소숫점 이하 1자리
        colors=color,
        explode=(0, 0.1, 0, 0))     #explode=() : 조각 띄우기
plt.legend()
plt.show()

 

 

2-2. 파이차트로 성별 분포 시각화

f = open('./data/gender.csv', 'r', encoding='cp949')
data = csv.reader(f)



name = input('찾을 지역을 입력하세요!_')
size = []      #남자 /여자

for row in data:
    if name in row[0]:
        m = 0
        f = 0
        for i in range(101):
            m += int(row[i+3])
            f += int(row[i+106])
        break     #101개까지만 누적시키기 위함

size.append(m)
size.append(f)



color = ['r', 'g']
label = ['남', '여']

plt.axis('equal')
plt.rc('font', family='AppleGothic')
plt.pie(size,
        labels=label, 
        autopct='%.1f%%',
        colors=color,
        startangle=90)     #startangle=90은 12시방향부터 시작
plt.legend()
plt.title(name + ' 지역의 남녀 성별 인구 분포')
plt.show()

 

 

 

3. 산점도 :    .scatter()

    점이 흩어진 모양의 그래프로 x축과 y축 데이터의 상관 관계 표현하고, 두개의 축 기준으로 데이터의 분포, 산포도 표현

x = [1, 2, 3, 4]
y = [10, 20, 30, 40]
color = ['r', 'g', 'b', 'y']     #list 갯수와 일치

plt.style.use('ggplot')
plt.scatter(x, y)
plt.show()

 

x = [1, 2, 3, 4]
y = [10, 20, 30, 40]
size = [100, 25, 200, 180]     #list 갯수와 일치

plt.style.use('ggplot')
plt.scatter(x, y, s=size, c=range(4), cmap='jet')
plt.colorbar()
plt.show()

 

 

3-1. 산점도로 특정 지역의 인구 분포 시각화

f = open('./data/gender.csv', 'r', encoding='cp949')
data = csv.reader(f)



m = []
f = []

name = input('찾을 지역(도)을 입력하세요!_').strip

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.style.use('ggplot')
plt.scatter(m, f, c=range(101), cmap='jet', alpha=0.5)     #alpha: 투명도
plt.colorbar()
plt.title(name + ' 지역 성별 인구 분포')
plt.show()

 

 

3-2. 추세선 :    .plot()

    남성 인구 수 중 가장 큰 값을 기준으로 y = x형태의 직선 삽입

f = open('./data/gender.csv', 'r', encoding='cp949')
data = csv.reader(f)



m = []
f = []

name = input('찾을 지역(도)을 입력하세요!_').strip

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.style.use('ggplot')
plt.rc('font', family='AppleGothic')
plt.scatter(m, f, c=range(101), cmap='jet', alpha=0.5)
plt.colorbar()

#추세선
plt.plot(range(max(m)), range(max(m)), 'g')
plt.title(name + ' 지역 성별 인구 분포')
plt.show()