0. 데이터 가져오기
다음의 책을 참조하였습니다.
인구 데이터를 다운로드 받기 위해서 www.mois.go.kr에에 접속합니다.
상단에서 정책자료 -> 통계 -> 주민등록 인구 통계를 클릭합니다.
왼쪽의 연령별 인구 현황을 클릭한 뒤, 다음과 같이 설정하였습니다.
1. 데이터 살펴보기
파일을 로드하였습니다.
import csv
f = open('/모두의 데이터 분석 with 파이썬/Unit3 인구 raw.csv', encoding='cp949')
data = csv.reader(f)
for row in data:
print(row)
다음과 같이 데이터가 있음을 확인하였습니다.
신도림 동의 인구를 확인해보겠습니다 !
# data를 한 줄 씩 돌면서
for row in data :
if '신도림' in row[0]: # 행정구역을 나타내는 row[0]에 '신도림'이라는 글자가 있으면
for i in row[3:] : # row[3:] 부분을 전체 순회합니다
result.append(int(i)) # 결과는 int로 변환하여 저장합니다
print(result)
( 결과 )
[326, 334, 406, 413, 389, 408, 417, 434, 411, 387, 420, 383, 354, 357, 340, 338, 349, 339, 407, 380, 390, 453, 424, 516, 451, 466, 448, 484, 471, 476, 558, 541, 579, 619, 638, 740, 756, 792, 745, 789, 671, 687, 700, 636, 726, 691, 657, 619, 649, 585, 579, 470, 522, 534, 563, 445, 511, 569, 572, 513, 532, 456, 426, 497, 379, 384, 399, 279, 289, 276, 268, 271, 223, 170, 150, 154, 177, 140, 126, 114, 121, 97, 86, 80, 59, 48, 44, 43, 28, 29, 22, 15, 13, 12, 5, 8, 5, 4, 2, 3, 7]
그림으로 나타내보겠습니다.
import matplotlib.pyplot as plt
plt.style.use('ggplot')
plt.plot(result)
plt.show()
2. 위를 함수로 구현하여 간편하게 만들어보자.
import csv
import matplotlib.pyplot as plt
def population(name):
for row in data :
if name in row[0]:
for i in row[3:] :
result.append(int(i.replace(',','')))
plt.style.use('ggplot')
plt.plot(result)
plt.show()
이제, population(찾고싶은 동)을 입력하면 됩니다.
+ ) 군자동은 다른 지역에도 있어서 광진구 군자동을 함께 입력하였습니다.
f = open('/content/drive/My Drive/도서 참고/모두의 데이터 분석 with 파이썬/Unit3 인구 raw.csv', encoding='cp949')
data = csv.reader(f)
result = []
population('광진구 군자동')
population('무거동')
3. 성별 데이터 가져오기
위의 방법과 마찬가지로 데이터를 가져오겠습니다. 이번에는 남/여 구분이 된 데이터를 가져와 살펴보겠습니다.
4. 데이터 살펴보기
데이터를 살펴본 뒤, 신도림동의 남자, 여자 인구 데이터를 확인하겠습니다.
import pandas as pd
data = pd.read_csv('/모두의 데이터 분석 with 파이썬/Unit3 인구성별 raw.csv', encoding='cp949')
data.columns
column은 행정구역 + 남_총인구수 + 남_연령구간 인구수 + 0 ~ 100 + 여_총인구수 + 여_연령구간 인구수 + 0 ~ 100 으로 구성되었습니다. 따라서 남자 인구를 구할 때는 column이 3 ~ 103, 여자 인구를 구할 때는 106 ~ 206을 사용해야함을 알게 되었습니다.
그렇다면! 이를 어떻게 알고리즘으로 구현해볼까요?
m = [] # 남자 result
f = [] # 여자 result
for row in data:
if '신도림' in row[0]:
for i in range(0,101):
m.append(int(row[i+3])) # 남자는 앞에서부터 진행 : 3 ~ 103
f.append(int(row[-(i+1)])) # 여자는 뒤에서부터 진행 : 106 ~ 206 을 역순으로
# 역순으로 받았기 때문에 다시 뒤집어 m과 순서를 맞춰준다
f.reverse()
plt.barh(range(101), m)
plt.barh(range(101), f)
plt.show()
겹쳐져서 보기가 안좋으니 다른 방향으로 바꾸기 위해 코드를 수정해보겠습니다.
import csv
f = open('/모두의 데이터 분석 with 파이썬/Unit3 인구성별 raw.csv', encoding='cp949')
data = csv.reader(f)
m = []
f = []
for row in data:
if '신도림' in row[0]:
for i in range(0,101):
m.append(-int(row[i+3])) # 음수로 변경
f.append(int(row[-(i+1)]))
f.reverse()
5. 함수로 구현해보자.
def man_woman(name):
for row in data:
if name in row[0]:
for i in range(0,101):
m.append(-int(row[i+3])) # 음수로 변경
f.append(int(row[-(i+1)]))
f.reverse()
plt.barh(range(101), m)
plt.barh(range(101), f)
plt.show()
이제 함수로 찾아보겠습니다 !
f = open('/content/drive/My Drive/도서 참고/모두의 데이터 분석 with 파이썬/Unit3 인구성별 raw.csv', encoding='cp949')
data = csv.reader(f)
m = []
f = []
man_woman('광진구 군자동')
man_woman('무거동')
7. 지역의 성별 인구를 파이 차트로 그리기
import csv
f = open('/모두의 데이터 분석 with 파이썬/Unit3 인구성별 raw.csv', encoding='cp949')
data = csv.reader(f)
size = []
name = input('찾고 싶은 지역의 이름을 알려주세요 : ')
# 제주특별자치도 입력 !
for row in data:
if name in row[0] :
m = 0
f = 0
for i in range(101) :
# 1,843의 ,를 없애기 위해 replace 사용
m += int(row[i+3].replace(',',''))
f += int(row[i+106].replace(',',''))
break
size.append(m)
size.append(f)
color = ['lightcoral','lightblue']
plt.axis('equal')
plt.pie(size, labels=['male', 'female'], autopct='%.1f%%', colors = color, startangle = 90)
plt.show()
8. 추세선, 산점도로 그려보기
name = input('궁금한 동네를 입력해주세요 : ')
m = []
f = []
for row in data :
if name in row[0]:
for i in range(3,104):
m.append(int(row[i].replace(',','')))
f.append(int(row[i+103].replace(',','')))
break
# 추세선 그리기
plt.plot(m, label='Male')
plt.plot(f, label = 'Female')
plt.legend()
plt.show()
# 산점도 그리기
# c : 몇 개 그릴건지
# cmap : 무지개 컬러
# alpha : 투명도 조절 (1이 불투명)
plt.scatter(f,m,c=range(100), cmap='jet', alpha=0.5)
plt.colorbar()
plt.plot(range(max(m)), range(max(m)) , 'g')
plt.xlabel('male')
plt.ylabel('female')
plt.show()
제주특별자치도를 입력해보았습니다.
무거동은 또 다르게 생겼네요 !
군자동도 다른 느낌 ~ 이었습니다.
'Programming > Python' 카테고리의 다른 글
f-string (0) | 2021.05.31 |
---|---|
통계분석_성별/혼인/피부/가격/재사용 등 (0) | 2020.05.24 |
[ 데이터 분석 실무 with python ] 1. 사드 배치의 영향으로 중국인 관광객이 얼마나 줄었을까? (0) | 2020.05.23 |
[ 모두의 데이터 분석 with python ] 3.지하철 데이터 (0) | 2020.05.08 |
[ 모두의 데이터 분석 with python ] 1. 기온 데이터 (0) | 2020.05.05 |