IT/Data 분석

[우주선 생존] 분석 6회차

송시 2023. 4. 4. 00:13
728x90

2023.04.02 - [IT/Data 분석] - [우주선 생존] 분석 5회차

 

[우주선 생존] 분석 5회차

2023.03.28 - [IT/Data 분석] - [우주선 생존] 분석 4회차 [우주선 생존] 분석 4회차 2023.03.26 - [IT/Data 분석] - [우주선 생존] 분석 3회차 [우주선 생존] 분석 3회차 2023.03.25 - [IT/Data 분석] - [우주선 생존] 분

songsiaix.tistory.com

5회차에서 간과했던 것이 있다.

 

결측치를 제거하면 자동으로 타입이 변환될 것으로 예상했는데, 다른 말로 object 였던 타입이 실수형이나 논리형으로 자동 변환될 것으로 예상하고 진행하였는데 그렇지 않았다 필요에 맞게 다시 형변환이 필요하다는 것을 깨달았다.

 

결측치를 제거하고도 boolean 타입으로 변경되었을 것이라고 생각했던 VIP와 CryoSleep 행이 여전히 object 였다는 것이다.

 

일단 타입을 변경해보자

 

일단 그냥 문득 결측치 제거 없이 타입을 변경해보자.

 

 

df5 = df.copy()
df5['CryoSleep']=df5['CryoSleep'].astype('bool')
df5['VIP']=df5['VIP'].astype('bool')

df5.info()

 

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8693 entries, 0 to 8692
Data columns (total 14 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   PassengerId   8693 non-null   object 
 1   HomePlanet    8492 non-null   object 
 2   CryoSleep     8693 non-null   bool   
 3   Cabin         8494 non-null   object 
 4   Destination   8511 non-null   object 
 5   Age           8514 non-null   float64
 6   VIP           8693 non-null   bool   
 7   RoomService   8512 non-null   float64
 8   FoodCourt     8510 non-null   float64
 9   ShoppingMall  8485 non-null   float64
 10  Spa           8510 non-null   float64
 11  VRDeck        8505 non-null   float64
 12  Name          8493 non-null   object 
 13  Transported   8693 non-null   bool   
dtypes: bool(3), float64(6), object(5)
memory usage: 772.6+ KB
일단 정상적으로 변환이 되었다.
 
 
그런데 재미난 일이 발생하였다.
 
print(df.VIP.isna().sum(),df5.VIP.isna().sum())
print(df.CryoSleep.isna().sum(),df5.CryoSleep.isna().sum())
 
203 0
217 0

결측치가 모두 사라져버렸다

 

df[df.VIP.isna()].VIP.head()

38     NaN
102    NaN
145    NaN
228    NaN
566    NaN
Name: VIP, dtype: object

5개의 VIP값을 한번 확인해보자

 

print(df.iloc[38].VIP,df5.iloc[38].VIP)
print(df.iloc[102].VIP,df5.iloc[102].VIP)
print(df.iloc[145].VIP,df5.iloc[145].VIP)
print(df.iloc[228].VIP,df5.iloc[228].VIP)
print(df.iloc[566].VIP,df5.iloc[566].VIP)

nan True
nan True
nan True
nan True
nan True

모두 True로 변환이 되었다.

 

이게 분명 데이터를 분석하는데 영향을 미칠 것이다.

 

우선 5회차에서 사용했던 df4 (결측치를 제거한) 에서 bool 타입으로 변경한 상관계수와 df5 에서의 bool 타입으로 변경한 상관계수를 비교해보자.

 

df4.corr()

  CryoSleep Age VIP RoomService FoodCourt ShoppingMall Spa VRDeck Transported
CryoSleep 1.000000 -0.085701 -0.082303 -0.255398 -0.210782 -0.228612 -0.202216 -0.199095 0.462803
Age -0.085701 1.000000 0.098138 0.074783 0.135844 0.042314 0.123820 0.105031 -0.082553
VIP -0.082303 0.098138 1.000000 0.029009 0.135386 0.013660 0.064792 0.130061 -0.042260
RoomService -0.255398 0.074783 0.029009 1.000000 -0.013614 0.060478 0.012472 -0.026002 -0.247291
FoodCourt -0.210782 0.135844 0.135386 -0.013614 1.000000 -0.012320 0.215995 0.216997 0.055025
ShoppingMall -0.228612 0.042314 0.013660 0.060478 -0.012320 1.000000 0.022168 0.000383 0.011602
Spa -0.202216 0.123820 0.064792 0.012472 0.215995 0.022168 1.000000 0.149447 -0.219854
VRDeck -0.199095 0.105031 0.130061 -0.026002 0.216997 0.000383 0.149447 1.000000 -0.207950
Transported 0.462803 -0.082553 -0.042260 -0.247291 0.055025 0.011602 -0.219854 -0.207950 1.000000

 

df5.corr()
  CryoSleep Age VIP RoomService FoodCourt ShoppingMall Spa VRDeck Transported
CryoSleep 1.000000 -0.073771 -0.050342 -0.243434 -0.204765 -0.208465 -0.199075 -0.192749 0.451744
Age -0.073771 1.000000 0.058930 0.068723 0.130421 0.033133 0.123970 0.101007 -0.075026
VIP -0.050342 0.058930 1.000000 0.050854 0.089639 -0.001104 0.037446 0.087322 -0.024602
RoomService -0.243434 0.068723 0.050854 1.000000 -0.015889 0.054480 0.010080 -0.019581 -0.244611
FoodCourt -0.204765 0.130421 0.089639 -0.015889 1.000000 -0.014228 0.221891 0.227995 0.046566
Shoppingmall -0.208465 0.033133 -0.001104 0.054480 -0.014228 1.000000 0.013879 -0.007322 0.010141
Spa -0.199075 0.123970 0.037446 0.010080 0.221891 0.013879 1.000000 0.153821 -0.221131
VRDeck -0.192749 0.101007 0.087322 -0.019581 0.227995 -0.007322 0.153821 1.000000 -0.207075
Transported 0.451744 -0.075026 -0.024602 -0.244611 0.046566 0.010141 -0.221131 -0.207075 1.000000
 
일단 눈에 띄는 것은 종속변수인 Transported와 CryoSleep 간에 상관관계가 다른 독립변수에 비해 매우 높게 나왔다.
 
df4(결측치 제거) df5(결측치가 모두 True로 치환) 간에는 거의 차이가 없는 수준의 상관관계를 보여준다.
 
어쨌든 이번 연습을 통해 형 변환을 통해 자동으로 결측치가 처리된다는 점을 알게되었다.
 
import seaborn as sns
sns.heatmap(df5.corr())

히트맵을 통해 두드러진 변화를 알 수 있었다.

 

그래 근데 이렇게 느낌대로 막 이렇게 하면서 내가 가는 이 길이 잘 가고 있나 하는 의문이 든다.

 

다음 회차에서는 그래서 이 우주선 생존에서 얻고자하는 결과가 무엇인가를 그래서 그걸 위해 데이터를 어떻게 가공해야할지 고민이 필요해보인다.

728x90

'IT > Data 분석' 카테고리의 다른 글

[우주선 생존] 분석 8회차  (0) 2023.04.11
[우주선 생존] 분석 7회차  (0) 2023.04.10
[우주선 생존] 분석 5회차  (0) 2023.04.02
[우주선 생존] 분석 4회차  (0) 2023.03.28
[우주선 생존] 분석 3회차  (0) 2023.03.26