AI ์ค๋ฌด ์์ฉ ๊ณผ์
[์์ฉ๊ต์ก๊ณผ์ ] ๋จธ์ ๋ฌ๋ ์์ํ๊ธฐ (1) ์๋ฃํํ, ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
๋จธ์ ๋ฌ๋ : ๋ช
์์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ์ง ์๊ณ ๋ ์ปดํจํฐ๊ฐ ํ์ตํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ฐ๊ฒ ํ๋ ๊ฒ
data -> case 1) action -> ๋ช
์์ ํ๋ก๊ทธ๋๋ฐ
data -> train ... predict action -> ๋จธ์ ๋ฌ๋
1) ์ง๋ํ์ต : ํ๊ท๋ถ์, ๋ถ๋ฅ
2) ๋น์ง๋ํ์ต
* ์ง๋ํ์ต VS ๋น์ง๋ํ์ต
์์ธกํด์ผํ ๊ฒฐ๊ณผ์ ๋ํ ์ ๋ต ๋ฐ์ดํฐ๊ฐ ์๋์ง ํ์ธํด๋ณด์.
ex. ์ฌ์ง์ ๋ฌผ์ฒด๋ฅผ ์์ธกํ๋ ๋ชจ๋ธ์ ๋ง๋ค๊ณ ์ถ์ ๋, ์ง๋ํ์ต ๋ชจ๋ธ์ ์ฌ์ง๊ณผ ๊ทธ์ ๋ํ ์ ๋ต์ ์ค๋ค. ๋น์ง๋ํ์ต์ ์ฌ์ง์ ์ฃผ๊ณ , ์ ๋ต์ ์ฃผ์ง ์๋๋ค.
3) ๊ฐํํ์ต : ๋ฐ์ดํฐ๊ฐ ์์ด๋ ๊ธฐ๊ณ๊ฐ ์ค์ค๋ก ํ์ตํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ , ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ํ์ตํ๋ค.
* ๋ฐ์ดํฐ ์ดํด > ๋ฐ์ดํฐ ์ฒ๋ฆฌ > ์ง๋ํ์ต ๋ชจ๋ธ
์๋ฃ์ ํํ
์๋ฃ์ ํํ ํ์
์ ํ์ ๊ณผ์ .
๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์๋?
์ด๋ค ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ฌ์ฉํด์ผ ํ ๊น?
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํด์ผํ ๊น?
์์นํ ์๋ฃ(=์์ ์๋ฃ) : ์์น๋ก ์ธก์ ๊ฐ๋ฅํ ์๋ฃ ex.ํค, ๋ชธ๋ฌด๊ฒ, ์ํ์ ์, ๋์ด
- ์์ํ ์๋ฃ : ๋ฒ์ฃผ ์ฌ์ด์ ์์์ ์๋ฏธ ์์ ex.ํ์
- ๋ช
๋ชฉํ ์๋ฃ : ๋ฒ์ฃผ ์ฌ์ด์ ์์์ ์๋ฏธ ์์ ex.ํ์กํ
๋ฒ์ฃผํ ์๋ฃ(=์ง์ ์๋ฃ) : ์์น๋ก ์ธก์ ์ด ๋ถ๊ฐ๋ฅํ ์๋ฃ. ex.์ฑ๋ณ, ์ง์ญ, ํ์กํ ๋ฑ
- ์ฐ์ํ ์๋ฃ : ์ฐ์์ ์ธ ๊ด์ธก๊ฐ์ ๊ฐ์ง ex.์์ฃผ์จ, ์๊ฐ
- ์ด์ฐํ ์๋ฃ : ์
์ ์๋ ๊ด์ธก๊ฐ์ ๊ฐ์ง ex.๋ด์ค ๊ธ์ ์, ์ฃผ๋ฌธ์ํ ๊ฐ์
* ์ฃผ์! ์๋ฃ์ ์ซ์ ํํ ๊ฐ๋ฅ ์ฌ๋ถ๊ฐ ๋ฒ์ฃผํ/์์นํ์ ๋๋์ง๋ ์๋๋ค.
ex. ๋จ๋
์ฑ๋ณ ๊ตฌ๋ถ ์, ๋จ์๋ฅผ 1 ์ฌ์๋ฅผ 0์ผ๋ก ํํํ๋ ๊ฒฝ์ฐ, ์ซ์๋ก ํํ๋์์ผ๋ ๋ฒ์ฃผํ ์๋ฃ.
ex2. ๋์ด ๊ตฌ๋ถ ์, ๋์ด ๊ฐ์ ์์นํ ์๋ฃ์ง๋ง, 10~19์ธ, 20~29์ธ ๋ฑ ๋์ด๋์ ๋ฐ๋ผ ๊ตฌ๊ฐํํ๋ฉด ๋ฒ์ฃผํ ์๋ฃ.
๋ฒ์ฃผํ ์๋ฃ
๋ค์์ ๋ฒ์ฃผ๊ฐ ๋ฐ๋ณตํด์ ๊ด์ธก
๊ด์ธก๊ฐ์ ํฌ๊ธฐ๋ณด๋ค ํฌํจ๋๋ ๋ฒ์ฃผ์ ๊ด์ฌ
1) ๊ฐ ๋ฒ์ฃผ์ ์ํ๋ ๊ด์ธก๊ฐ์ ๊ฐ์๋ฅผ ์ธก์
2) ์ ์ฒด์์ ์ฐจ์งํ๋ ๊ฐ ๋ฒ์ฃผ์ ๋น์จ ํ์
3) ํจ์จ์ ์ผ๋ก ๋ฒ์ฃผ ๊ฐ ์ฐจ์ด์ ์ ๋น๊ต ๊ฐ๋ฅ
๋์๋ถํฌํ (๋ํ์ )
๋ฒ์ฃผํ ์๋ฃ์์ ๋ฒ์ฃผ์ ๊ทธ ๋ฒ์ฃผ์ ๋์ํ๋ ๋์, ์๋๋์๋ฅผ ๋์ดํด ํ๋ก ๋ง๋ ๊ฒ
๋์ : ๊ฐ ๋ฒ์ฃผ์ ์ํ๋ ๊ด์ธก๊ฐ์ ๊ฐ์. value_counts()
์๋๋์ : (=๋ฐฑ๋ถ์จ) ๋์๋ฅผ ์๋ฃ์ ์ ์ฒด ๊ฐ์๋ก ๋๋ ๋น์จ. value_counts()(normalize = True)
๋์ ์๋ ๋์ : ์ฒซ๋ฒ์งธ ์๋๋์ + ๋ค์ ์๋๋์๋ฅผ ๋์ ์์ผ ๋๊ฐ ๊ฐ. ์ต์ข
๊ฐ์ด 1
๋ง๋ ๊ทธ๋ํ
๊ฐ ๋ฒ์ฃผ์์ ๋์์ ํฌ๊ธฐ๋ฅผ ๋ง๋๋ก ๊ทธ๋ฆผ. plt.bar()
y์ถ : ๋์์ ๋ํ ๋๊ธ
x์ถ : ๋ฒ์ฃผ ๋์ด
์ฅ์ : ๋ฒ์ฃผ๊ฐ ๊ฐ์ง๋ ๋์์ ํฌ๊ธฐ ์ฐจ์ด ๋น๊ต๊ฐ ์ฌ์
๋จ์ : ๋ฒ์ฃผ๊ฐ ์ฐจ์งํ๋ ๋น์จ์ ๋น๊ต๋ ์ด๋ ค์
[์ฐ์ต๋ฌธ์ ]
drink.csv์์ ์ฐธ์ํ ์ฌ๋ ์ค ์ด๋ฆ์ ๋ฐ๋ฅธ ๋์๋ฅผ ๊ณ์ฐํ ์ฝ๋๋ฅผ ์
๋ ฅํ์ฌ drink_freq ์ ์ ์ฅํด๋ณด์ธ์.
import pandas as pd
import numpy as np
# drink ๋ฐ์ดํฐ
drink = pd.read_csv("drink.csv")
#1. ๋์ ๊ณ์ฐ
drink_freq = drink[drink['Attend']==1]['Name'].value_counts()
print("๋์๋ถํฌํ")
print(drink_freq)
[์ฐ์ต๋ฌธ์ 2]
์ฐธ์ ๋น์จ(ratio)์ ๊ธฐ์ค์ผ๋ก ๋ง๋๊ทธ๋ํ ๋ง๋์ ํฌ๊ธฐ๋ฅผ ๋ค๋ฅด๊ฒ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ถ๋ ฅํ์ธ์.
from elice_utils import EliceUtils
import matplotlib.pyplot as plt
elice_utils = EliceUtils()
# ์ ์๋ฆฌ ์ฐธ์ ์๋๋์ ๋ฐ์ดํฐ
labels = ['A', 'B', 'C', 'D', 'E']
ratio = [4,3,2,2,1]
#๋ง๋ ๊ทธ๋ํ
fig, ax = plt.subplots()
#1. ๋ง๋ ๊ทธ๋ํ๋ฅผ ๋ง๋๋ ์ฝ๋๋ฅผ ์์ฑํด ์ฃผ์ธ์
#plt.bar(labels,ratio)
# ์ถ๋ ฅ์ ํ์ํ ์ฝ๋
plt.show()
fig.savefig("bar_plot.png")
elice_utils.send_image("bar_plot.png")
์์นํ ์๋ฃ
์์น๋ก ๊ตฌ์ฑ๋์ด ์์ด ํต๊ณ๊ฐ์ ์ฌ์ฉํ ์์ฝ์ด ๊ฐ๋ฅ
์๊ฐ์ ์๋ฃ๋ก๋ ์ด๋ก ์ ๊ทผ๊ฑฐ ์ ์๊ฐ ์ฝ์ง ์๋ค๋ ๋จ์ ๋ณด์
-> ๋ง์ ์์ ์๋ฃ๋ฅผ ์๋ฏธ์๋ ์์น๋ก ์์ฝํ์ฌ ๋๋ต์ ์ธ ๋ถํฌ์ํ๋ฅผ ํ์
๊ฐ๋ฅ
ํ๊ท (=์ฐ์ ํ๊ท ) mp.mean()
๊ด์ธก๊ฐ๋ค์ ๋ํํ ์ ์๋ ํต๊ณ๊ฐ
์์นํ ์๋ฃ์ ํต๊ณ๊ฐ ์ค ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ
๋ชจ๋ ๊ด์ธก๊ฐ์ ํฉ์ ์๋ฃ์ ๊ฐ์๋ก ๋๋ ๊ฒ
๋จ์ : ๊ทน๋จ์ ์ผ๋ก ํฐ ๊ฐ๊ณผ ์์ ๊ฐ์ ์ํฅ์ ๋ง์ด ๋ฐ๋๋ค
ํผ์ง ์ ๋์ ์ธก๋
ํ๊ท ๋ง์ผ๋ก ๋ถํฌ๋ฅผ ํ์
ํ๊ธฐ์ ๋ถ์กฑ
ํ๊ท ์ธ์ ๋ถํฌ๊ฐ ํผ์ง ์ ๋๋ฅผ ์ธก๋ํ ์์น๊ฐ ํ์
๋ถ์ฐ, ํ์คํธ์ฐจ ๋ฑ์ ํผ์ง ์ ๋์ ์ธก๋๋ก ์ฌ์ฉ
*ํน์ง : ํ๊ท ์ด ๋ชจ๋ ๊ฐ์ง๋ง ๊ณก์ ์ด ๋ค๋ฅด๋ค. WHY? ๋ถ์ฐ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ
๋ถ์ฐ from statistics import variance variance()
์๋ฃ๊ฐ ์ผ๋ง๋ ํฉ์ด์ก๋์ง ์ซ์๋ก ํํ
๊ฐ ๊ด์ธก๊ฐ์ด ์๋ฃ์ ํ๊ท ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์ ๋
ํ์คํธ์ฐจ from statistics import stdev stdev()
๋ถ์ฐ์ ๋จ์ = ๊ด์ธก๊ฐ์ ๋จ์์ ์ ๊ณฑ (๊ด์ธก๊ฐ์ ๋จ์์ ๋ถ์ผ์น)
๋ถ์ฐ์ ์์ ์ ๊ณฑ๊ทผ์ ๊ด์ธก๊ฐ์ ๋จ์๊ฐ ์ผ์น
๋ถ์ฐ์ ์์ ์ ๊ณฑ๊ทผ์ ํ์คํธ์ฐจ๋ผ ํ๊ณ , s๋ก ํ๊ธฐํ๋ค
ํ์คํ ๊ทธ๋จ plt.hist()
์์นํ ์๋ฃ๋ฅผ ์ผ์ ํ ๋ฒ์๋ฅผ ๊ฐ๋ ๋ฒ์ฃผ๋ก ๋๋๊ณ , ๋ง๋๊ทธ๋ํ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ทธ๋ฆฐ๋ค
์๋ฃ์ ๋ถํฌ๋ฅผ ์ ์ ์์
๊ณ๊ธ๊ตฌ๊ฐ๊ณผ ๋ง๋์ ๋์ด๋ก ๊ทธ๋ฆผ
๋์, ์๋๋์๋ฅผ ๋ง๋ ๋์ด๋ก ์ฌ์ฉ
* ๋ฒ์ฃผ : ๋ง๋๊ทธ๋ํ / ์์น : ํ์คํ ๊ทธ๋จ
[์ฐ์ต๋ฌธ์ ]
coffee์ ์ ์ฅ๋ ์นดํ์ธ ํจ๋ ๊ฐ๋ค์ ํ๊ท ์ ๊ณ์ฐํ์ฌ cf_mean ์ ์ ์ฅํด๋ด
์๋ค.
import numpy as np
coffee = np.array([202,177,121,148,89,121,137,158])
#1. ํ๊ท ๊ณ์ฐ
cf_mean = np.mean(coffee)
#์์์ ๋์งธ ์๋ฆฌ๊น์ง ๋ฐ์ฌ๋ฆผํ์ฌ ์ถ๋ ฅํฉ๋๋ค.
print("Mean :", round(cf_mean,2))
[์ฐ์ต๋ฌธ์ 2]
coffee์ ์ ์ฅ๋ ์นดํ์ธ ํจ๋ ๊ฐ๋ค์ ํ์คํธ์ฐจ๋ฅผ ๊ณ์ฐํด์ cf_std ์ ์ ์ฅํด์ ํ์ธํด๋ด
์๋ค.
from statistics import stdev
import numpy as np
coffee = np.array([202,177,121,148,89,121,137,158])
#1. ํ์คํธ์ฐจ ๊ณ์ฐ
cf_std = stdev(coffee)
# ์์์ ๋์งธ ์๋ฆฌ๊น์ง ๋ฐ์ฌ๋ฆผํ์ฌ ์ถ๋ ฅํฉ๋๋ค.
print("Sample std.Dev : ", round(cf_std,2))
[์ฐ์ต๋ฌธ์ 3]
์ฝ๋ ์
๋ ฅ์ฐฝ์ ํ์คํ ๊ทธ๋จ์ ๊ทธ๋ฆฌ๋ ์ฝ๋๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from elice_utils import EliceUtils
elice_utils = EliceUtils()
#์นดํ์ธ ๋ฐ์ดํฐ
coffee = np.array([202,177,121,148,89,121,137,158])
fig, ax = plt.subplots()
#1. ํ์คํ ๊ทธ๋จ์ ๊ทธ๋ฆฌ๋ ์ฝ๋๋ฅผ ์์ฑํด ์ฃผ์ธ์
plt.hist(coffee)
# ํ์คํ ๊ทธ๋จ์ ์ถ๋ ฅํฉ๋๋ค.
plt.show()
fig.savefig("hist_plot.png")
elice_utils.send_image("hist_plot.png")
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ
๋จธ์ ๋ฌ๋ ๊ณผ์ ์ดํดํ๊ธฐ
1) ํฌ๋กค๋ง or DB๋ฐ์ดํฐ๋ฅผ ํตํด ๋ฐ์ดํฐ ์์ง
2) ์์งํ ๋ฐ์ดํฐ๋ฅผ ๋ถ์, ๋จธ์ ๋ฌ๋์ ์ฌ์ฉํ ํํ๋ก ์ ์ฒ๋ฆฌ
3) ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ํ์ต
4) ํ์ต๋ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ํ๊ฐ์ฉ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด ํ๊ฐ
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ์ ์ญํ
1) ๋จธ์ ๋ฌ๋์ ์
๋ ฅ ํํ๋ก ๋ฐ์ดํฐ ๋ณํ (=ํน์ฑ ์์ง๋์ด๋ง)
2) ๊ฒฐ์ธก์น ๋ฐ ์ด์์น๋ฅผ ์ฒ๋ฆฌํ์ฌ ๋ฐ์ดํฐ ์ ์
3) ํ์ต์ฉ ๋ฐ ํ๊ฐ์ฉ ๋ฐ์ดํฐ ๋ถ๋ฆฌ
์ ์ ์ฒ๋ฆฌ๊ฐ ํ์ํ๊ฐ?
๋๋ถ๋ถ์ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ซ์ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅ๋ฐ๋๋ค (์ผ๋ฐ์ ์ผ๋ก ํ๋ ฌ ํํ ์
๋ ฅ)
์ค์ ๋ฐ์ดํฐ๋ ๋ค์ํ ํํ(์ด๋ฏธ์ง, ์์ฐ์ด, ๋ฒ์ฃผํ, ์๊ณ์ด)๋ก ์กด์ฌํ๋ค -> ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ด ์ดํดํ ์ ์์
๊ทธ๋ฌ๋ฏ๋ก ์ ์ฒ๋ฆฌ๋ฅผ ํตํด ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ด ์ดํดํ ์ ์๋ ์์นํ ์๋ฃ๋ก ๋ณํํด์ผ ํ๋ค.
๊ฒฐ์ธก๊ฐ๊ณผ ์ด์์น๊ฐ ์๋ ๋ฐ์ดํฐ๋ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ๋จ์ด์ง๊ฑฐ๋, ์์ ์ฌ์ฉํ ์ ์๋ค.
ํ์ต์ฉ๊ณผ ํ๊ฐ์ฉ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํด์ ๊ฐ๊ด์ฑ์ ๋์ผ ์ ์๋ค.
๋ฒ์ฃผํ์๋ฃ ์ ์ฒ๋ฆฌ
๋ฒ์ฃผํ ๋ฐ์ดํฐ : ๋ช ๊ฐ์ ๋ฒ์ฃผ๋ก ๋๋์ด์ง ์๋ฃ
๋ฒ์ฃผ์ ํฌ๊ธฐ๊ฐ ์๋ฏธ์์ผ๋ฉด ๋ช
๋ชฉํ์๋ฃ
ํฌ๊ธฐ๊ฐ ์๋ฏธ์๋ค๋ฉด ์์ํ ์๋ฃ
๋ํ์ ์ธ ๋ฒ์ฃผํ ์๋ฃ ๋ณํ ๋ฐฉ์
- ๋ช
๋ชฉํ ์๋ฃ : ์์น ๋งตํ ๋ฐฉ์, ๋๋ฏธ ๊ธฐ๋ฒ
- ์์ํ ์๋ฃ : ์์น ๋งตํ ๋ฐฉ์
1) ๋ช
๋ชฉํ ์๋ฃ ๋ณํ (์์น ๋งตํ ๋ณํ)
์ผ๋ฐ์ ์ผ๋ก ๋ฒ์ฃผ๋ฅผ 0,1๋ก ๋งตํ
(-1, 1), (0, 100) ๋ฑ ๋ค์ํ ์ผ์ด์ค๊ฐ ์์ง๋ง ๋ชจ๋ธ์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ๋ฌ๋ผ์ง ์ ์๋ค.
3๊ฐ ์ด์์ธ ๊ฒฝ์ฐ, ์์น์ ํฌ๊ธฐ ๊ฐ๊ฒฉ์ ๊ฐ๊ฒ ํ์ฌ ์์น ๋งตํ ex. (0, 1, 2, 3,...)
2) ๋ช
๋ชฉํ ์๋ฃ ๋ณํ (๋๋ฏธdummy ๊ธฐ๋ฒ)
๊ฐ ๋ฒ์ฃผ๋ฅผ 0 or 1๋ก ๋ณํ
3) ์์ํ ์๋ฃ ๋ณํํ๊ธฐ (์์น ๋งตํ ๋ณํ)
์์น์ ๋งตํํ์ฌ ๋ณํํ์ง๋ง, ์์น ๊ฐ ํฌ๊ธฐ ์ฐจ์ด๋ ์ปค์คํ
๊ฐ๋ฅ
ํฌ๊ธฐ ์ฐจ์ด๊ฐ ๋จธ์ ๋ฌ๋ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ผ์น ์ ์์
[์ฐ์ต๋ฌธ์ ]
์ฑ๋ณ(‘Sex’) ๋ณ์์์ male ๋ฐ์ดํฐ๋ 0, female ๋ฐ์ดํฐ๋ 1๋ก ๋ณํํ์ฌ titanic ๋ฐ์ดํฐํ๋ ์์ ์ ์ฅํด ๋ด
์๋ค.
import pandas as pd
from elice_utils import EliceUtils
elice_utils = EliceUtils()
# ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ต๋๋ค.
titanic = pd.read_csv('./data/titanic.csv')
print('๋ณํ ์ : \n',titanic['Sex'].head())
#1. replace๋ฅผ ์ฌ์ฉํ์ฌ male -> 0, female -> 1๋ก ๋ณํํฉ๋๋ค.
titanic = titanic.replace({'male':0, 'female':1})
# ๋ณํํ ์ฑ๋ณ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
print('\n๋ณํ ํ: \n',titanic['Sex'].head())
[์ฐ์ต๋ฌธ์ 2]
Embarked์ S, Q, C๋ฐ์ดํฐ๋ฅผ ๋๋ฏธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณํํ๊ณ dummies์ ์ ์ฅํด ๋ด
์๋ค.
import pandas as pd
from elice_utils import EliceUtils
elice_utils = EliceUtils()
# ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ต๋๋ค.
titanic = pd.read_csv('./data/titanic.csv')
print('๋ณํ ์ : \n',titanic['Embarked'].head())
#1. get_dummies๋ฅผ ์ฌ์ฉํ์ฌ ๋ณํํฉ๋๋ค.
dummies = pd.get_dummies(titanic[['Embarked']])
# ๋ณํํ Embarked ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
print('\n๋ณํ ํ: \n',dummies.head())
์์นํ ์๋ฃ : ํฌ๊ธฐ๋ฅผ ๊ฐ๋ ์์นํ ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ
๋จธ์ ๋ฌ๋์ ์
๋ ฅ์ผ๋ก ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ผ๋, ๋ชจ๋ธ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด ๋ฐ์ดํฐ ๋ณํ ํ์
์์นํ ์๋ฃ ๋ณํ ๋ฐฉ์
1) ์ค์ผ์ผ๋ง - ์ ๊ทํ, ํ์คํ
2) ๋ฒ์ฃผํ
์ค์ผ์ผ๋ง(Scaling)
๋ณ์ ๊ฐ ๋ฒ์ ๋ฐ ํฌ๊ธฐ๋ฅผ ๋ณํํ๋ ๋ฐฉ์
๋ณ์(feature)๊ฐ์ ๋ฒ์๊ฐ ์ฐจ์ด๊ฐ ๋๋ฉด ์ฌ์ฉ
1) ์ ๊ทํ(Normalization)
๋ณ์ x๋ฅผ ์ ๊ทํํ ๊ฐ x'
2) ํ์คํ
๋ณ์ x๋ฅผ ํ์คํํ ๊ฐ x'
3) ๋ฒ์ฃผํ
๋ณ์์ ๊ฐ๋ณด๋ค ๋ฒ์ฃผ๊ฐ ์ค์ํ ๊ฒฝ์ฐ ์ฌ์ฉ.
[์ฐ์ต๋ฌธ์ ]
normal ํจ์๋ฅผ ์์ฑํ๊ณ Fare ๋ฐ์ดํฐ๋ฅผ ์ ๊ทํํ์ฌ Fare์ ์ ์ฅํฉ๋๋ค.
import pandas as pd
from elice_utils import EliceUtils
elice_utils = EliceUtils()
#1. ์ ๊ทํ๋ฅผ ์ํํ๋ ํจ์๋ฅผ ๊ตฌํํฉ๋๋ค.
def normal(data):
data = (data-data.min())/(data.max()-data.min())
return data
# ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ต๋๋ค.
titanic = pd.read_csv('./data/titanic.csv')
print('๋ณํ ์ : \n',titanic['Fare'].head())
# normal ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทํํฉ๋๋ค.
Fare = normal(titanic['Fare'])
# ๋ณํํ Fare ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
print('\n๋ณํ ํ: \n',Fare.head())
[์ฐ์ต๋ฌธ์ 2]
standard ํจ์๋ฅผ ์์ฑํ๊ณ Fare ๋ฐ์ดํฐ๋ฅผ ํ์คํํ์ฌ Fare์ ์ ์ฅํฉ๋๋ค.
import pandas as pd
from elice_utils import EliceUtils
elice_utils = EliceUtils()
#1. ํ์คํ๋ฅผ ์ํํ๋ ํจ์๋ฅผ ๊ตฌํํฉ๋๋ค.
def standard(data):
data = (data-data.mean())/data.std()
return data
# ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ต๋๋ค.
titanic = pd.read_csv('./data/titanic.csv')
print('๋ณํ ์ : \n',titanic['Fare'].head())
# standard ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์คํํฉ๋๋ค.
Fare = standard(titanic['Fare'])
# ๋ณํํ Fare ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
print('\n๋ณํ ํ: \n',Fare.head())
๊ฒฐ์ธก๊ฐ(Missing data) ์ฒ๋ฆฌํ๊ธฐ
์ผ๋ฐ์ ์ธ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์
๋ ฅ ๊ฐ์ผ๋ก ๊ฒฐ์ธก๊ฐ์ ์ฌ์ฉํ ์ ์๋ค
๋ฐ๋ผ์ Null, None, NaN ๋ฑ์ ๊ฒฐ์ธก๊ฐ์ ์ฒ๋ฆฌํด์ผํ๋ค.
๋ํ์ ์ธ ๊ฒฐ์ธก์น ์ฒ๋ฆฌ ๋ฐฉ์
1) ๊ฒฐ์ธก๊ฐ์ด ์กด์ฌํ๋ ์ํ ์ญ์
2) ๊ฒฐ์ธก๊ฐ์ด ๋ง์ด ์กด์ฌํ๋ ๋ณ์ ์ญ์
3) ๊ฒฐ์ธก๊ฐ์ ๋ค๋ฅธ ๊ฐ(ํ๊ท , ์ค์๊ฐ, ๋จธ์ ๋ฌ๋ ์์ธก๊ฐ)์ผ๋ก ๋์ฒด
์ด์์น(Outlier) ์ฒ๋ฆฌํ๊ธฐ
์ด์์น๊ฐ ์์ผ๋ฉด ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
์ด์์น๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฒ๋ฆฌ ๊ณผ์ ์์ ์ ๊ฑฐํ๋ฉฐ, ์ด๋ค ๊ฐ์ด ์ด์์น์ธ์ง ํ๋จํ๋ ๊ธฐ์ค์ด ์ค์ํ๋ค.
์ด์์น ํ๋จ ๊ธฐ์ค ๋ฐฉ๋ฒ
1) ํต๊ณ ์งํ(์นด์ด์ ๊ณฑ๊ฒ์ , IQR์งํ ๋ฑ)๋ฅผ ์ฌ์ฉํ์ฌ ํ๋จ
2) ๋ฐ์ดํฐ ๋ถํฌ๋ฅผ ๋ณด๊ณ ์ง์ ํ๋จ
3) ๋จธ์ ๋ฌ๋ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ด์์น ๋ถ๋ฅ
* ๋ฐ์ดํฐ ๋ถ๋ฆฌ๊ฐ ํ์ํ ์ด์ ?
๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ํ๊ฐํ๊ธฐ ์ํด์๋ ํ์ต์ ์ฌ์ฉํ์ง ์์ ํ๊ฐ์ฉ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค.
์ฝ 7:3~8:2๋น์จ๋ก ํ์ต์ฉ:ํ๊ฐ์ฉ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํ๋ค.
๋ฐ์ดํฐ ์ ์ ๋ฐ ๋ถ๋ฆฌํ๊ธฐ
์ง๋ํ์ต์ ๊ฒฝ์ฐ feature๋ฐ์ดํฐ์ label๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ ์ฅํ๋ค.
Feature๋ฐ์ดํฐ : labeldmf ์์ธกํ๊ธฐ ์ํ ์
๋ ฅ๊ฐ
Label๋ฐ์ดํฐ : ์์ธกํด์ผ ํ ๋์์ด ๋๋ ๋ฐ์ดํฐ
[์ฐ์ต๋ฌธ์ ]
drop ์ ์ฌ์ฉํ์ฌ Cabin ๋ณ์๋ฅผ ์ญ์ ํ๊ณ titanic_1์ ์ ์ฅํฉ๋๋ค.
titanic_1์์ dropna ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ์ธก๊ฐ์ด ์กด์ฌํ๋ ์ํ์ ์ญ์ ํ๊ณ titanic_2์ ์ ์ฅํฉ๋๋ค.
import pandas as pd
from elice_utils import EliceUtils
elice_utils = EliceUtils()
# ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ต๋๋ค.
titanic = pd.read_csv('./data/titanic.csv')
# ๋ณ์ ๋ณ ๋ฐ์ดํฐ ์๋ฅผ ํ์ธํ์ฌ ๊ฒฐ์ธก ๊ฐ์ด ์ด๋์ ๋ง์์ง ํ์ธํฉ๋๋ค.
print(titanic.info(),'\n')
#1. Cabin ๋ณ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
titanic_1 = titanic.drop(columns=['Cabin'])
# Cabin ๋ณ์๋ฅผ ์ ๊ฑฐ ํ ๊ฒฐ์ธก๊ฐ์ด ์ด๋์ ๋จ์ ์๋์ง ํ์ธํฉ๋๋ค.
print('Cabin ๋ณ์ ์ ๊ฑฐ')
print(titanic_1.info(),'\n')
#2. ๊ฒฐ์ธก๊ฐ์ด ์กด์ฌํ๋ ์ํ ์ ๊ฑฐํฉ๋๋ค.
titanic_2 = titanic_1.dropna()
# ๊ฒฐ์ธก๊ฐ์ด ์กด์ฌํ๋์ง ํ์ธํฉ๋๋ค.
print('๊ฒฐ์ธก๊ฐ์ด ์กด์ฌํ๋ ์ํ ์ ๊ฑฐ')
print(titanic_2.info())
[์ฐ์ต๋ฌธ์ 2]
Age ๋ณ์์์ outlier ์ ์๋ ์ด์์น๋ฅผ ์ ์ธํ ๋ฐ์ดํฐ๋ฅผ titanic_3์ ์ ์ฅํฉ๋๋ค.
import pandas as pd
import numpy as np
from elice_utils import EliceUtils
elice_utils = EliceUtils()
# ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ต๋๋ค.
titanic = pd.read_csv('./data/titanic.csv')
# Cabin ๋ณ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
titanic_1 = titanic.drop(columns=['Cabin'])
# ๊ฒฐ์ธก๊ฐ์ด ์กด์ฌํ๋ ์ํ ์ ๊ฑฐํฉ๋๋ค.
titanic_2 = titanic_1.dropna()
# (Age ๊ฐ - ๋ด๋ฆผ Age ๊ฐ) 0 ๋ณด๋ค ํฌ๋ค๋ฉด ์์์ ์ ๊ฐ๋ ๋ฐ์ดํฐ๋ก ๋ถ๋ฅํฉ๋๋ค.
outlier = titanic_2[titanic_2['Age']-np.floor(titanic_2['Age']) > 0 ]['Age']
print('์์์ ์ ๊ฐ๋ Age ๋ณ์ ์ด์์น')
print(outlier)
print('์ด์์น ์ฒ๋ฆฌ ์ ์ํ ๊ฐ์: %d' %(len(titanic_2)))
print('์ด์์น ๊ฐ์: %d' %(len(outlier)))
1. ์ด์์น๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
titanic_3 = titanic_2[titanic_2['Age']-np.floor(titanic_2['Age']) == 0 ]
print('์ด์์น ์ฒ๋ฆฌ ํ ์ํ ๊ฐ์: %d' %(len(titanic_3)))
[์ฐ์ต๋ฌธ์ 3]
titanic_3 ์์ Survived ๋ณ์๋ฅผ ์ ๊ฑฐํ์ฌ X์ ์ ์ฅํ๊ณ Survived ๋ณ์์ ๋ฐ์ดํฐ๋ pandas์ Series ํํ๋ก y์ ์ ์ฅํฉ๋๋ค.
train_test_split ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค. test_size๋ 0.3, random_state๋ 42๋ก ์ค์ ํฉ๋๋ค.
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from elice_utils import EliceUtils
elice_utils = EliceUtils()
# ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ต๋๋ค.
titanic = pd.read_csv('./data/titanic.csv')
# Cabin ๋ณ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
titanic_1 = titanic.drop(columns=['Cabin'])
# ๊ฒฐ์ธก๊ฐ์ด ์กด์ฌํ๋ ์ํ ์ ๊ฑฐํฉ๋๋ค.
titanic_2 = titanic_1.dropna()
# ์ด์์น๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
titanic_3 = titanic_2[titanic_2['Age']-np.floor(titanic_2['Age']) == 0 ]
print('์ ์ฒด ์ํ ๋ฐ์ดํฐ ๊ฐ์: %d' %(len(titanic_3)))
#1. feature ๋ฐ์ดํฐ์ label ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค.
X = titanic_3.drop(columns=['Survived'])
y = titanic_3['Survived']
print('X ๋ฐ์ดํฐ ๊ฐ์: %d' %(len(X)))
print('y ๋ฐ์ดํฐ ๊ฐ์: %d' %(len(y)))
#2. ํ์ต์ฉ, ํ๊ฐ์ฉ ๋ฐ์ดํฐ๋ก ๋ถ๋ฆฌํฉ๋๋ค.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# ๋ถ๋ฆฌํ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
print('ํ์ต์ฉ ๋ฐ์ดํฐ ๊ฐ์: %d' %(len(X_train)))
print('ํ๊ฐ์ฉ ๋ฐ์ดํฐ ๊ฐ์: %d' %(len(X_test)))
'๊ฐ์ธ๊ณต๋ถ > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
70. NIPA AI์จ๋ผ์ธ ๊ต์ก AI ์ค๋ฌด ์์ฉ ๊ณผ์ (2) ์ง๋ํ์ต - ํ๊ท (0) | 2021.12.04 |
---|---|
69. Python Classification ์ฐ์ต๋ฌธ์ (0) | 2021.12.03 |
67. Python Regression ์ฐ์ต๋ฌธ์ (0) | 2021.12.01 |
66. Python Statis Scipy ์ฐ์ต๋ฌธ์ (0) | 2021.11.30 |
65. Python Numpy ์ฐ์ต๋ฌธ์ (2) (0) | 2021.11.29 |