Study Web Development

3월 25일

이전으로

Python

공공 데이터

.csv

서울 인구
  1. usecsv.py 하단에 다음의 내용을 추가
# 숫자로 변환
def switch(listName):
    for i in listName:
        for j in i:
            try:
                i[i.index(j)] = float(re.sub(',','',j))
            except:
                pass
    return listName

3.새 파일 s10_csv6.py 생성

import usecsv

total = usecsv.opencsv('popSeoul.csv', 'UTF-8')
newPop = usecsv.switch(total)
for i in newPop[:4]:
    print(i)
print('-'*3)

i = newPop[1]
print(i)
print('-'*3)

print(i[2]/(i[1]+i[2])*100) # 전체 인구 대비 외국인 비율 계산
foreign = round(i[2]/(i[1]+i[2])*100,1) # 소수점 이하 둘째 자리에서 반올림
print(foreign)
print('-'*3)

# 각 구의 외국인 비율 구하기
for i in newPop:
    foreign = 0
    try:
        foreign = round(i[2]/(i[1]+i[2])*100,1)
    except:
        pass
    print(i[0],foreign)

# 첫 행 지정하기
new = [['구', '한국인', '외국인', '외국인 비율']]
print(new)
print('-'*3)

# 외국인 비율이 3%를 초과하는 구 정보만 csv 파일로 저장
for i in newPop:
    foreign = 0
    try:
        foreign = round(i[2]/(i[1]+i[2])*100,1) # 외국인 비율을 소수점 이하 첫째 자리까지 구하기
        if foreign>3:
            new.append(i[:3]+[foreign])
    except:
        pass
print(new)
print('-'*3)
usecsv.writecsv('foreignrate.csv', 'UTF-8', new)
아파트 거래량
  1. 새 파일 s11_csv7.py 생성
import usecsv,re

apt = usecsv.switch(usecsv.opencsv('apt_202109.csv', 'UTF-8'))
print(apt[:3])
print('-'*3)

# 9월 한 달간 아파트 거래 건수
print(len(apt))
print('-'*3)

# 처음 5개 데이터의 시군구만 출력
for i in apt[:6]:
    print(i[0])
print('-'*3)

# 처음 5개 데이터의 시군구, 단지명, 거래금액 출력
for i in apt[:6]:
    print(i[0],i[4],i[-5])
print('-'*3)

# 강원도에서 전용면적 120 이상, 거래금액 3억 원 이하 검색
for i in apt:
    try:
        if re.match('강원',i[0]) and i[5]>=120 and i[-5]<=30000:
            print(i[0],i[4],i[-5])
    except:
        pass
print('-'*3)

# 검색 결과를 csv 파일로 저장
new_list = []
for i in apt:
    try:
        if re.match('강원',i[0]) and i[5]>=120 and i[-5]<=30000:
            new_list.append([i[0],i[4],i[-5]])
    except:
        pass
usecsv.writecsv('apt.csv', 'UTF-8', new_list)
기온
  1. 새 파일 s12_csv8.py 생성
import usecsv,re

print(usecsv.opencsv('month_temp.csv', 'UTF-8'))
print('-'*3)

lines = usecsv.opencsv('month_temp.csv', 'UTF-8')
# 개별 데이터를 모두 출력
for line in lines:
    for x in range(len(line)):
        print(line[x])
print('-'*3)

# 특정 일자 기온 출력
for line in lines:
    if '2019-10-20' in line:
        print(line)

# 일교차 구하기
newLines = usecsv.switch(lines)
print(newLines)
print('-'*3)
for line in newLines[1:]: # 헤더를 제외한 나머지 정보 읽기
    # 최고 기온 - 최저 기온
    diff = line[4]-line[3]
    # 일시, 최저 기온, 최고 기온, 일교차
    print('%s %.1f %.1f %.1f' % (line[1],line[3],line[4],diff))

# 가공된 정보를 csv 파일에 저장
lineSaved = [['일자','최저 기온', '최고 기온', '일교차']]
for line in newLines[1:]:
    diff = format(line[4]-line[3],'.1f')
    lineSaved.append([line[1],line[3],line[4],diff])
usecsv.writecsv('month_temp2.csv', 'UTF-8', lineSaved)
print('csv 파일이 생성되었습니다')
약국 위치
  1. 새 파일 s13_csv9.py 생성
# 건강보험 심사평가원에서 제공하는 데이터
# 약국명, 지역, 주소, 개설일자, 경도, 위도
import usecsv

lines = usecsv.opencsv('pharm_2019.csv', 'UTF-8')

for line in lines[:5]: # 5개 표시
    print(line)
print('-'*3)

# 특정 도시의 특정 약국 검색
for line in lines:
    # 지역, 약국명
    if line[1]=='경주시' and line[0]=='신대원약국':
        # 약국명, 지역, 주소
        print(line[0],line[1],line[2],sep='/')
print('-'*3)

# 최근 5년 이내(2019년 9월 1일 기준) 개설 약국 수
city = '원주시'
recent = 0
count = 0
for line in lines:
    if line[1]==city:
        count += 1 # 원주시의 총 약국 수
        if int(line[3])>20140901:
            recent += 1 # 원주시에서 최근 5년 이내에 개설된 약국 수
print('%s의 약국 수: %d개' % (city,count))
print('2019년 9월 1일 기준 5년 이내 개설된 약국 수 : %d개' % recent)

# 특정 지역 1년간(20100101~20101231) 개설된 약국 목록
# 번호/지역/약국명/경도/위도
print('번호','지역','약국명','경도','위도',sep='/')
number = 1
for line in lines[1:]:
    if('경상북도' in line[2]) and (int(line[3])>=20100101) and (int(line[3])<=20101231):
        print(number,'.',sep='',end='')
        # 지역, 약국명, 경도, 위도
        print(line[1],line[0],line[-2],line[-1],sep='/')
        number += 1
print('-'*3)

# 추출된 약국 목록 정렬하기
# 경기도 용인시 수지구의 약국 목록을 약국명의 오름차순으로 정렬
data = []
# 번호,약국명,주소
print('번호',lines[0][0],lines[0][2],sep=',')
for line in lines[1:]:
    if line[1]=='용인수지구':
        # 약국명,주소
        tmp = '%s/%s' % (line[0],line[2])
        data.append(tmp)
#오름차순 정렬
data.sort()
number = 1
for x in data:
    print('%d. %s' % (number,x))
    number += 1 

다음으로