본문 바로가기
머신러닝

Kaggle 풀어보기 - DonorsChoose - 1

by 스클루지 2018. 4. 13.
반응형

이번에는 Donors Choose 라는 문제를 풀어보자.

기부금 지원을 요청하는 수십만 건의 프로젝트 중에서 프로젝트와 교사, 학교에 대한 정보를 이용하여

프로젝트가 승인될지 여부를 예측하는 문제이다.

우선 필요한 라이브러리를 import 하고, 데이터들을 읽어온다.

1
2
3
4
5
6
7
import numpy as np 
import pandas as pd 
 
train = pd.read_csv("../input/train.csv")
test = pd.read_csv("../input/test.csv")
train_resource = pd.read_csv("../input/resources.csv")
cs

train_resource 는 아래와 같이 생긴 데이터이다.

 

 id

description

 quantity

 price

 0

 p233245

 LC652 - Lakeshore Double-Space Mobile Drying Rack

 1

 149.00

 1

 p069063

 Bouncy Bands for Desks (Blue support pipes)

 3

 14.95

 2

 p069063

 Cory Stories: A Kid's Book About Living With Adhd

 1

 13.59

 3

 p069063

 Dixon Ticonderoga Wood-Cased #2 HB Pencils, Bo...

 2

 24.95

위 표에서 id를 인덱스로 quantity 와 price 를 더한다. 아래 코드에서 as_index=False 를 적으면

아래 표처럼 맨 왼쪽 열에 0,1,2, .. 인덱스가 보여진다.

1
2
train_resource_grouped = train_resource.groupby(['id'], as_index=False)[['quantity','price']].sum()
test_resource_grouped = train_resource.groupby(['id'], as_index=False)[['quantity','price']].sum()
cs

id

quantity

price 

0p0000017 459.56 
1p00000221 515.89 
2p0000034 298.97 
3p00000498 1113.69 
4p0000058 485.9

아래 코드를 이용해서 train / test 데이터와 방금 만든 train_resource_grouped / test_resource_grouped 데이터를 

id 별로 합친다.

그 아래 4줄의 코드는 에세이 부분을 합치는 코드이다.

project_essay_3 / 4 가 NaN 인 경우에도 예측값을 높일 수 있도록 1과3, 2와4를 합쳐서 NaN 을 최대한 제거해준다.


1
2
3
4
5
6
7
train_joined = pd.merge(train,train_resource_grouped,on='id')
test_joined = pd.merge(test,test_resource_grouped,on='id')
 
train_joined['projectessay_1_3'= train_joined['project_essay_1']+train_joined['project_essay_3'].replace(np.nan, '', regex=True)
train_joined['projectessay_2_4'= train_joined['project_essay_2']+train_joined['project_essay_4'].replace(np.nan, '', regex=True)
test_joined['projectessay_1_3'= test_joined['project_essay_1']+test_joined['project_essay_3'].replace(np.nan, '', regex=True)
test_joined['projectessay_2_4'= test_joined['project_essay_2']+test_joined['project_essay_4'].replace(np.nan, '', regex=True)
cs


다음 포스팅에 계속

반응형