더북(TheBook)

■ ➍ 전국의 모든 지역에 대해 반복하며 그 차이가 가장 작은 지역을 찾는다.

이제 그동안 많이 해왔던 최솟값을 찾는 패턴의 문제입니다. 앞에서 많이 다뤄본 패턴이기 때문에 코드를 보면 이해하기 어렵지 않을 거예요.

import numpy as np
import csv

f = open('age.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)  # ➌
    if s < mn :    # ➍
        mn = s     # ➎
        result_name = row[0]
        result = away

 

사용자로부터 입력받은 지역의 인구 비율을 home에 저장합니다(➊). 그런 다음 다른 지역의 인구 비율을 away에 저장한 후(➋) home에 저장된 값과 away에 저장된 값의 차이의 합을 계산합니다(➌). if 조건문 안에서는 위에서 계산한 합이 최솟값인지 확인합니다(➍). 만약 최솟값이라면 변수 mn의 값을 갱신하고(➎), 최솟값을 갖는 지역의 이름과 해당 지역의 연령대별 인구 비율 값을 저장합니다. 이 과정은 전체 데이터에 대해 반복합니다(➏).

코드를 실행하니 에러가 발생하지 않는 것으로 보아 가장 비슷한 인구 구조를 가진 지역을 찾은 것 같습니다.