2022-08-22

jm·2022년 8월 22일
0

TIL

목록 보기
9/22

📌 우리 동네 인구 구조 시각화하기

▶️ 데이터 : 행정안전부 인구 통계



✅ 신도림 연령 별 인구수 그래프 그리기

import csv
import matplotlib.pyplot as plt

# 1) 파일 읽어들이기
f = open('/content/age.csv')
data = csv.reader(f)

result = []  # 리스트 변수

# 2) 데이터 한줄씩 읽기
for row in data:
  # 2-1) 신도림만 추출하여 출력
  if '신도림' in row[0]:  # 중복되는 동이 있을 경우 and 연산자를 이용해 시도를 입력('대전' in row[0] and '삼성동' in row[0])
    # 연령 별 인구수 데이터 result 변수에 담기
    for i in row[3:]:
      result.append(int(i))

# 3) 시각화

plt.figure(dpi=100)
plt.style.use('ggplot')  # 격자 무늬 스타일 지정
plt.plot(result)
plt.show()

🔽🔽 결과


✅ 사용자에게 주소를 입력받아 그래프 출력하기

  • 시, 동 입력받아 그리기
city = input("도시 이름을 입력하시오.")
dong = input("동네명(동)을 입력하시오.")

-> 입력받을 변수 지정


if city in row[0] and dong in row[0]: 

-> 시와 동을 and 연산자를 이용하여 추출


plt.title(city + ' '+ dong + '의 인구구조')

-> 그래프 타이틀 수정

🔽🔽 결과


  • 전체 주소를 입력받아 출력
address = input("본인의 전체 주소(시 군구 읍면동)을 입력하시오.")

-> 주소 입력 변수


for row in data:
  # 2-1) 사용자가 입력한 동 정보 추출하여 출력
  if row[0].split('(')[0] == address:  # 시 군구 읍면동 정보가 일치하는 정보 추출
    # 2-2) 연령 별 인구수 데이터 address 변수에 담기
    for i in row[3:]:
      result.append(int(i.replace(',', '')))  # replace(A, B)를 통해 ',' 처리

-> for-if문 수정


plt.title(address + '의 인구구조')

-> 그래프 타이틀 수정


  • 두개의 동 입력받아 비교하기
result1 = []  # 리스트 변수
result2 = []
address1 = input("비교할 동네의 전체 주소(시 군구 읍면동)을 입력하시오.")
address2 = input("본인의 전체 주소(시 군구 읍면동)을 입력하시오.")

-> 변수 설정

for row in data:
  # 2-1) 사용자가 입력한 동 정보 추출하여 출력
  if row[0].split('(')[0] == address1:  # 시 군구 읍면동 정보가 일치하는 정보 추출
    # 2-2) 연령 별 인구수 데이터 address 변수에 담기
    for i in row[3:]:
      result1.append(int(i.replace(',', '')))  # replace(A, B)를 통해 ',' 처리

  if row[0].split('(')[0] == address2:  # 시 군구 읍면동 정보가 일치하는 정보 추출
    # 2-2) 연령 별 인구수 데이터 address 변수에 담기
    for i in row[3:]:
      result2.append(int(i.replace(',', '')))  # replace(A, B)를 통해 ',' 처리

-> 각각의 주소를 출력하여 result 변수에 저장

plt.figure(dpi=100)
plt.title(address1 + '과 ' + address2 + '의 인구구조')
plt.plot(result1, 'r', label = address1)
plt.plot(result2, 'b', label = address2)
plt.legend()
plt.show()

-> 시각화

🔽🔽 결과



✅ 입력받은 지역의 4개년 비교(2019~2022)

import csv
import matplotlib.pyplot as plt

# 1) 파일 읽어들이기
f1 = open('/content/age_2019.csv')
f2 = open('/content/age_2020.csv')
f3 = open('/content/age_2021.csv')
f4 = open('/content/age_2022.csv')

data1 = csv.reader(f1)
data2 = csv.reader(f2)
data3 = csv.reader(f3)
data4 = csv.reader(f4)

result1 = []  # 리스트 변수
result2 = []
result3 = []
result4 = []
address = input("알아보고자 하는 지역의 전체 주소(시 군구 읍면동)를 입력해주세요.")

