JAVA를 잡아라!...

Python #11_파일 입출력 (+ CSV) 본문

Python

Python #11_파일 입출력 (+ CSV)

onivv 2024. 5. 15. 01:19

⭐ 파이썬에서 다루는 '데이터', '파일' 등은 대부분 .csv 파일을 의미

 

#01 CSV 파일

  • 'Comma Separated Values'의 약자로 '쉼표로 분리한 값'
  • 데이터베이스나 스프레드시트 데이터를 저장하기 위해서 사용하는 형식
  • CSV 파일의 내부는 실제 쉼표(,)를 이용해서 모든 항목이 구분되어 있으며
    쉼표(,)로 구성된 각 항목들이 테이블을 구성하는 각각의 데이터가 되는 방식

엑셀 데이터
csv 형식으로 저장
연결프로그램_메모장

 

✅ CSV 모듈로 CSV 파일 읽기

CSV 파일 읽기

 

CSV 모듈로 CSV 파일 데이터 작성

CSV 모듈로 데이터 추가

 

 

#02 CSV 파일 예제 [ 공공 데이터 ]

  • 대부분의 공공데이터들은 .csv 파일을 배포해줌!

[ 문제01_기온 ]

더보기

기상청 > 기후통계분석 > 조건별통계

데이터 : 서울 지역, 10년간, 8월

가장 온도가 높은 8월?

https://data.kma.go.kr/cmmn/main.do

CSV 파일 다운로드

✅ 데이터 가공_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세 인구 가장 적은 지

https://jumin.mois.go.kr/

CSV 파일 다운로드

✅ 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