๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Book-study/๋ชจ๋‘์˜ ๋ฐ์ดํ„ฐ๋ถ„์„ with ํŒŒ์ด์ฌ

[๋ชจ๋‘์˜ ๋ฐ์ดํ„ฐ๋ถ„์„] 1 ๊ธฐ์˜จ ๊ณต๊ณต ๋ฐ์ดํ„ฐ

by hong- 2022. 1. 29.

1 ๊ธฐ์˜จ๋ฐ์ดํ„ฐ ๋ถ„์„์‹œ์ž‘ํ•˜๊ธฐ


#1 ๊ธฐ์˜จ ๊ณต๊ณต๋ฐ์ดํ„ฐ ์‚ดํŽด๋ณด๊ธฐ

๊ธฐ์ƒ์ž๋ฃŒ๊ฐœ๋ฐฉํฌํ„ธ : http://data.kma.go.kr

 

## ์ง€์—ญ๋ณ„ ๊ธฐ์˜จ ๋ฐ์ดํ„ฐ ๋‚ด๋ ค๋ฐ›์•„ ์‚ฌ์šฉํ•˜๊ธฐ

: ์ƒ๋‹จ๋ฉ”๋‰ด์˜ ๊ธฐํ›„ํ†ต๊ณ„๋ถ„์„ - ๊ธฐ์˜จ๋ถ„์„ → ๊ฒ€์ƒ‰ ์กฐ๊ฑด ์„ค์ •ํ•˜๊ณ  csv๋‹ค์šด๋กœ๋“œ ๋ˆ„๋ฅด๊ธฐ

#2 CSVํŒŒ์ผ

CSV (Comma-Separated Values) : ๊ฐ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์ฝค๋งˆ(,)๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ํŒŒ์ผ ํ˜•์‹

#3 ๋ฐ์ดํ„ฐ ๋ถ„์„์— ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ

- ์ปดํ“จํ„ฐ์—์„œ CSV ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋ ค๋ฉด ์‚ฌ๋žŒ์˜ ์ƒ๊ฐ์„ ์ปดํ“จํ„ฐ๊ฐ€ ์•Œ์•„๋“ค์„ ์ˆ˜์žˆ๋Š” ์–ธ์–ด๋กœ ๋ฐ”๊พธ์–ด์ค„ ๋ช…๋ น์–ด๊ฐ€ ํ•„์š”
→ ์ด๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด : ํŒŒ์ด์ฌ(Python), R ๋“ฑ

# ํŒŒ์ด์ฌ Python

- ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•˜๋Š”๋ฐ ํŽธ๋ฆฌํ•จ
- ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ์Œ → ๋ฒˆ๊ฑฐ๋กœ์›€์„ ๋œ์–ด์ฃผ๋Š” ๋„๊ตฌ '์•„๋‚˜์ฝ˜๋‹ค'

# ์•„๋‚˜์ฝ˜๋‹ค Anaconda

- ์•„๋‚˜์ฝ˜๋‹ค๋ฅผ ์„ค์น˜ํ•˜๋ฉด ํŒŒ์ด์ฌ์€ ๋ฌผ๋ก  ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Œ
- ์•„๋‚˜์ฝ˜๋‹ค์™€ ํ•จ๊ป˜ ์„ค์น˜๋˜๋Š” ์ฃผํ”ผํ„ฐ๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฒฐ๊ณผ ํ™•์ธ ๊ฐ€๋Šฅ

# ์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ

- ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ฐœ๋ฐœํ™˜๊ฒฝ ์ œ๊ณต
์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฝ”๋“œ์™€ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ•˜๋‚˜์˜ ๋ฌธ์„œ์ฒ˜๋Ÿผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ถˆ๋กœ์˜จ ํ›„ ์ผ๋ถ€ ์ฝ”๋“œ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ


2 ์„œ์šธ์˜ ๊ธฐ์˜จ ๋ฐ์ดํ„ฐ ๋ถ„์„ํ•˜๊ธฐ


#1 CSVํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ ์ฝ์–ด์˜ค๊ธฐ

# csv.reader()

: CSV ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ํ•จ์ˆ˜

# csv.writer()

: CSV ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํ•จ์ˆ˜

 

