저번 블로그에 이어서 이번에는 인구데이터를 파이썬으로 분석해봤다. 인구데이터는 모두 여기에서 가져왔다: jumin.mois.go.kr/index.jsp
주민등록 인구통계 행정안전부
jumin.mois.go.kr
(코드 내용은 전부 <모두의 데이터 분석 with 파이썬 - 송석리, 이현아> 이 책을 실습하면서 가져온 것이다.)
그리고 자료는 대충 이렇게 생겼다:

이제부터 할 일을 정확하게 설명하자면, 이 인구데이터를 파이썬에서 그래프로 표시하던, 일정 값만 나오게 하던, 여러 방식으로 이용하는 것이다. 우리가 인구데이터라는 아이클레이를 가지고 미술시간에 각종 모형들을 만드는 아이라고 생각하면 된다.
먼저 가볍게 원하는 지역의 인구데이터를 나오게 하고, 그걸로 그래프를 그리는 코드부터 만들어보겠다.
import matplotlib.pyplot as plt
import csv
f = open('population.csv')
data = csv.reader(f)
result = []
name = input('지역 이름(읍면동 단위)을 입력하세요: ')
for row in data:
if name in row[0]:
for i in row[3:]:
result.append(int(i.replace(',','')))
plt.style.use('ggplot')
plt.rc('font', family = 'Malgun Gothic')
plt.rcParams['axes.unicode_minus'] = False
plt.title(name + ' 지역의 인구 구조')
plt.plot(result)
plt.show()
처음부터 코드가 길게 나와도 당황하지 마라. 내가 차근차근 설명해주겠다.
첫번째 문단은 모듈과 인구데이터 파일을 불러오고, 코드 중에 불러오는 데이터를 저장할 리스트(result)와 지역의 이름을 입력하게 하고 저장하는 변수를 만든 것이다.
그 뒤의 두번째 문단은 반복문으로 인구데이터에 있는 쉼표들을 없애는 코드이다. 내 컴퓨터가 빡통이어서인지 콤마를 1,000이상 숫자의 요소로 판단하지 못한다. 그래서 문자값인 숫자를 int(정수값)화 시킬 때 오류가 발생한다.
마지막 문단은 그래프를 그리는 코드이다. 사실 마지막 두 줄만 실행해도 그래프는 나온다. 그 이외의 코드들은 전부 코드를 꾸미기 위해 넣은 것이다.
이렇게 하면 코드가 이렇게 나온다. 빨간 박스는 무시해도 된다. 내 컴퓨터가 다시 멍청해져서 한글을 표시하지 못하는 것 뿐이다.

이후 다른 코드들은 전부 같은 코드 형식으로 이루어져있고, 그래프 모양과 몇 줄 정도만 바뀐 코드이다. 그러므로 코드의 긴 설명은 앞으로 생략하겠다.
import csv
f = open('pop4.csv', encoding='cp949')
data = csv.reader(f)
m = []
f = []
n = input('찾고 싶은 지역의 이름을 입력하세요(읍, 면, 동): ')
for row in data:
if n in row[0]:
for i in row[3:104]:
m.append(-int(i.replace(',','')))
for i in row[106:]:
f.append(int(i.replace(',','')))
import matplotlib.pyplot as plt
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(n + ' 지역의 남녀 성별 인구 분포')
plt.barh(range(101), m, label = '남성')
plt.barh(range(101), f, label = '여성')
plt.legend()
plt.show()
이 코드는 plt.barh코드를 사용해 가로 막대그래프를 그린 것이다. m, f 리스트를 생성해 각각 남자, 여자 인구수를 넣었다는 점과 plt.legend코드를 사용해 그래프의 범례를 표시했다는 점이 저번과 다른 점이다. 나머지 코드들은 전부 디자인 등의 부수적인 것이다. 참고로 밑에 그래프는 빨간색이 남자 인구수다.

이제 파이차트 또는 원그래프로 나타내보겠다.
import csv
f = open('pop4.csv', encoding='cp949')
data = csv.reader(f)
n = input()
for row in data:
if n in row[0]:
m = 0
f = 0
for i in range(101):
m += int(row[i+3].replace(',',''))
f += int(row[i+106].replace(',',''))
break
import matplotlib.pyplot as plt
plt.rc('font', family = 'Malgun Gothic')
color = ['crimson', 'darkcyan']
plt.axis('equal')
plt.pie(size, labels = ['남', '여'], autopct = '%.1f%%', colors = color, startangle = 90)
plt.title(n + ' 지역의 남녀 성별 비율')
plt.show()
plt.pie, 저 코드가 원그래프를 그리는 코드이다. 마지막 문단의 나머지 코드들은 첫번째 줄을 제외하고 그래프 디자인과 관련된 것이다. 이번에도 m, f 변수를 생성해 남녀 인구수를 구분했다. 이번에는 좀 다르게 반복문 안에서 m, f 변수를 생성했는데 결과는 별 다를게 없다. 형식만 다르다. 참고로 아래 그래프는 왼쪽 원이 남자 인구를 나타낸 것이다.

마지막에는 산점도로 한번 표시해보겠다.
import csv
f = open('pop4.csv', encoding='cp949')
data = csv.reader(f)
m = []
f = []
n = input()
for row in data:
if n in row[0]:
for i in range(3, 104):
m.append(int(row[i]))
f.append(int(row[i+103]))
break
import matplotlib.pyplot as plt
plt.scatter(m, f, c = range(101), alpha = 0.5, cmap = 'ocean')
plt.colorbar()
plt.plot(range(max(m)), range(max(m)), 'g')
plt.show()
plt.scatter, 저 코드가 산점도를 나타내준다. 그리고 plt.plot를 실행해 중간선을 표시해줄 코드를 하나 넣었다. 나머지 코드들은 이전 코드들과 마찬가지로 남녀 인구수를 구분하는 것이다. 그래프를 보면 색깔이 상당히 이쁘게 나온 것을 볼 수 있다. 나는 개인적으로 산점도가 가장 이쁘게 나오는 그래프인 것 같다.

이렇게 인구데이터로 4종류의 그래프를 파이썬에서 그려보면서 데이터 분석도 해보았다. 우리나라 인구를 제대로 아는 것이 유익한지는 잘 모르겠지만 그래프를 계속 그리면서 재미를 얻었던 시간이었다.
'코딩' 카테고리의 다른 글
대중교통 데이터를 이용한 파이썬 (0) | 2021.02.21 |
---|---|
기온데이터를 이용한 파이썬 (0) | 2021.01.10 |
파이썬의 클래스 & 연산자 add [파이썬 3.7] (0) | 2020.09.05 |
파이썬 클래스(class) 함수 심화 [파이썬 3.7] (0) | 2020.08.15 |
[파이썬 3.7] 함수의 응용 (0) | 2020.08.10 |