IT/Data 분석

[차원 이동] 분석 10 회차[독립변수 파악]

송시 2023. 4. 27. 01:25
728x90

2023.04.15 - [IT/Data 분석] - [우주선 생존] 분석 9회차

 

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

2023.04.11 - [IT/Data 분석] - [우주선 생존] 분석 8회차 [우주선 생존] 분석 8회차 2023.04.10 - [IT/Data 분석] - [우주선 생존] 분석 7회차 [우주선 생존] 분석 7회차 2023.04.04 - [IT/Data 분석] - [우주선 생존] 분

songsiaix.tistory.com

독립변수를 확인하는게 보통 1~2 단계에서 해야할텐데, 돌고 돌아 블로그 10회차에서 1 단계로 다시 돌아왔다.

 

각각의 독립변수를 한번 음미해보고자 한다.

 

총 13개의 독립변수가 있다.(Transported 는 우리가 확인하고자 하는 목표 즉 종속 변수이기에 train.csv 에는 존재하지만 test.csv 에는 존재하지 않는다. 그래서 아래의 행 갯수에서는 14개지만 독립변수는 13개가 된다)

 

train_df.columns

Index(['PassengerId', 'HomePlanet', 'CryoSleep', 'Cabin', 'Destination', 'Age',
       'VIP', 'RoomService', 'FoodCourt', 'ShoppingMall', 'Spa', 'VRDeck',
       'Name', 'Transported'],
      dtype='object')

train_df.PassengerId.head()

0    0001_01
1    0002_01
2    0003_01
3    0003_02
4    0004_01
Name: PassengerId, dtype: object

규칙성을 갖고 있는 듯 보이는 숫자이지만 '_' 로 인해 object의 타입이다.

 

_ 를 제거하여 숫자형으로 바꿀 수는 있겠지만 특성을 분석을 하기 위해서는 다른 독립변수와도 함께 보아야 하겠지만 숫자형 데이터라기 보다는 카테고리 또는 범주를 나타내는 형태의 변수로 판단이 된다.

 

_ 를 제거하고 숫자형으로 형을 변환하게 된다면 앞의 000 이라는 숫자를 처리할 수 없기에 101, 201, 301, 302, 401 등으로 변환이 되는 일까지 생길 것이다. 

 

또한 문득 0003_01, 0003_02 등으로 0003 이라는 숫자가 어떤 묶음을 의미한다고 느껴진다.

 

문득 가족이거나 함께 예약한 동행자의 묶음이 아니였을까 하는 생각이 든다.

숫자로 변경할 경우 그 숫자가 어떤 의미가 될까?

(0001_01 PassengerId를 갖는 사람의 이름은 "Maham Ofracculy" 이며 차원 이동 여부는 False 이다)

0001_01 를 갖고 있었던 Maham Ofracculy 의 PassengerId 가 101이 된다.

 

이 숫자 자체가 우주의 차원을 이동을 하지 못한 것 과의 관련이 있을까?

 

문득 생각했을 때에는 관련이 없을 것 같다.

train_df['PID'] = train_df['PassengerId'].apply(lambda x: x.replace('_',''))
train_df=train_df.astype({'PID':'int64'})
print(f"{train_df[['PassengerId','Name','PID']].head(30)}")

   PassengerId                Name   PID
0      0001_01     Maham Ofracculy   101
1      0002_01        Juanna Vines   201
2      0003_01       Altark Susent   301
3      0003_02        Solam Susent   302
4      0004_01   Willy Santantines   401
5      0005_01   Sandie Hinetthews   501
6      0006_01  Billex Jacostaffey   601
7      0006_02  Candra Jacostaffey   602
8      0007_01       Andona Beston   701
9      0008_01      Erraiam Flatic   801
10     0008_02      Altardr Flatic   802
11     0008_03       Wezena Flatic   803
12     0009_01        Berers Barne   901
13     0010_01      Reney Baketton  1001
14     0011_01     Elle Bertsontry  1101
15     0012_01       Justie Pooles  1201
16     0014_01         Flats Eccle  1401
17     0015_01     Carry Hughriend  1501
18     0016_01          Alus Upead  1601
19     0017_01       Lyde Brighttt  1701
20     0017_02     Philda Brighttt  1702
21     0020_01   Almary Brantuarez  2001
22     0020_02   Glendy Brantuarez  2002
23     0020_03  Mollen Mcfaddennon  2003
24     0020_04  Breney Jacostanley  2004
25     0020_05     Mael Brantuarez  2005
26     0020_06   Terta Mcfaddennon  2006
27     0022_01                 NaN  2201
28     0024_01     Penton Fullided  2401
29     0025_01   Karard Brookenson  2501
 

21 ~ 26을 보면 가족만으로 묶여있지 않다는 것을 알 수 있다. 

 

아무래도 가족이거나, 동행이거나, 출발지가 같은 사람들을 묶은 것 같다.

 

이 숫자가 차원을 이동하는 것과 얼마만큼의 상관이 있을까?

train_df[['Transported','PID']].corr()

  Transported PID
Transported 1.000000 0.021491
PID 0.021491 1.000000

상관계수는 1에 가까울 수록 (1은 이상적인 수치지만) 높은 상관관계가 있다고 말한다.

0.1 이하는 거의 상관관계가 없는 수준이라고 한다.

 

차원을 이동하는 것과 PID 간에는 거의 관계가 없다고 볼 수 있다.

 

산점도 그래프를 한번 살펴 보자.

 

plt.scatter(train_df['PID'],train_df['Transported'])

산점도가 극단적이다.
 
상관관계를 구하려면 숫자간에만 계산을 할 수 있다.
 
그런데 bool 인데 어떻게 상관계수를 구할 수 있었을까?
 
print(True+1,False+1,True-3,False+0)
2 1 -2 0

bool 을 사용하는 True 와 False 는 숫자와 연산이 가능함 즉 논리형으로써 참 거짓을 구별하지만 숫자형태로써도 사용할 수 있기 때문이다.

 

산점도를 통해 선형적인 모양을 보고자 하였으나 0(False) 과 1(True) 라는 극명한 그래프를 확인할 수 있었다.

 

어쩌면 bool 타입에 대한 산점도를 보려고 했었던 것이 애시당초 큰 의미가 없었음을 생각해본다.

 

그래 현재 단계에서는 뚜렷하게 생각이 안든다. 피곤하기도 하고 지식도 부족하고 말이야.

 

몇 가지 확실한 것은

 

1. 어쩌면 그 묶음이 차원 이동에 상관이 있거나 없을 수 있다는 점

2. PassengerId와 Transported(bool type) 을 그래프로 나타내기에는 산점도는 적절하지 않다는 점

3. 숫자로 보일 수 있으나 연속적인 숫자가 어떤 묶음을 의미하는 분류 또는 카테고리 형태 일 것이라는 점

 

그래 곤하다..자고 공부하자 맑은 정신으로

728x90