โ‘  CSV ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ
โ‘ก ์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ ์‹คํ–‰ํ•˜๊ธฐ

import csv
f = open('seoul.csv', 'r', encoding = 'cp949')
data = csv.reader( f, delimiter = ',' )
print(data)
f.close()

- CSV ํŒŒ์ผ๊ณผ ํŒŒ์ด์ฌ ํŒŒ์ผ์˜ ์ €์žฅ ์œ„์น˜๋Š” ๋™์ผํ•ด์•ผ ํ•จ !!!!!!
- encoding์€ ์ธ์ฝ”๋”ฉ๋ฐฉ์‹์„ ์˜๋ฏธ + cp949๋Š” Windows ํ•œ๊ธ€ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹
- delimiter์€ ๊ตฌ๋ถ„๋ฌธ์ž !! ์ฆ‰, CSV ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝค๋งˆ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์ €์žฅํ•˜๋ผ๋Š” ์˜๋ฏธ

 

#2 ๋ฐ์ดํ„ฐ ์ถœ๋ ฅํ•˜๊ธฐ

- for ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด CSV ํŒŒ์ผ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ์ค„์”ฉ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ

Q. ์™œ ๊ฐ ํ–‰์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋Œ€๊ด„ํ˜ธ์— ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์žˆ์–ด์š” ?

A. ๋Œ€๊ด„ํ˜ธ์— ๋‘˜๋Ÿฌ์‹ธ์ธ ๋ฐ์ดํ„ฐ๋ฅผ '๋ฆฌ์ŠคํŠธ'๋ผ๊ณ  ํ•จ
๊ฐ ํ–‰์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ํŠน์„ฑ์„ ํ™œ์šฉํ•ด ์ธ๋ฑ์‹ฑ๊ณผ ์Šฌ๋ผ์ด์‹ฑ์„ ํ•  ์ˆ˜ ์žˆ์Œ

Q. ์™œ ๊ฐ ํ–‰์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž‘์€๋ ์—„ํ‘œ์— ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์žˆ์–ด์š”?

A. ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ(string)๋กœ ์ด๋ฃจ์–ด์กŒ์Œ์„ ์˜๋ฏธ !!
๋•Œ๋ฌธ์— ํ›„์— ์‹ค์ˆ˜(float)์˜ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜์ด ํ•„์š”

#3 ํ—ค๋” ์ €์žฅํ•˜๊ธฐ

# ํ—ค๋”

: ๋ฐ์ดํ„ฐ ํŒŒ์ผ์—์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ฐ’๋“ค์ด ์–ด๋–ค ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”์ง€ ํ‘œ์‹œํ•œ ํ–‰

* ํ—ค๋”๋ฅผ ๋ณ„๋„์˜ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋ ค๋ฉด? next() ํ•จ์ˆ˜ ์‚ฌ์šฉ

header = next(data)

# next() ํ•จ์ˆ˜

: ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ํ–‰์„ ์ฝ์–ด์˜ค๋ฉด์„œ ๋ฐ์ดํ„ฐ์˜ ํƒ์ƒ‰ ์œ„์น˜๋ฅผ ๋‹ค์Œ ํ–‰์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๋ช…๋ น์–ด

→ ์ฆ‰, next()ํ•ด์ฃผ๋ฉด ํ—ค๋”๊ฐ€ ๋”ฐ๋กœ ์ €์žฅ๋˜์–ด ๋‘ ๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ ์ถœ๋ ฅ๋จ

#4 ๊ธฐ์˜จ ๊ณต๊ณต๋ฐ์ดํ„ฐ์— ์งˆ๋ฌธํ•˜๊ธฐ

๋ฐ์ดํ„ฐ ๋ถ„์„์€ ๋‚ด๊ฐ€ ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ํ˜ธ๊ธฐ์‹ฌ์—์„œ ์ถœ๋ฐœํ•œ๋‹ค
๋‚˜์™€ ์ง์ ‘์ ์œผ๋กœ ๊ด€๋ จ์ด ์žˆ๋Š” ๋งค๋ ฅ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ธด๋‹ค

 


3 ์„œ์šธ์ด ๊ฐ€์žฅ ๋”์› ๋˜ ๋‚ ์€ ์–ธ์ œ์˜€์„๊นŒ


