이번에는 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 | ||
---|---|---|---|---|
0 | p000001 | 7 | 459.56 | |
1 | p000002 | 21 | 515.89 | |
2 | p000003 | 4 | 298.97 | |
3 | p000004 | 98 | 1113.69 | |
4 | p000005 | 8 | 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 |
다음 포스팅에 계속