[데이터분석]6. 넘파이를 이용한 프로젝트
1. 알고리즘
- 우리 동네와 연령별 인구구조가 비슷한 동네 찾기
- 데이터 읽어오기
- 알고 싶은 지역 이름 입력받기
- 해당 지역 인구 구조 저장
- 해당 지역의 인구구조와 비슷한 인구구조를 가진 지역 찾기
- 해당 데이터 시각화
2. 구현
1) 데이터 읽어오기
import csv
f = open('people.csv')
data = csv.reader(f)
next(data)
next(data)
for row in data:
print(row)
- 불필요한 2개 행 제외하고 전 데이터 프린트
2)알고 싶은 지역 이름 입력받기
name = input('알고 싶은 지역의 이름(읍면동 단위)을 입력해주세요 :')
3) 해당 지역 인구 구조 저장
import csv
f = open('people.csv')
data = csv.reader(f)
next(data)
next(data)
home = []
name = input('알고 싶은 지역의 이름(읍면동 단위)을 입력해주세요 :')
for row in data:
if name in row[0]:
for i in row[3:]:
home.append(int(i))
print(home)
- 우리 동네와 연령별 인구구조가 비슷한 동네 찾기
1) 데이터 읽어오기
import csv
f = open('people.csv')
data = csv.reader(f)
next(data)
next(data)
for row in data:
print(row)
- 불필요한 2개 행 제외하고 전 데이터 프린트
2)알고 싶은 지역 이름 입력받기
name = input('알고 싶은 지역의 이름(읍면동 단위)을 입력해주세요 :')
3) 해당 지역 인구 구조 저장
import csv
f = open('people.csv')
data = csv.reader(f)
next(data)
next(data)
home = []
name = input('알고 싶은 지역의 이름(읍면동 단위)을 입력해주세요 :')
for row in data:
if name in row[0]:
for i in row[3:]:
home.append(int(i))
print(home)
- 넘파이 배열을 이용하여 이중 루프 해소
import csv
import numpy as np
f = open('people.csv')
data = csv.reader(f)
next(data)
next(data)
home = []
name = input('알고 싶은 지역의 이름(읍면동 단위)을 입력해주세요 :')
for row in data:
if name in row[0]:
home = np.array(row[3:], dtype=int)
print(home)
import matplotlib.pyplot as plt
plt.rc('font', family='AppleGothic')
plt.title(name+' 지역의 인구 구조')
plt.plot(home)
plt.show()
4) 해당 지역의 인구구조와 비슷한 인구구조를 가진 지역 찾기
- 전국의 모든 지역 중 한 곳 선택
- 입력받은 지역과 선택된 지역의 0세 인구 비율을 각각 뺄셈
- 100세 이상까지 반복 후 각각의 차이 저장
- 전국 모든 지역에 대해 반복 후 가장 차이가 적은 지역 선택
인구 비율 : 해당 인구수 / 전체 인구수
- home = np.array(row[3:], dtype=int) / int(row[2])
import csv
import numpy as np
f = open('people.csv')
data = csv.reader(f)
next(data)
data = list(data)
home = []
name = input('알고 싶은 지역의 이름(읍면동 단위)을 입력해주세요 :')
for row in data:
if name in row[0]:
np.array(row[3:], dtype=int) / int(row[2])
for row in data:
print(row)
- data = list(data) : 해당 줄이 없으면 첫 번째 반복문 이후 데이터 출력이 불가능함
import csv
import numpy as np
f = open('people.csv')
data = csv.reader(f)
next(data)
data = list(data)
name = input('알고 싶은 지역의 이름(읍면동 단위)을 입력해주세요 :')
for row in data:
if name in row[0]:
home = np.array(row[3:], dtype=int) / int(row[2])
#지역 한 곳 선택
for row in data:
away = np.array(row[3:], dtype=int) / int(row[2])
print(home - away) #해당 지역과 다른 지역의 0세 인구 비율 뺄셈
import csv
import numpy as np
f = open('people.csv')
data = csv.reader(f)
next(data)
data = list(data)
name = input('알고 싶은 지역의 이름(읍면동 단위)을 입력해주세요 :')
for row in data:
if name in row[0]:
home = np.array(row[3:], dtype=int) / int(row[2])
for row in data:
away = np.array(row[3:], dtype=int) / int(row[2])
print(np.sum(home - away)) #모든 연령에 대한 뺄셈의 합계
5) 해당 데이터 시각화
import csv
import numpy as np
f = open('people.csv')
data = csv.reader(f)
next(data)
data = list(data)
name = input('알고 싶은 지역의 이름(읍면동 단위)을 입력해주세요 :')
mn = 1 # 최솟값을 저장할 변수 생성 및 초기화
result_name = '' # 최솟값을 갖는 지역의 이름을 저장할 변수 생성 및 초기화
result = 0 # 최솟값을 갖는 지역의 연령대별 인구비율을 저장할 배열 초기화
for row in data:
if name in row[0]:
home = np.array(row[3:], dtype=int) / int(row[2]) #사용자로부터 입력받은 지역의 인구 비율 저장
for row in data:
away = np.array(row[3:], dtype=int) / int(row[2]) # 다른 지역의 인구비율 저장
s = np.sum(home - away) #home과 away의 차이 합산
if s < mn :
mn = s
result_name = row[0]
result = away
import matplotlib.pyplot as plt
plt.rc('font', family='AppleGothic')
plt.title(name + '지역과 가장 비슷한 인구 구조를 가진 지역')
plt.plot(home, label=name)
plt.plot(result, label=result_name)
plt.legend()
plt.show()
오류 수정
import csv
import numpy as np
f = open('people.csv')
data = csv.reader(f)
next(data)
data = list(data)
name = input('알고 싶은 지역의 이름(읍면동 단위)을 입력해주세요 :')
mn = 1 # 최솟값을 저장할 변수 생성 및 초기화
result_name = '' # 최솟값을 갖는 지역의 이름을 저장할 변수 생성 및 초기화
result = 0 # 최솟값을 갖는 지역의 연령대별 인구비율을 저장할 배열 초기화
for row in data:
if name in row[0]:
home = np.array(row[3:], dtype=int) / int(row[2]) #사용자로부터 입력받은 지역의 인구 비율 저장
for row in data:
away = np.array(row[3:], dtype=int) / int(row[2]) # 다른 지역의 인구비율 저장
s = np.sum((home - away)**2) #home과 away의 차이 합산
if s < mn and name not in row[0] :
mn = s
result_name = row[0]
result = away
import matplotlib.pyplot as plt
plt.rc('font', family='AppleGothic')
plt.title(name + '지역과 가장 비슷한 인구 구조를 가진 지역')
plt.plot(home, label=name)
plt.plot(result, label=result_name)
plt.legend()
plt.show()
s = np.sum((home - away)**2)
: 단순 뺄셈만 했을 경우에는 음수의 값이 가장 작은 값으로 선택되기 때문에 제곱 이용if s < mn and name not in row[0] :
: 제곱근을 사용했기 때문에 선택한 지역과 중복 미허용
Author And Source
이 문제에 관하여([데이터분석]6. 넘파이를 이용한 프로젝트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jjaa9292/데이터분석6.-넘파이를-이용한-프로젝트저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)