#1 ์งˆ๋ฌธ ๋‹ค๋“ฌ๊ธฐ

์„œ์šธ์ด ๊ฐ€์žฅ ๋”์› ๋˜ ๋‚ ์€ ์–ธ์ œ์˜€์„๊นŒ ? → ์„œ์šธ์˜ ์ตœ๊ณ  ๊ธฐ์˜จ์ด ๊ฐ€์žฅ ๋†’์•˜๋˜ ๋‚ ์€?

#2 ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๊ตฌ์ƒํ•˜๊ธฐ

(1) ๋ฐ์ดํ„ฐ ์ฝ์–ด์˜ค๊ธฐ
(2) ์ˆœ์ฐจ์ ์œผ๋กœ ์ตœ๊ณ  ๊ธฐ์˜จ ํ™•์ธ
(3) ์ตœ๊ณ  ๊ธฐ์˜จ์ด ๊ฐ€์žฅ ๋†’์•˜๋˜ ๋‚ ์งœ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ๋ณ€์ˆ˜์— ์ €์žฅ
(4) ์ตœ์ข… ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ

 

#3 ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

(1) ํ˜„์žฌ ์ตœ๊ณ  ๊ธฐ์˜จ ๋ฐ์ดํ„ฐ๋Š” ์ˆซ์žํ˜•์ด ์•„๋‹Œ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ ์ˆซ์žํƒ€์ž… ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ํ•„์š”
float() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ˆ˜๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

import csv
f= open('seoul.csv')
data = csv.reader(f)
header = next(data)

for row in data :
row[-1] = float(row[-1])
print(row)
f.close()

- row[-1]์„ ์ง€์ •ํ•œ ์ด์œ ๋Š” ์ตœ๊ณ  ๊ธฐ์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์—ด์— ์œ„์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ

# ์—๋Ÿฌ์˜ ๋ฐœ์ƒ

ValueError: could not convert string to float:

- ๋ฌธ์ž์—ด์„ ์‹ค์ˆ˜๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์—๋Ÿฌ
- ๋ฌธ์ž์—ด์˜ ์ตœ๊ณ  ๊ธฐ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ˆ˜ ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ๋˜ ์ค‘ ๋นˆ ๋ฌธ์ž์—ด์„ ์–ด๋– ํ•œ ์‹ค์ˆ˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์•ผ ํ• ์ง€ ๋ชฐ๋ผ์„œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
๋นˆ ๊ฐ’์„ ๋Œ€์ฒดํ•  ํŠน์ • ๊ฐ’ ๋„ฃ๊ธฐ → ๋นˆ๋ฌธ์ž์—ด์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ ˆ๋Œ€ ์ตœ๊ณ ๊ธฐ์˜จ์ด ๋  ์ˆ˜ ์—†๋Š” ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ธ -999๋„ฃ๊ธฐ

for row in data :
if row[-1] == '' :
row[-1] = -999
row[-1] = float(row[-1])
print(row)
f.close()

# ํƒ์ƒ‰๊ณผ ๋น„๊ต์˜ ๊ณผ์ •

- ๋จผ์ € ๊ธฐ์ค€์ด ๋˜๋Š” ๊ฐ’์„ ์„ค์ •ํ•˜๊ณ  ๊ธฐ์ค€ ๊ฐ’๊ณผ ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋น„๊ต
- ๊ธฐ์ค€์ด ๋˜๋Š” ๊ฐ’์„ ์ €์žฅํ•  ๊ณต๊ฐ„์ธ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”
- ์ตœ๊ณ  ๊ธฐ์˜จ์„ ์ €์ •ํ•  ๋ณ€์ˆ˜(max_temp)์™€ ์ตœ๊ณ  ๊ธฐ์˜จ์ด ๊ฐ–์•„ ๋†’์€ ๋‚ ์˜ ๋‚ ์งœ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜(max_date)๋ฅผ ๋งŒ๋“ฆ

import csv
max_temp = -999
max_date = ''
f = open ~~~

** ์ตœ๊ณ  ๊ธฐ์˜จ๋ณด๋‹ค ๋” ๋†’์€ ๊ธฐ์˜จ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ €์žฅ๋œ ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ํ•˜๋Š” ์ฝ”๋“œ

if max_temp < row[-1] :
max_date = row[0]
max_temp = row