2023.03.26 - [IT/Data 분석] - [우주선 생존] 분석 3회차
일단 현재 데이터프레임의 상관관계를 보자.
corr() 를 일단 때리는 형태가 많아서 서점에 있는 책들에 많이 있는데 3회차에서는 그냥 좀 돌아가보았다.
Age | RoomService | FoodCourt | ShoppingMall | Spa | VRDeck | Transported | |
Age | 1.000000 | 0.068723 | 0.130421 | 0.033133 | 0.123970 | 0.101007 | -0.075026 |
RoomService | 0.068723 | 1.000000 | -0.015889 | 0.054480 | 0.010080 | -0.019581 | -0.244611 |
FoodCourt | 0.130421 | -0.015889 | 1.000000 | -0.014228 | 0.221891 | 0.227995 | 0.046566 |
ShoppingMall | 0.033133 | 0.054480 | -0.014228 | 1.000000 | 0.013879 | -0.007322 | 0.010141 |
Spa | 0.123970 | 0.010080 | 0.221891 | 0.013879 | 1.000000 | 0.153821 | -0.221131 |
VRDeck | 0.101007 | -0.019581 | 0.227995 | -0.007322 | 0.153821 | 1.000000 | -0.207075 |
Transported | -0.075026 | -0.244611 | 0.046566 | 0.010141 | -0.221131 | -0.207075 | 1.000000 |
df.corr() 를 통해서 수치로 확인할 수 있고 이를 바탕으로 heatmap 으로 시각화 하여 좀 더 빠르게 인식할 수 있는데 도움을 받을 수 있다.
import seaborn as sns
sns.heatmap(df.corr())
밝을수록 상관관계가 높은 것인데 대부분 보라색과 검은색으로 상관관계를 찾기 어렵다.
우리가 눈여겨볼 만한 부분은 역시 종속변수인 Transported 인데 수치형데이터들과의 상관관계가 없다.
어쩌면 결측치로 인해 더더욱 잘 안나올 것일수도 있지 않을까?
결측치를 일단한번 채워보자.
일단 수치형 데이터를 갖는(float64) Age, RoomService, FoodCourt, ShoppingMall, Spa, VRDeck 만 채워보자
df3 = df.copy()
df3['Age'].fillna(df3['Age'].mean(),inplace=True)
df3['RoomService'].fillna(df3['RoomService'].mode(), inplace=True)
df3['FoodCourt'].fillna(df3['FoodCourt'].mode(), inplace=True)
df3['ShoppingMall'].fillna(df3['ShoppingMall'].mode(), inplace=True)
df3['Spa'].fillna(df3['Spa'].mode(), inplace=True)
df3['VRDeck'].fillna(df3['VRDeck'].mode(), inplace=True)
df3.isna().sum()
라고 하였더니 Age 빼고는 모두 그대로 인것을 발견하게 되었다.
원인인 즉슨 mode() 를 통해서 최빈값을 구할 때 결과 값으로 type 까지 나오며 시리즈로의 정보가
나온다 이 때문에 의도했던 값이 채워지지 않는데 이때는 [0] 을 통해서 숫자만 따로 사용하면 된다.
0 0.0
dtype: float64
df3['RoomService'].fillna(df3['RoomService'].mode()[0], inplace=True)
df3['FoodCourt'].fillna(df3['FoodCourt'].mode()[0], inplace=True)
df3['ShoppingMall'].fillna(df3['ShoppingMall'].mode()[0], inplace=True)
df3['Spa'].fillna(df3['Spa'].mode()[0], inplace=True)
df3['VRDeck'].fillna(df3['VRDeck'].mode()[0], inplace=True)
df3.isna().sum()
PassengerId 0
HomePlanet 201
CryoSleep 217
Cabin 199
Destination 182
Age 0
VIP 203
RoomService 0
FoodCourt 0
ShoppingMall 0
Spa 0
VRDeck 0
Name 200
Transported 0
dtype: int64
다시 한번 히트맵을 때려보자
df3.corr()
AgeRoomServiceFoodCourtShoppingMallSpaVRDeckTransportedAgeRoomServiceFoodCourtShoppingMallSpaVRDeckTransported
Age | RoomService | FoodCourt | ShoppingMall | Spa | VRDeck | Transported | |
Age | 1.000000 | 0.068425 | 0.127343 | 0.032846 | 0.121071 | 0.099551 | -0.074249 |
RoomService | 0.068425 | 1.000000 | -0.015126 | 0.052337 | 0.009244 | -0.018624 | -0.241124 |
FoodCourt | 0.127343 | -0.015126 | 1.000000 | -0.013717 | 0.221468 | 0.224572 | 0.045583 |
ShoppingMall | 0.032846 | 0.052337 | -0.013717 | 1.000000 | 0.014542 | -0.007849 | 0.009391 |
Spa | 0.121071 | 0.009244 | 0.221468 | 0.014542 | 1.000000 | 0.147658 | -0.218545 |
VRDeck | 0.099551 | -0.018624 | 0.224572 | -0.007849 | 0.147658 | 1.000000 | -0.204874 |
Transported | -0.074249 | -0.241124 | 0.045583 | 0.009391 | -0.218545 | -0.204874 | 1.000000 |
sns.heatmap(df3.corr())
거의 차이가 없다.
결측치를 채우는 방법을 평균값과 최빈값으로 했는데 Age의 경우는 아주 작은 수치지만 오히려 상관관계가 더 떨어졌다.
일단은 오늘은 이정도로 하자.
다음은 결측치에 대한 추가 고민을 해보거나 수치데이터인 녀석들이 그냥 종속변수에(Transported)와 관련이 없는 것일 수 있다.
1. 결측치에 대한 추가 고민을 해본다
2. 다른 독립변수들을 토대로 종속변수와의 상관을 찾아본다
3. 상관에만 의조할 일이 아닐 수 있다. 다른 방안을 추가 공부해본다
'IT > Data 분석' 카테고리의 다른 글
[우주선 생존] 분석 6회차 (0) | 2023.04.04 |
---|---|
[우주선 생존] 분석 5회차 (0) | 2023.04.02 |
[우주선 생존] 분석 3회차 (0) | 2023.03.26 |
[우주선 생존] 분석 2회차 (0) | 2023.03.25 |
[우주선 생존] 분석 1회차 (0) | 2023.03.23 |