# 2) 데이터 한줄씩 읽기(2019년)
for row in data1:
  # 2-1) 사용자가 입력한 주소 정보를 추출하여 출력
  if row[0].split('(')[0] == address:  # 시 군구 읍면동 정보가 일치하는 정보 추출
    # 2-2) 연령 별 인구수 데이터 address 변수에 담기
    for i in row[3:]:
      result1.append(int(i.replace(',', '')))  # replace(A, B)를 통해 ',' 처리
# 2020년
for row in data2:
  # 2-1) 사용자가 입력한 주소 정보를 추출하여 출력
  if row[0].split('(')[0] == address:  # 시 군구 읍면동 정보가 일치하는 정보 추출
    # 2-2) 연령 별 인구수 데이터 address 변수에 담기
    for i in row[3:]:
      result2.append(int(i.replace(',', '')))  # replace(A, B)를 통해 ',' 처리
# 2021년
for row in data3:
  # 2-1) 사용자가 입력한 주소 정보를 추출하여 출력
  if row[0].split('(')[0] == address:  # 시 군구 읍면동 정보가 일치하는 정보 추출
    # 2-2) 연령 별 인구수 데이터 address 변수에 담기
    for i in row[3:]:
      result3.append(int(i.replace(',', '')))  # replace(A, B)를 통해 ',' 처리
# 2022년
for row in data4:
  # 2-1) 사용자가 입력한 주소 정보를 추출하여 출력
  if row[0].split('(')[0] == address:  # 시 군구 읍면동 정보가 일치하는 정보 추출
    # 2-2) 연령 별 인구수 데이터 address 변수에 담기
    for i in row[3:]:
      result4.append(int(i.replace(',', '')))  # replace(A, B)를 통해 ',' 처리

# 시각화
plt.figure(dpi=100)
plt.title(address + '의 인구구조')
plt.plot(result1, 'r', label = '2019년도 ' + address + ' 인구분포')
plt.plot(result2, 'g', label = '2020년도 ' + address + ' 인구분포')
plt.plot(result3, 'b', label = '2021년도 ' + address + ' 인구분포')
plt.plot(result4, 'y', label = '2022년도 ' + address + ' 인구분포')
plt.legend()
plt.show()

🔽🔽 결과

✅ bar 차트 그리기

plt.bar(range(len(result)),result) 

-> plot을 bar로 변경하고 range(len())으로 x좌표 범위 설정

+) barh로 변경시 가로 그래프로 변경됨(horizontal)



✅ 팀별과제

  • 사용자가 입력한 연도의 인구구조 비교하는 그래프 그리기
import csv
import matplotlib.pyplot as plt
import os


# 1) 파일 읽어오기
file_list = os.listdir('/content/') # 디렉토리를 이용하여 파일을 리스트 형태로 저장
print(file_list)

# 변수 생성
result = []
result_1= []

year_1 = input("비교하고자 하는 첫번째 연도를 입력하시오.")
year_2 = input("비교하고자 하는 두번째 연도를 입력하시오.")

address = input("비교할 동네주소명 [시 군 구 읍면동]")

for fl in file_list:
  if year_1 in fl:
    f_1 = open(fl)

  if year_2 in fl:
    f_2 = open(fl)    

data = csv.reader(f_1)
data1 = csv.reader(f_2)

for row in data:
  if row[0].split('(')[0] == address:
    for i in row[3:]:
      result.append(-int(i.replace(',','')))

for row in data1:
  if row[0].split('(')[0] == address:
    for i in row[3:]:
      result_1.append(int(i.replace(',','')))


plt.figure(dpi=100)
plt.style.use('ggplot')             # Bar chart 쓸 때 유의점 
plt.barh(range(len(result)), result, label = year_1 + '인구구조')
plt.barh(range(len(result_1)), result_1, label = year_2 + '인구구조') # range => 범위, len => 항목 갯수(나이 1,2,~ 100) ==> range를 항목 개수(나이범위)로
plt.title(address + '의 ' + year_1 + '년과 ' + year_2 + '년의 인구구조 비교')
plt.legend()
plt.show()  # barh => bar + horizontal 

🔽 결과

0개의 댓글