{"nbformat": 4, "metadata": {"language_info": {"name": "python", "version": "3.6.3", "pygments_lexer": "ipython3", "mimetype": "text/x-python", "codemirror_mode": {"name": "ipython", "version": 3}, "nbconvert_exporter": "python", "file_extension": ".py"}, "kernelspec": {"name": "python3", "display_name": "Python 3", "language": "python"}}, "nbformat_minor": 1, "cells": [{"outputs": [], "cell_type": "code", "source": ["from multiprocessing import Pool, cpu_count\n", "import gc; gc.enable()\n", "import xgboost as xgb\n", "import pandas as pd\n", "import numpy as np\n", "from sklearn import *\n", "import sklearn\n", "\n", "train = pd.read_csv('../input/train.csv')\n", "train = pd.concat((train, pd.read_csv('../input/train_v2.csv')), axis=0, ignore_index=True).reset_index(drop=True)\n", "test = pd.read_csv('../input/sample_submission_v2.csv')\n", "\n", "transactions = pd.read_csv('../input/transactions.csv', usecols=['msno'])\n", "transactions = pd.concat((transactions, pd.read_csv('../input/transactions_v2.csv', usecols=['msno'])), axis=0, ignore_index=True).reset_index(drop=True)\n", "transactions = pd.DataFrame(transactions['msno'].value_counts().reset_index())\n", "transactions.columns = ['msno','trans_count']\n", "train = pd.merge(train, transactions, how='left', on='msno')\n", "test = pd.merge(test, transactions, how='left', on='msno')\n", "transactions = []; print('transaction merge...')\n", "\n", "user_logs = pd.read_csv('../input/user_logs_v2.csv', usecols=['msno'])\n", "#user_logs = pd.read_csv('../input/user_logs.csv', usecols=['msno'])\n", "#user_logs = pd.concat((user_logs, pd.read_csv('../input/user_logs_v2.csv', usecols=['msno'])), axis=0, ignore_index=True).reset_index(drop=True)\n", "user_logs = pd.DataFrame(user_logs['msno'].value_counts().reset_index())\n", "user_logs.columns = ['msno','logs_count']\n", "train = pd.merge(train, user_logs, how='left', on='msno')\n", "test = pd.merge(test, user_logs, how='left', on='msno')\n", "user_logs = []; print('user logs merge...')\n", "\n", "members = pd.read_csv('../input/members_v3.csv')\n", "train = pd.merge(train, members, how='left', on='msno')\n", "test = pd.merge(test, members, how='left', on='msno')\n", "members = []; print('members merge...') "], "execution_count": null, "metadata": {"_cell_guid": "f229ddc8-6924-4abf-8719-e0ec3c652863", "_uuid": "0797f9105fc62785850af750fd949002f8b9a322", "collapsed": false}}, {"outputs": [], "cell_type": "code", "source": ["\n", "members = pd.read_csv('../input/members_v3.csv')\n", "train = pd.merge(train, members, how='left', on='msno')\n", "test = pd.merge(test, members, how='left', on='msno')\n", "members = []; print('members merge...')\n", "\n", "gender = {'male':1, 'female':2}\n", "train['gender'] = train['gender'].map(gender)\n", "test['gender'] = test['gender'].map(gender)\n", "\n", "train = train.fillna(0)\n", "test = test.fillna(0)"], "execution_count": null, "metadata": {"_cell_guid": "48c17f47-87b0-4bc5-99f2-f4ba90faa921", "_uuid": "b24e7f1fb0c01887208a020356d783e46c7b4172", "collapsed": false}}, {"outputs": [], "cell_type": "code", "source": ["transactions = pd.read_csv('../input/transactions.csv')\n", "transactions = pd.concat((transactions, pd.read_csv('../input/transactions_v2.csv')), axis=0, ignore_index=True).reset_index(drop=True)\n", "transactions = transactions.sort_values(by=['transaction_date'], ascending=[False]).reset_index(drop=True)\n", "transactions = transactions.drop_duplicates(subset=['msno'], keep='first')\n", "\n", "train = pd.merge(train, transactions, how='left', on='msno')\n", "test = pd.merge(test, transactions, how='left', on='msno')\n", "transactions=[]"], "execution_count": null, "metadata": {"_cell_guid": "4a52098a-2eee-401f-8b5d-eddaa5e28fbd", "_uuid": "2d1849e5b6c07933039b3d025b3390a7db320c01", "collapsed": true}}, {"outputs": [], "cell_type": "code", "source": ["def transform_df(df):\n", "    df = pd.DataFrame(df)\n", "    df = df.sort_values(by=['date'], ascending=[False])\n", "    df = df.reset_index(drop=True)\n", "    df = df.drop_duplicates(subset=['msno'], keep='first')\n", "    return df\n", "\n", "def transform_df2(df):\n", "    df = df.sort_values(by=['date'], ascending=[False])\n", "    df = df.reset_index(drop=True)\n", "    df = df.drop_duplicates(subset=['msno'], keep='first')\n", "    return df\n", "\n", "df_iter = pd.read_csv('../input/user_logs.csv', low_memory=False, iterator=True, chunksize=10000000)\n", "last_user_logs = []\n", "i = 0 #~400 Million Records - starting at the end but remove locally if needed\n", "for df in df_iter:\n", "    if i>35:\n", "        if len(df)>0:\n", "            print(df.shape)\n", "            p = Pool(cpu_count())\n", "            df = p.map(transform_df, np.array_split(df, cpu_count()))   \n", "            df = pd.concat(df, axis=0, ignore_index=True).reset_index(drop=True)\n", "            df = transform_df2(df)\n", "            p.close(); p.join()\n", "            last_user_logs.append(df)\n", "            print('...', df.shape)\n", "            df = []\n", "    i+=1\n", "last_user_logs.append(transform_df(pd.read_csv('../input/user_logs_v2.csv')))\n", "last_user_logs = pd.concat(last_user_logs, axis=0, ignore_index=True).reset_index(drop=True)\n", "last_user_logs = transform_df2(last_user_logs)\n", "\n", "train = pd.merge(train, last_user_logs, how='left', on='msno')\n", "test = pd.merge(test, last_user_logs, how='left', on='msno')\n", "last_user_logs=[]"], "execution_count": null, "metadata": {"_cell_guid": "ef0ff7bd-cc4a-4603-b8a4-72591b6ba6c7", "_uuid": "0de7839769997cade8bb31b96ec40df398edee90", "collapsed": false}}, {"outputs": [], "cell_type": "code", "source": ["train = train.fillna(0)\n", "test = test.fillna(0)\n", "\n", "cols = [c for c in train.columns if c not in ['is_churn','msno']]"], "execution_count": null, "metadata": {"_cell_guid": "df0fd7c7-dad2-41b9-b144-0ea2d4b9fae4", "_uuid": "10a1d624dcb3c7b4a4209aa642f5a837d92a2f09", "collapsed": true}}, {"outputs": [], "cell_type": "code", "source": ["train.to_csv('train_features.csv')\n", "test.to_csv('test_features.csv')"], "execution_count": null, "metadata": {"collapsed": true}}]}