ใ ์ฃผํผํฐ ๋ ธํธ๋ถ์ ํ์ฉํ ๋ฐ์ดํฐ ์๊ฐํ ใ
[ ์ฃผํผํฐ ๋ ธํธ๋ถ ]
- ์ฃผํผํฐ ๋ ธํธ๋ถ(Jupyter Notebook)์ด๋ Jupyter์์ ์ ์ํ ํ์ด์ฌ์ฉ ํตํฉ ๊ฐ๋ฐํ๊ฒฝ(IDE)์ด๋ค.
- ์ฝ๋๋ฅผ ํ์ค์ฉ ์์ฑํ์ฌ ์คํ, ๊ฒฐ๊ณผ ํ์ธ์ด ๊ฐ๋ฅ
[ ์๋์ฝ๋ค ]
- ์๋์ฝ๋ค(Anaconda)๋ Anaconda์ฌ์์ ํ์ด์ฌ ๋ฐ R์ธ์ด ํจํค์ง, ์์กด์ฑ ๊ด๋ฆฌ ๋ฐ ๋ฐฐํฌ ๋ฑ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์กฐ๊ฑด๋ถ ๋ฌด๋ฃ ์คํ ์์ค SW์ด๋ค.
- ์๋์ฝ๋ค ์ค์น ์ ์ฃผํผํฐ ๋ ธํธ๋ถ์ด ํจ๊ป ์ค์น๋๋ฉฐ ์๋์ฝ๋ค ๊ฐ์ํ๊ฒฝ์ ํตํด ์คํ ๊ฐ๋ฅ
- ๋ณธ์ธ PC์ OS์ ์ฌ์์ ๋ง๊ฒ ์ค์นํ์ฌ ์ด์ฉ
ใ ์๋์ฝ๋ค ์ค์น ๋งํฌ ใ
www.anaconda.com/products/individual
Anaconda | Anaconda Distribution
Anaconda's open-source Distribution is the easiest way to perform Python/R data science and machine learning on a single machine.
www.anaconda.com
[ ์ฃผํผํฐ ๋ ธํธ๋ถ ์คํ ]
- ์ฃผํผํฐ ๋ ธํธ๋ถ ์คํ์ ์๋์ฝ๋ค ๊ฐ์ํ๊ฒฝ์ ํตํด ์คํ๋๋ค.
- ์ด๊ธฐ ์ฃผํผํฐ ๋ ธํธ๋ถ์ ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ [ C๋๋ผ์ด๋ธ > ์ฌ์ฉ์ > ์ฌ์ฉ์ ์ด๋ฆ ] ์ด๋ฉฐ
์ฌ์ฉ์ ์ด๋ฆ ํด๋ ์์ ๋ชจ๋ ํ์ผ์ ํ์ธํ ์ ์๋ค.
- ์ค์ต์ฉ ํด๋๋ฅผ ์์ฑ ํ ์ค์ต์ ์ฌ์ฉ๋ csvํ์ผ์ ํด๋น ๊ฒฝ๋ก์ ์ ์ฅํ๋ค.
- seoul.csv : ์ฐ๋๋ณ ์์ธ์์ ํ๊ท /์ต์ /์ต๊ณ ๊ธฐ์จ์ด ์ ์ฅ๋์ด ์๋ ๊ณต๊ณต๋ฐ์ดํฐ ํ์ผ
[ csv ๋ชจ๋์ ์ฌ์ฉํ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ์์ ]
โ ๋ฐ์ดํฐ์ ๋ชจ๋ ํ ์ถ๋ ฅ
# Jupyter Notebook
import csv
f = open('seoul.csv', 'r', encoding='cp949')
# reader(csvfile, dialect='', **fmtparams) : iterator ํ์
์ reader ๊ฐ์ฒด๋ฅผ ๋ฐํ
# ๋ฐํ๋๋ ๊ฐ ๋ผ์ธ์ ์ปฌ๋ผ๋ค์ ๋์ด(list type)
data = csv.reader(f, delimiter=',')
for row in data :
print(row)
f.close()
############ [์คํ ๊ฒฐ๊ณผ] ############
['๋ ์ง', '์ง์ ', 'ํ๊ท ๊ธฐ์จ(โ)', '์ต์ ๊ธฐ์จ(โ)', '์ต๊ณ ๊ธฐ์จ(โ)']
['1907-10-01', '108', '13.5', '7.9', '20.7']
['1907-10-02', '108', '16.2', '7.9', '22']
...
โก ๋ฐ์ดํฐ์ ์ฒซ๋ฒ์งธ ํ(ํค๋) ์ถ์ถ ํ ์ถ๋ ฅ
# Jupyter Notebook
import csv
f =open('seoul.csv')
data = csv.reader(f)
# next(iterator[, default]) : ์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ ํ์ ์ฝ์ด์ค๊ณ
# ๋ฐ์ดํฐ ํ์ ์์น๋ฅผ ๋ค์ ํ์ผ๋ก ์ด๋
header =next(data)
print(header)
f.close()
############ [์คํ ๊ฒฐ๊ณผ] ############
['๋ ์ง', '์ง์ ', 'ํ๊ท ๊ธฐ์จ(โ)', '์ต์ ๊ธฐ์จ(โ)', '์ต๊ณ ๊ธฐ์จ(โ)']
โข ๋ฐ์ดํฐ์ ์ฒซ๋ฒ์งธ ํ(ํค๋) ์ถ์ถ ํ ๋ฐ์ดํฐ์ ๋ชจ๋ ํ ์ถ๋ ฅ
# Jupyter Notebook
import csv
f =open('seoul.csv')
data = csv.reader(f)
header = next(data)
for row in data :
print(row)
# next() ํจ์๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ฒซ๋ฒ์งธ ํ์ ์ฝ์ด์ค๊ณ ๋ค์ ํ์ผ๋ก ์ด๋ ํ๊ธฐ์ ์ฒซ๋ฒ์งธ ํ ์ถ๋ ฅx
f.close()
############ [์คํ ๊ฒฐ๊ณผ] ############
['1907-10-01', '108', '13.5', '7.9', '20.7']
['1907-10-02', '108', '16.2', '7.9', '22']
...
โฃ ๋ฐ์ดํฐ์ ์ต๊ณ ๊ธฐ์จ ์ค ์ต๋๊ฐ ์ฐพ๊ธฐ (1)
# Jupyter Notebook
import csv
f =open('seoul.csv')
data = csv.reader(f)
header =next(data)
for row in data :
# row[3] = float(row[3])
row[-1] = float(row[-1]) # ์ต๊ณ ๊ธฐ์จ์ด์ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ค์ ์ค์๋ก ๋ณํ
print(row)
f.close()
############ [์คํ ๊ฒฐ๊ณผ] ############
['1907-10-01', '108', '13.5', '7.9', 20.7]
['1907-10-02', '108', '16.2', '7.9', 22.0]
...
['1950-08-31', '108', '25.4', '20.1', 32.5]
--------------------------------------------
ValueError: could not convert string to float: ''
โฃ ๋ฐ์ดํฐ์ ์ต๊ณ ๊ธฐ์จ ์ค ์ต๋๊ฐ ์ฐพ๊ธฐ (2)
# Jupyter Notebook
# ๋๋ฝ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ ์์์ ๊ฐ์ผ๋ก ๋์ฒดํ์ฌ ํ์
import csv
max_temp =-999 # ์ต๊ณ ๊ธฐ์จ ๊ฐ์ ์ ์ฅํ ๋ณ์
max_date ='' # ์ต๊ณ ๊ธฐ์จ์ด ๊ฐ์ฅ ๋์๋ ๋ ์ง๋ฅผ ์ ์ฅํ ๋ณ์
f =open('seoul.csv')
data = csv.reader(f)
header =next(data) # ํค๋ ์ถ์ถ
for row in data :
# ์ต๊ณ ๊ธฐ์จ๊ฐ์ด ๋๋ฝ๋์ด ์๋ ๊ฒฝ์ฐ -999์ ๊ฐ์ ์ฝ์
ํ์ฌ ๋์ฒด
if row[-1] =='' :
row[-1] =-999
row[-1] = float(row[-1])
# ์ต๊ณ ๊ธฐ์จ ๋ฐ์ดํฐํ ๋ฐ๊ฒฌ ์ max_temp, mex_date ๋ฅผ ํด๋น ํ์ ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝ
if max_temp < row[-1] :
max_date = row[0]
max_temp = row[-1]
f.close()
print('๊ธฐ์ ๊ด์ธก ์ด๋ ์์ธ์ ์ต๊ณ ๊ธฐ์จ์ด ๊ฐ์ฅ ๋์๋ ๋ ์',max_date,'๋ก, ',max_temp,'๋ ์์ต๋๋ค.')
############ [์คํ ๊ฒฐ๊ณผ] ############
๊ธฐ์ ๊ด์ธก ์ด๋ ์์ธ์ ์ต๊ณ ๊ธฐ์จ์ด ๊ฐ์ฅ ๋์๋ ๋ ์ 1994-07-24 ๋ก, 38.4 ๋ ์์ต๋๋ค.
[ maplotlib ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจํค์ง๋ฅผ ํตํ ๋ฐ์ดํฐ ์๊ฐํ ์์ ]
ใ matplotlib ํจํค์ง docs ใ
https://matplotlib.org/3.5.0/api/
โ ๊ทธ๋ํ ์์ฑ ์์ (1)
# Jupyter Notebook
import matplotlib.pyplot as plt
# plt.plot(x, y) : ์ง์ ํ๋กฏ์ ๊ทธ๋ฆฌ๋ ํจ์,
# x์ถ ๋ฏธ์ง์ ์ ์๋์ผ๋ก [0, 1, 2, 3] ๊ณผ ๊ฐ์ด ์ฐ์๋ x์ถ ๊ฐ ์๋ ์์ฑ
plt.plot([10, 20, 30, 40], color='pink', label='pink') # plot(label='') : ๋ฒ๋ก์ ํ์๋ ๋ ์ด๋ธ ๊ฐ ์ค์
plt.plot([40, 30, 20, 10], color='blue', label='blue') # plot(color='') : ๊ทธ๋ํ์ ์์ ์ง์
plt.title('plotting') # ๊ทธ๋ํ์ ์ ๋ชฉ, ์์น, ์คํ์
๋ฑ์ ์ง์ ํ๋ ํจ์
plt.legend() # ์ถ ๋ฐ/๋๋ ๊ทธ๋ฆผ๊ณผ ๊ด๋ จ๋ ๋ฒ๋ก๋ฅผ ๊ทธ๋ฆฌ๋ ํจ์
plt.show()
โ ๊ทธ๋ํ ์์ฑ ์์ (2)
# Jupyter Notebook
import matplotlib.pyplot as plt
# x,y์ถ์ ๊ฐ์ ๋๋ค ์ง์ ํ๋ ๊ฒฝ์ฐ
plt.plot([1,2,3,4], [12, 43, 25, 15])
plt.show()
โก ๊ทธ๋ํ์ ์ ์ข ๋ฅ ์ง์ ์์
# Jupyter Notebook
import matplotlib.pyplot as plt
plt.title('linestyle') # ๊ทธ๋ํ์ ์ ์ข
๋ฅ ์ง์ ํจ์
plt.plot([10, 20, 30, 40], color ='r', linestyle ='--', label='dashed') # ๋นจ๊ฐ์ dashed ๊ทธ๋ํ
plt.plot([40, 30, 20, 10], color ='g', ls =':', label ='dotted') # ์ด๋ก์ dotted ๊ทธ๋ํ
plt.legend()
plt.show()
[ maplotlib, csv ๋ชจ๋์ ์ด์ฉํ ๋ฐ์ดํฐ ์๊ฐํ ์์ ]
โ ์์ธ์ ์ต๊ณ ๊ธฐ์จ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
# Jupyter Notebook
import csv
f = open('seoul.csv')
data = csv.reader(f)
next(data)
result = [] # ์ต๊ณ ๊ธฐ์จ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ ์์ฑ
for row in data :
if row[-1] != '' : # data ์ ์ฒด ํ์ ์ต๊ณ ๊ธฐ์จ์ด์ ํ์, ์ต๊ณ ๊ธฐ์จ ์ด์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ
result.append(float(row[-1])) # result ๋ฆฌ์คํธ์ ์ต๊ณ ๊ธฐ์จ ๋ฐ์ดํฐ๋ฅผ ์ค์๋ก ๋ณํ ํ ์ ์ฅ
print(result)
print(len(result)) # ์ต๊ณ ๊ธฐ์จ ๋ฐ์ดํฐ์ ๊ฐ์(result ๋ฆฌ์คํธ์ ๊ธธ์ด) ์ถ๋ ฅ
############ [์คํ ๊ฒฐ๊ณผ] ############
[20.7, 22.0, 21.3, 22.0, 25.4, 21.3, 16.1,
...
, 11.6, 12.5, 13.1, 16.9, 18.1, 20.0, 19.0]
39168
โก ์์ธ์ ์ต๊ณ ๊ธฐ์จ ๋ฐ์ดํฐ ์๊ฐํ ์์ (1)
# Jupyter Notebook
import csv
import matplotlib.pyplot as plt
f = open('seoul.csv')
data = csv.reader(f)
next(data)
result = []
for row in data :
if row[-1] != '' :
result.append(float(row[-1]))
plt.plot(result, 'r') # result ๋ฆฌ์คํธ์ ์ ์ฅ๋ ์ต๊ณ ๊ธฐ์จ ๊ฐ๋ค์ ๋นจ๊ฐ์ ๊ทธ๋ํ๋ก ๊ทธ๋ฆฌ๊ธฐ
plt.show()
โก ์์ธ์ ์ต๊ณ ๊ธฐ์จ ๋ฐ์ดํฐ ์๊ฐํ ์์ (2)
# Jupyter Notebook
import matplotlib.pyplot as plt
# plt.figure() : plot์ ๋ชจ๋ ์ถ๊ณผ ์์ฑ์ ๋ด์ ์ต์์ ์ปจํ
์ด๋ ํจ์(์ฌ๋ฌ ์์ฑ์ ํตํด ๋ค์ํ ํํ ๊ฐ๋ฅ)
# plt.figure(figsize = (x, y), : plt ๊ทธ๋ํ์ ๊ทธ๋ฆผ์ ์น์ ์ง์ [๊ธฐ๋ณธ๊ฐ :(6.4, 4.8)]
# dpi = float_num ) : ์ธ์น๋น ๋ํธ ์ ์ง์ [๊ธฐ๋ณธ๊ฐ : 100.0]
plt.figure(figsize = (10,2), dpi = 300)
plt.plot(result, 'r')
plt.show()