๐Ÿ’ก WIDA/DACON ๋ถ„๋ฅ˜-ํšŒ๊ท€

[DACON/์กฐ์•„์˜] ํŒŒ์ด์ฌ์„ ์ด์šฉํ•œ EDA

๋ ค์šฐ 2023. 4. 7. 13:39

Dacon ์ฝ”๋“œ ๊ณต์œ ์—์„œ ์ œ๊ณตํ•˜๊ณ ์žˆ๋Š” ์ฝ”๋“œ๋“ค๋„ ์ฐธ๊ณ ํ•˜์˜€์œผ๋‚˜, ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋Š” ์ฝ”๋“œ๋“ค์€ ๊ณผ๊ฐํ•˜๊ฒŒ ๋ฒ„๋ฆฌ๊ณ  ์ดํ•ด๋˜๋Š” ๋ถ€๋ถ„๋งŒ ํŒŒ์•…ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.


# ์‚ฌ์šฉํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
train_df = pd.read_csv("./dataset/train.csv")
train_df
# ๋ฐ์ดํ„ฐ์˜ ์ด ํ–‰์—ด ๊ฐœ์ˆ˜ ํ™•์ธ
train_df.shape

# null๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
train_df.isnull().sum()

null๊ฐ’์€ ์กด์žฌํ•˜์ง€ ์•Š์•˜์Œ

# ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ์ •๋ณด๋“ค์„ ์–ป์–ด๋ƒ„
# ๊ฐ column๋ณ„ ๋ฐ์ดํ„ฐ ํƒ€์ž…๋„ ์–ป์„ ์ˆ˜ ์žˆ์Œ
train_df.info()

 

# ๊ฐ ์—ด๋ณ„ ๊ธฐ์ดˆ ํ†ต๊ณ„๋Ÿ‰์„ ํ™•์ธํ•จ
train_df.describe()

๊ด‘๋„์˜ ๊ฒฝ์šฐ ๊ฐ’๋“ค์ด ์ง€์ˆ˜ํ‘œ๊ธฐ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ ๊ธฐ์ดˆํ†ต๊ณ„๋Ÿ‰์ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ

(https://seulcode.tistory.com/461 - ์ง€์ˆ˜ํ‘œ๊ธฐ๋ฒ• ์„ค๋ช… ์ฐธ๊ณ )

 

์ง€์ˆ˜ํ‘œ๊ธฐ๋ฒ•์ด๋ž€?

10์˜ ์ œ๊ณฑ์ˆ˜๋ฅผ ๊ฐ„๋‹จํžˆ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

e+0n ์ธ ๊ฒฝ์šฐ ์†Œ์ˆซ์  ์œ„๋กœ n+1์ž๋ฆฌ ์ˆ˜๋ผ๋Š” ์˜๋ฏธ๋กœ, 4.1e+03์€ 4100์„ ์˜๋ฏธํ•œ๋‹ค.

 

e-0n์ธ ๊ฒฝ์šฐ ์†Œ์ˆซ์  ์•„๋ž˜๋กœ n์ž๋ฆฌ๋ผ๋Š” ์˜๋ฏธ๋กœ 4.1e-0.4๋Š”  0.0041์„ ์˜๋ฏธํ•œ๋‹ค.

 

describe() ํ•จ์ˆ˜๊ฐ€ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ธฐ์ดˆํ†ต๊ณ„๋Ÿ‰์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

count null๊ฐ’์„ ์ œ์™ธํ•œ ์ด ๋ฐ์ดํ„ฐ์˜ ์ˆ˜
mean ํ‰๊ท ๊ฐ’
std ํ‘œ์ค€ํŽธ์ฐจ
min ์ตœ์†Ÿ๊ฐ’
25%, 50%, 75% ๊ฐ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๋•Œ ์ดˆ๋ฐ˜์˜ 25%, ์ค‘์•™๊ฐ’, 75%๊ฐ’์ž„
(ํ•˜๋‹จ์˜ ์ด๋ฏธ์ง€ ์ฐธ์กฐ)
max ์ตœ๋Œ“๊ฐ’

๊ด‘๋„์˜ ๊ธฐ์ดˆํ†ต๊ณ„๋Ÿ‰๋“ค์„ ๋ดค์„ ๋•Œ ํ‰๊ท ๊ฐ’๋“ค์€ 17~22 ์‚ฌ์ด์˜ ๊ฐ’๋“ค์„ ๊ฐ€์ง„๋‹ค.

ํ•˜์ง€๋งŒ ๋ถ„์‚ฐ์€ ์ œ๊ฐ๊ฐ์ด๊ณ , ์ตœ์†Œ ์ตœ๋Œ€๊ฐ’๋“ค๋„ ์ œ๊ฐ๊ฐ์ด๋‹ค.

25%, 50%, 75% ๊ฐ’๋“ค์€ ๊ฐ™์€ column๋ฅ˜(psfMag, fiberMag ๋“ฑ)๋ผ๋ฆฌ๋Š” ์œ ์‚ฌํ•˜๋‹ค.

 

๐Ÿ’ก Insight

1. ์ œ๊ฐ๊ฐ์ธ ๊ฐ’๋“ค์„ ์ •๊ทœํ™” ํ•ด์ฃผ๋ฉด ์–ด๋–จ์ง€ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๋ฉด ์ข‹์„ ๋“ฏ ํ•˜๋‹ค.

 

2. ๊ฐ™์€ column๋ฅ˜๋“ค๋ผ๋ฆฌ ๋ฌถ์–ด์„œ ์‹œ๊ฐํ™”๋ฅผ ํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

ํŒŒ์žฅ๋ณ„ ํŠน์ง•์ด ๋ณด์ด์ง€ ์•Š์„๊นŒ?

 

# type ์ข…๋ฅ˜๊ฐ€ ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ
star_type = train_df['type'].unique()

print(len(star_type), star_type)

type์€ ์ด 19๊ฐœ๋กœ, ๋ฆฌ์ŠคํŠธ ์•ˆ์˜ ์š”์†Œ๋“ค๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ์ด ๋˜์–ด์žˆ๋‹ค.

train_df['type'].value_counts()

sns.countplot(y='type', data=train_df)

QSO์™€ Galaxy๊ฐ€ ์••๋„์ ์œผ๋กœ ๋งŽ์•˜์Œ

๐Ÿ’ก Insight

1. Class์˜ ๋ถˆ๊ท ํ˜•์ด ์กด์žฌํ•œ๋‹ค.

์ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ณ ๋ฏผํ•ด๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

num_col = ['fiberID', 'psfMag_u', 'psfMag_g', 'psfMag_r', 'psfMag_i',
       'psfMag_z', 'fiberMag_u', 'fiberMag_g', 'fiberMag_r', 'fiberMag_i',
       'fiberMag_z', 'petroMag_u', 'petroMag_g', 'petroMag_r', 'petroMag_i',
       'petroMag_z', 'modelMag_u', 'modelMag_g', 'modelMag_r', 'modelMag_i',
       'modelMag_z']

fig = plt.figure(figsize=(20, 30))

ax = fig.gca()

train_df[num_col].hist(ax=ax)
plt.show()

 

x์ถ•์ด ๋„ˆ๋ฌด ๊ทน๋‹จ์ ์ด์—ฌ์„œ ๊ทธ๋Ÿฐ๊ฑธ๊ฐ€?

๊ทธ๋ž˜ํ”„๋ฅผ ํ•ด์„ํ•˜๋Š”๋ฐ ์ข€ ์–ด๋ ค์›€์ด ์ƒ๊ธด ๊ฒƒ ๊ฐ™๋‹ค.

 

corr = train_df[num_col].corr(method = 'pearson')

fig = plt.figure(figsize = (16, 12))
ax = fig.gca()

sns.set(font_scale = 1.5)  # heatmap ์•ˆ์˜ font-size ์„ค์ •

heatmap = sns.heatmap(corr.values, annot = True, fmt='.2f', annot_kws={'size':15},
                      yticklabels = num_col, xticklabels = num_col, ax=ax, cmap = "RdYlBu")
                      
plt.tight_layout() # ์—ฌ๋ฐฑ ์กฐ์ ˆ
plt.show()

๋ณ€์ˆ˜๋“ค ๊ฐ„์˜ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ์•Œ์•„๋ณด์ž.

๐Ÿ’ก Insight

1. ์Œ์˜ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ๋‚˜์˜ค๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋ช‡๊ฐ€์ง€ ์กด์žฌํ•˜๋ฉฐ,

์ƒ๊ด€๊ด€๊ณ„๋“ค์ด ๋ฌด๋ฆฌ์ง€์–ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋งŒ ๊ตฌ์ฒด์ ์ธ ์ˆ˜์น˜๋ฅผ ํ™•์ธํ–ˆ์„ ๋•Œ ์ƒ๊ด€๊ด€๊ณ„ ์›”๋“ฑํžˆ ๋†’์€ ๊ฒƒ์€ ๋งŽ์ง€ ์•Š๋‹ค.

 

2. ๋˜ํ•œ ์‹ ๊ธฐํ•œ ์ ์€ fiberID๊ฐ€ fiberMag๋“ค๊ณผ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค๊ณ  ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์ด๋‹ค.

for col in train_df.columns[2:]:
  plt.figure(figsize=(25,4))
  sns.boxplot(x='type',y=col,data=train_df)
  plt.title(col)
  plt.xticks(rotation=-30)
  plt.show()

๊ฐ type๋ณ„๋กœ ๋‹ค๋ฅธ ์ˆ˜์น˜ํ˜• ๋ณ€์ˆ˜๋“ค๊ณผ ์–ด๋–ค ๊ด€๊ณ„๊ฐ€ ์žˆ์„์ง€ boxplot์„ ๊ทธ๋ ค๋ดค๋‹ค.

fiberID๊นŒ์ง€๋งŒ ํ•ด๋„ ์˜ˆ์˜๊ฒŒ ์ž˜ ๋‚˜์™”๋‹ค.

๊ทธ ์ดํ›„๋กœ๋Š” ์ด์ƒ์น˜๋•Œ๋ฌธ์ธ์ง€, y์ถ•์˜ ๋ฒ”์œ„๋•Œ๋ฌธ์ธ์ง€.. ์ด์ƒํ•˜๊ฒŒ ๋‚˜์™”๋‹ค.

 

์œ„์—์„œ ๋ดค๋˜ ํžˆ์Šคํ† ๊ทธ๋žจ์ฒ˜๋Ÿผ ์ด์ƒํ•˜๋‹ค..

 

๐Ÿ’ก Insight

์ „๋ฐ˜์ ์œผ๋กœ ์ด์ƒ์น˜๊ฐ€ ๋งŽ์ง„ ์•Š์œผ๋‚˜ ๊ฐ„ํ˜น๊ฐ€๋‹ค -10000, -20000 ๋“ฑ

๊ทน๋‹จ์ ์ธ ๊ฐ’๋“ค์ด ๊ฐ„๊ฐ„ํžˆ ์กด์žฌํ•จ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ boxplot์˜ ํŠน์ง•์€ ๊ธฐ์ดˆํ†ต๊ณ„๋Ÿ‰์„ ๊น”๋”ํ•˜๊ฒŒ ์‹œ๊ฐํ™”ํ•ด์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋Š”๋ฐ,

์ด๋ฅผ ๋ณผ ์ˆ˜ ์—†์–ด์„œ ์•„์‰ฝ๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”๊ฑธ๊นŒ...?

 


๋„ˆ๋ฌด๋‚˜๋„ ๋ถ€์กฑํ•œ EDA์˜€๋‹ค.

 

์•„๋ฌด๋ž˜๋„ EDA๋ณด๋‹ค ๋ชจ๋ธ๋ง์ด ๋” ์‰ฌ์šด ๊ฒƒ ๊ฐ™๋‹ค.