240509 Today I Learn
๐ฝ ํ์ฉ ๋ฐ์ดํฐ์
Titanic - Machine Learning from Disaster | Kaggle
www.kaggle.com
# data ๋ถ๋ฌ์ค๊ธฐ
df = pd.read_csv("train.csv")
๋ฐ์ดํฐ ํ์ธํ๊ธฐ
1. ๋ฐ์ดํฐ์ ์ ๋ณด ํ์ธ : info()
๐ก dataframe.info()
df.info()
- ์ธ๋ฑ์ค, ์ปฌ๋ผ๋ช , ์ปฌ๋ผ์ ๋ฐ์ดํฐ ๊ฐ์, ๋ฐ์ดํฐ ํ์ ๋ฑ ๋ฐ์ดํฐ์ ์ ๋ณด๋ฅผ ํ์ธ
- null๊ฐ ํ์ธํ ๋๋ ์ฌ์ฉํ๋ค.
์์ 5๊ฐ ๊ฐ๋ง ์ถ์ถํ๊ธฐ : head()
๐ก dataframe.head(n)
df.head()โ
- dataframe์์ ์์ n๊ฐ์ ๊ฐ์ ์ถ๋ ฅํ๋ค.
- ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ ์์ 5๊ฐ์ ๊ฐ์ ์ถ๋ ฅํ๋ค.
๋ฐ์ดํฐ์ ๊ธฐ์ดํต๊ณ๋ ํ์ธํ๊ธฐ : describe()
๐ก dataframe.describe()df.describe()
๋๋ณด๊ธฐ
- ์ด 11๊ฐ์ ์ปฌ๋ผ ์ค 7๊ฐ์ ์ปฌ๋ผ๋ง์ ๋ฐํ
→ Dtype์ด int64์ธ [PassengerId, Survived, Pclass, SibSp, Parch], float64์ธ [Age, Fare]
- ๊ฐ์, ํ๊ท , ํ์คํธ์ฐจ, ์ฌ๋ถ์, ์ค์๊ฐ๋ฑ ๋ฐ์ดํฐํ๋ ์์ ๊ธฐ์ดํต๊ณ๋์ ๊ตฌํ๋ค.
- ๋จ, ์ซ์ํ์ (float, int)์ ๊ฐ์ด ์ ๋ ฅ๋ ์ปฌ๋ผ์ ๊ธฐ์ดํต๊ณ๋๋ง์ ๋ฐํํ๋ค.
๊ฒฐ์ธก์น ํ์ธ
1. ์ปฌ๋ผ๋ณ ๊ฒฐ์ธก๊ฐ์ ์ ํ์ธํ๊ธฐ : info()
→ ์ ์์์์ 'Age', 'Cabin', 'Embarked' ์ธ ์ปฌ๋ผ์ ๊ฒฝ์ฐ 891 non-null์ด๋ผ๊ณ ํํ๋ ๋ค๋ฅธ ์ปฌ๋ผ๋ค๊ณผ ๋ฌ๋ฆฌ ๊ฐ๊ฐ 714 non-null, 204 non-null, 889 non-null์ผ๋ก ํํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
- ์ด ๊ฒฝ์ฐ dataframe์ ์ธ๋ฑ์ค์ ์ด ๊ธธ์ด๋ 891๋ก ๋ณผ ์ ์๊ณ Age, Cabin, Embarked ์นผ๋ผ์ ๊ฒฐ์ธก์น๋ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐํ ์ ์๋ค.
- Age : 177๊ฐ(891-714 = 177)
- Cabin : 687๊ฐ(891-204 = 687)
- Embarked : 2๊ฐ(891-889 = 2)
2. ๊ฒฐ์ธก๊ฐ ํ์ ํ๊ธฐ : isna(), isnull()
๐ก ๊ฒฐ์ธก๊ฐ ํ์ ํ๊ธฐ
๋ฐ์ดํฐํ๋ ์ ๋ด์ ๊ฒฐ์ธก ๊ฐ์ ํ์ธํ์ฌ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ True ๋๋ False๋ก ๋ฐํ
NA, None, numpy.nan → `True` ๋ฐํ
- ์์ 1) ๊ฒฐ์ธก๊ฐ ํ์ ํ๊ธฐ
newjeans = pd.DataFrame({
'name' : ['Minji','Danielle','Hanni','Haerin', None],
'age' : [20, 19, 19, 17, 16],
'nationality' : ['Korea', 'Australia', 'Australia','Korea','Korea']
})
newjeans.isna()
- ์์ 2) ๊ฒฐ์ธก๊ฐ์ด ์๋ ํน์ ํ์ ์ถ์ถํ๊ธฐ
Embarked ์ปฌ๋ผ์ ๊ฒฝ์ฐ 2๊ฐ์ ๊ฒฐ์ธก๊ฐ์ด ์กด์ฌํ๋ค. ์ด๋, ์ด ๊ฒฐ์ธก๊ฐ์ด ์กด์ฌํ๋ ํ์ ์ถ๋ ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
df[df['Embarked'].isna()]
→ df[์กฐ๊ฑด], ์ด๋ ์กฐ๊ฑด์ 'Embarked' ์ปฌ๋ผ์์ (df['Embarked']) ๊ฒฐ์ธก๊ฐ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ(.isna())์ด๋ค.
`df[df['Embarked'].isna()== True]`์ ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ค.
3. ๊ฒฐ์ธก๊ฐ์ด '์๋' ๊ฐ ํ์ ํ๊ธฐ : notna(), notnull()
๐ก ๊ฒฐ์ธก๊ฐ์ด '์๋' ๊ฐ ํ์ ํ๊ธฐ
๋ฐ์ดํฐํ๋ ์ ๋ด์์ ๊ฒฐ์ธก๊ฐ์ด ์๋ ๊ฐ์ ํ์ธํ๋ ๊ธฐ๋ฅ์ผ๋ก, isna(), isnull()๊ณผ ๋ฐ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
NA, None, numpy.nan → `False` ๋ฐํ
๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝํ๊ธฐ
- ๋ฐ์ดํฐ ํ์
๋ฐ์ดํฐ ํ์
(Data Type)
|
์ค๋ช
(Description)
|
์์(Example)
|
int64, int32
|
์ ์ํ ๋ฐ์ดํฐ (64๋นํธ ๋๋ 32๋นํธ)
|
1, 42, -10, 1000
|
float64, float32
|
๋ถ๋ ์์์ ์ (64๋นํธ ๋๋ 32๋นํธ)
|
3.14, -0.001, 2.718
|
object
|
๋ฌธ์์ด ๋ฐ์ดํฐ (์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์์ด)
|
'Hello', 'Data Science'
|
bool
|
๋ถ๋ฆฌ์ธ(์ฐธ/๊ฑฐ์ง) ๋ฐ์ดํฐ
|
True, False
|
datetime64
|
๋ ์ง์ ์๊ฐ ๋ฐ์ดํฐ
|
'2023-12-31 08:00:00'
|
timedelta64
|
์๊ฐ ๊ฐ๊ฒฉ(๋ ๋ ์ง ๋๋ ์๊ฐ ์ฌ์ด์ ์ฐจ์ด) ๋ฐ์ดํฐ
|
'3 days', '2 hours'
|
category
|
์นดํ
๊ณ ๋ฆฌํ ๋ฐ์ดํฐ (์ ํ๋ ๊ณ ์ ๊ฐ์ผ๋ก ๊ตฌ์ฑ)
|
'Red', 'Blue', 'Green'
|
- ๋ฐ์ดํฐ ํ์ ํ์ธํ๊ธฐ : dtype()
newjeans['age'].dtype
## dtype('int64')
- ๋ฐ์ดํฐ ํ์ ๋ณ๊ฒฝํ๊ธฐ : astype()
newjeans['age'].astype(float)
## 0 20.0
## 1 19.0
## 2 19.0
## 3 17.0
## 4 16.0
## Name: age, dtype: float64
๐ astype ์ฌ์ฉ์ ์ฃผ์ํ ์
๐ astype์ผ๋ก ํ์ ์ ๋ฐ๊พผ ๋ค ํ ๋น์ ํด์ค์ผ ์ ์ฅ๋จ
![](https://blog.kakaocdn.net/dn/cPVf7L/btsHkne0lM0/JKcwgnRCqTNl3uAli49ps0/img.png)
astype์ ์ด์ฉํด ๋ฐ์ดํฐ์ ํ์ ์ ๋ฐ๊พธ์ด์คฌ์ด๋ ๋ณ์์ ๋ฃ์ด์ฃผ์ง ์์ผ๋ฉด ์ ์ฅ์ด ๋์ง ์๋๋ค.
![](https://blog.kakaocdn.net/dn/OYx4M/btsHk1WTva2/WPJx8nrvE4hp5zNRwGl5KK/img.png)
๋ค์๊ณผ ๊ฐ์ด ์๋ก์ด ๋ณ์์ ๋ฃ์ด์ค์ผ ๋ฐ์ดํฐ ํ์ ์ด ๋ฐ๋ ์ฑ๋ก ์ ์ฅ๋จ!
๐ ์์์ ์ด ์๋ str์ ๊ฒฝ์ฐ str → float → int๋ก ๋ณ๊ฒฝํด์ค์ผํจ. (str → int๋ก ๋ฐ๋ก ๋ณ๊ฒฝ ๋ถ๊ฐ)
newjeans['Height']=newjeans['Height'].astype(str)
newjeans['Height'].dtype
## dtype('O')
![](https://blog.kakaocdn.net/dn/dJed2R/btsHlHXXtYR/iAxC0ZYrk4abHHjvTwnaRK/img.png)
newjeans['Height'].astype(int)
astype(int)๋ก ๋ฐ๊ฟ์ค ๊ฒฝ์ฐ ValueError๊ฐ ๋๋ค. (์์์ ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผํ ์ง ์ฝ์ด๋ค์ผ์๊ฐ ์์.)
![](https://blog.kakaocdn.net/dn/bDaXiL/btsHlEmDzAP/HAiqk1Lkb74vPWaWNp1gok/img.png)
newjeans['Height'] = newjeans['Height'].astype(float).astype(int)
newjeans['Height'].dtype
## dtype('int64')
astype(float)์ astype(int)๋ฅผ ์ฐ๋ฌ์ ์ฌ์ฉ(float → int ์์ผ๋ก ์ฌ์ฉ)ํ๊ฒ ๋๋ฉด ์์ ๊ฐ์ด ์ ์์ ์ผ๋ก ๋ฐ์ดํฐ ํ์ ์ด ๋ณ๊ฒฝ๋๋ค.
๋ฐ์ดํฐ ์ ํ
๋ถ๋ฆฌ์ธ ์ธ๋ฑ์ฑ
๐ก ๋ถ๋ฆฌ์ธ ์ธ๋ฑ์ฑ
์ฃผ์ด์ง ์กฐ๊ฑด์์ 'True'๋ฅผ ๋ฐํํ ๋์ ํด๋นํ๋ ๊ฐ์ ๋ฐํํ๋๋ก ํ๋ ์ธ๋ฑ์ฑ
→ ์กฐ๊ฑด์ ์ด์ฉํด ์ธ๋ฑ์ฑ ํ๋ ๋ฐฉ๋ฒ
- ์์ 1) ๋จ์ฑ ์น๊ฐ
df[df['Sex']=='male']
- ์์ 2) ๋จ์ฑ์ด๋ฉด์ ๋์ด๊ฐ 70์ธ ์ด๊ณผ์ธ ์น๊ฐ์ ์ด๋ฆ(name), ๋์ด(age), ๊ทธ๋ฆฌ๊ณ ๊ฐ์ค ๋ฑ๊ธ(Pclass)
df.loc[(df['Sex']=='male') & (df['Age']>70), ['Name','Age','Pclass']]
- ์์ 3) ์ฌ์ฑ์ด๋ฉด์ ๋์ด๊ฐ 60์ธ๋ฅผ ์ด๊ณผํ๊ฑฐ๋(์กฐ๊ฑด1), 1์ด ๋ฏธ๋ง์ด๋ฉด์ ์์กดํ(์กฐ๊ฑด2) ์น๊ฐ์ ์ด๋ฆ๊ณผ ์ฑ๋ณ, ๋์ด ๊ทธ๋ฆฌ๊ณ ์์กด ์ฌ๋ถ๋ฅผ ์ถ๋ ฅํ์ธ์.
# ๋ฐฉ๋ฒ 1 ์กฐ๊ฑด ๋ณ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด ํ์ฉ
cond1 = (df['Sex']=='female') & (df['Age']>60)
cond2 = (df['Age']<1) & (df['Survived']==1)
df.loc[(cond1 | cond2),['Name','Sex','Age','Survived']]
# ๋ฐฉ๋ฒ 2 ์ญ์ฌ๋์๋ฅผ ์ด์ฉํด์ ์ค๋ฐ๊ฟํ๊ธฐ
df.loc[((df['Sex']=='female') & (df['Age']>60)) \
| ((df['Age']<1) & (df['Survived']==1)),\
['Name','Sex','Age','Survived']]
- and ์ฐ์ฐ์๋ '&', or ์ฐ์ฐ์๋ก๋ '|'์ ํ์ฉํ๋ฉด ๋๋ค.
→ and๋ or๋ก ์กฐ๊ฑด์ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ ๋ฐ๋์ (๊ดํธ)๋ฅผ ์ฌ์ฉํด์ฃผ์! - ์ญ์ฌ๋์(\)๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ฐ๊ฟ์ ํ ์ ์๋ค.
๐ก .isin()
Series(์๋ฆฌ์ฆ)๋ DataFrame(๋ฐ์ดํฐํ๋ ์)์ ๊ฐ๋ค ์ค์์ ํน์ ๊ฐ์ด๋ ๋ฆฌ์คํธ ์์ ํฌํจ๋ ๊ฐ๋ค์ ์ฐพ์๋ด๋ ๋ฉ์๋. ์ํ๋ ์กฐ๊ฑด์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ํํฐ๋งํ๊ฑฐ๋ ์ ํํ ์ ์์
- ์์ 1) ๊ตญ์ (nationality)๊ฐ ํ๊ตญ(Korea)์ธ ๋ฉค๋ฒ๋ค์ ์ถ๋ ค๋ผ
newjeans[newjeans['nationality'].isin(['Korea'])]
- ์์ 2) ๋์ด(age)๊ฐ 19์ธ๊ฑฐ๋ 16์ธ์ธ ๋ฉค๋ฒ๋ค์ ์ถ๋ ค๋ผ
newjeans[newjeans['age'].isin([19, 16])]
- ์์ 3) ๋ฐ์ดํฐ ํ๋ ์ ์ ์ฒด์์ ํฌ์ง์ ์ด ๋ฆฌ๋, ๋ณด์ปฌ ๊ทธ๋ฆฌ๊ณ ๊ตญ์ ์ด ํ๊ตญ์ธ ๊ฒฝ์ฐ
tf = newjeans.isin({'position':['Leader','Vocal'], 'nationality':['Korea']})
print(tf)
## name age nationality position
## 0 False False True True
## 1 False False False True
## 2 False False False True
## 3 False False True False
## 4 False False True False
์ธ๋ฑ์ค ๊ธฐ์ค ์ฌ๋ผ์ด์ฑ : .iloc
๐ก .iloc[ํ,์ปฌ๋ผ๋ฒํธ]
- df์์ ์ข์ธก ์๋จ์ ๊ฐ(1ํ, 1์ด์ ๊ฐ)์ถ๋ ฅํ๊ธฐ `df.iloc[0, 0]`
- df์ 2๋ฒ์งธ ํ์ 1-2๋ฒ์งธ ์ปฌ๋ผ๋ง ์ถ์ถํ๊ธฐ `df.iloc[1:3, 0:3]`
- ์์1) ์ธ๋ฑ์ค ๋ฒํธ๊ฐ 0์ธ ํ๋ถํฐ 3์ธ ํ๊น์ง ์ฌ๋ผ์ด์ฑํ๊ธฐ
newjeans.iloc[0:3]
- ์์ 2) ํ ๋ฒํธ๊ฐ ์ง์์ธ ์ปฌ๋ผ ๋ฝ๊ธฐ (๋จ, 0์ ์ง์์ด๋ค.)
newjeans.iloc[0::2]
์ปฌ๋ผ๋ช ๊ธฐ์ค ์ฌ๋ผ์ด์ฑ
๐ก .loc[ํ,์ปฌ๋ผ๋ช ]
- df์์ 'name' ์นผ๋ผ์ ์ฒซ๋ฒ์งธ ํ ๊ฐ `df.loc[0,'name']`
- df์์ 'name'๋ถํฐ 'position'๊น์ง ์นผ๋ผ์ ์ฒซ๋ฒ์งธ๋ถํฐ 3๋ฒ์งธ ํ ๊ฐ `df.loc[0:4, 'name':'position]`
newjeans = pd.DataFrame({
'name' : ['Minji','Hanni','Danielle','Haerin', 'Hyein'],
'age' : [20, 19, 19, 17, 16],
'nationality' : ['Korea', 'Australia', 'Australia','Korea','Korea']},
index = ['Leader','Main Vocal','Lead Vocal','Main Dancer', 'Lead Dancer'])
newjeans
- ์์ 1) ๋ฉ์ธ ๋ณด์ปฌ์ ๋์ด๋?
newjeans.loc['Main Vocal','age']
## 19
- ์์ 2) ๋ฉ์ธ ๋ณด์ปฌ๊ณผ ๋ฆฌ๋ ๋ณด์ปฌ์ ๊ตญ์ ์?
newjeans.loc['Main Vocal':'Lead Vocal', 'nationality']
newjeans.loc[['Main Vocal','Lead Vocal'], 'nationality']
## Main Vocal Australia
## Lead Vocal Australia
## Name: nationality, dtype: object
- ์์ 3) ๋ฆฌ๋์ ์ด๋ฆ๊ณผ ๊ตญ์ ์?
newjeans.loc['Leader',['name','nationality']]
## name Minji
## nationality Korea
## Name: Leader, dtype: object
→ ์ด๋ ๊ฒ ๋๊ฐ ์ด์์ ์ปฌ๋ผ์ ์ ํํ๊ณ ์ถ์ ๊ฒฝ์ฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํด์ค ์ ์๋ค.
๐ก .iloc vs. .loc
iloc์ ์ ์ ๊ธฐ๋ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ณ , loc์ ๋ ์ด๋ธ ๊ธฐ๋ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉ
#iloc newjeans.iloc[1,1] ## 19 #loc newjeans.loc[1,'age'] ## 19โ