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