JAVA를 잡아라!...
Python #11_파일 입출력 (+ CSV) 본문
⭐ 파이썬에서 다루는 '데이터', '파일' 등은 대부분 .csv 파일을 의미
#01 CSV 파일
- 'Comma Separated Values'의 약자로 '쉼표로 분리한 값'
- 데이터베이스나 스프레드시트 데이터를 저장하기 위해서 사용하는 형식
- CSV 파일의 내부는 실제 쉼표(,)를 이용해서 모든 항목이 구분되어 있으며
쉼표(,)로 구성된 각 항목들이 테이블을 구성하는 각각의 데이터가 되는 방식
✅ CSV 모듈로 CSV 파일 읽기
✅ CSV 모듈로 CSV 파일 데이터 작성
#02 CSV 파일 예제 [ 공공 데이터 ]
- 대부분의 공공데이터들은 .csv 파일을 배포해줌!
[ 문제01_기온 ]
기상청 > 기후통계분석 > 조건별통계
데이터 : 서울 지역, 10년간, 8월
가장 온도가 높은 8월?
https://data.kma.go.kr/cmmn/main.do
✅ 데이터 가공_01 : 코드로 가공
데이터가 너무 크면 간단한 설명만 출력 ▶ 스크립트 특징
한 행씩 읽어보기 ▶ 모든 데이터 출력
먼저나온 12개의 데이터와 필요한 데이터 이후의 데이터는 필요없음 ▶ 필요한 데이터만 출력
# 데이터 가공 01
import csv
# csv 파일 읽어오기
with open('climate.csv', 'r') as file:
data = csv.reader(file)
## print(data)
# 표의 처음 데이터 = header (필요없음)
# next() : itertor, jdbc의 resultSet 같은 포인터 메커니즘 기반의 메서드
# next로 12번 읽으면 뒤로 이동
for i in range(12):
header = next(data)
for row in data:
# 데이터 첫번째 칸이 '\t\t'면 끝내기
if row[0] == '\t\t':
break
print(row)
✅ 데이터 가공_02 : 데이터 파일에서 가공
필요없는 데이터 내용 지우고 셀 삭제 (이렇게 해도 안지워지면 메모장에서 지우기)
# 데이터 가공 02
import csv
# csv 파일 읽어오기
with open('climate.csv', 'r') as file:
data = csv.reader(file)
header = next(data) # 어떤 데이터인지 구분하기 위해 살려둠
for row in data:
print(row)
✅ 데이터 가공 후 입출력
import csv
# 가장 높은 기온
maxTemp = 0
# 해당 월
date = ''
# csv 파일 읽어오기
with open('climate.csv', 'r') as file:
data = csv.reader(file)
header = next(data) # 어떤 데이터인지 구분하기 위해 살려둠
for row in data:
# 기온 비교 전 int 타입으로 변환
row[5] = float(row[5])
# maxTemp < 해당 데이터의 기온
if maxTemp < row[5]:
# maxTemp = 해당 데이터의 기온
maxTemp = row[5]
# date = 해당 날짜
date = row[-4]
print('최고기온 : ' + str(maxTemp))
print('일자 : ' + date)
[ 문제02_인구 ]
주민등록 인구통계 행정안전부 > 연령별인구현황
데이터 : 서울 지역, 6년간, 남녀구분 x, 10세 단위
2018년도 0~9세 인구 가장 적은 지
✅ ValueError & TypeError
콤마 없애주기! ▶ minNum = int(pivot[3].replace(',',''))
if 조건 비교 전 row 데이터 콤마 없애기 ▶ row[3] = int(row[3].replace(',',''))
import csv
# 가장 적은 인원 수
minNum = 0
# 그때 지역
area = ''
with open('population.csv', 'r') as file:
data = csv.reader(file) # 데이터 읽어서 저장
header = next(data) # 헤더 부분 지우기
pivot = next(data) # 서울 전체 0~9를 기준으로 잡음
minNum = int(pivot[3].replace(',','')) # 데이터 형변환
for row in data:
row[3] = int(row[3].replace(',',''))# 콤마 제거
if minNum > row[3]: # 비교하는 수가 더 작다면
minNum = row[3] # 최소값으로 저장
area = row[0] # 해당 지역 저장
print(area)
print(str(minNum) + '명')
[ 문제03_인구 ]
주민등록 인구통계 행정안전부 > 연령별인구현황
데이터 : 서울 지역, 6년간, 남녀구분 x, 10세 단위
2018년도와 2023년도를 비교했을 때, 0~9세 인원이 줄어든 지역의 이름을 모두 출력
[ 문제04_인구 ]
주민등록 인구통계 행정안전부 > 연령별인구현황
데이터 : 서울 지역, 6년간, 남녀구분 x, 10세 단위
사용자가 검색한 지역(__구)의 2023년도 20~39세 인원수
import csv
data_20s = 0
data_30s = 0
while True:
area = input('검색 지역 입력 >> ')
flag = False
with open('population.csv', 'r') as file:
data = csv.reader(file) # 데이터 읽어서 저장
header = next(data) # 헤더 부분 지우기
for row in data:
if area in row[0]: # 검색 지역이 있는 경우
print(row[0])
ans = input('맞나요? (예/아니오) >> ')
if ans == '예':
flag = True # flag = True
area = row[0]
data_20s = int(row[-9].replace(',',''))
data_30s = int(row[-8].replace(',',''))
break
if not flag: # 검색 지역이 없는 경우 > 재입력
print('검색 지역 없음')
else: # 검색 지역이 있는 경우 > 종료
print('검색 결과')
break
result = data_20s + data_30s
print(area + '의 20~39세 인구 : ' + str(result) + '명')
'Python' 카테고리의 다른 글
Python_파이참(PyCharm) (0) | 2024.05.16 |
---|---|
Python #12_예외 처리 (0) | 2024.05.15 |
Python #10_파일 입출력 (+ 슬라이싱 Slicing) (0) | 2024.05.14 |
Python #09_모듈과 import (0) | 2024.05.10 |
Python #08_사용자 정의 함수 (0) | 2024.05.09 |