{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport featuretools as ft\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\nimport pickle\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"fa94472321bcdbd37739e23193e13b310c29225a"},"cell_type":"markdown","source":"## import dataset"},{"metadata":{"trusted":true,"_uuid":"d71335861d446718facaff1e58ff626492c7f14c"},"cell_type":"code","source":"new = pd.read_csv('../input/new_merchant_transactions.csv',parse_dates =[\"purchase_date\"])\nhis = pd.read_csv('../input/historical_transactions.csv',parse_dates =[\"purchase_date\"])\ntrain = pd.read_csv( '../input/train.csv',parse_dates =[\"first_active_month\"])\ntest = pd.read_csv( '../input/test.csv',parse_dates =[\"first_active_month\"])\nmerchants = pd.read_csv( '../input/merchants.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"456adba463e6adca5b873ebc7553a7e652935c51"},"cell_type":"code","source":"train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ea0fbd1942b2f74dacfb525b7f6b4c35602730c5"},"cell_type":"code","source":"train_sub = train.loc[np.random.choice(train.index, 10000, replace=False)]","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"5ecca0ca99298ebad95f06492bb980c4dad1691e"},"cell_type":"markdown","source":"## check duplicates in merchants and train datasets, remove any duplicates"},{"metadata":{"trusted":true,"_uuid":"0200b233547d410da20c4af37909529c39c46ed1"},"cell_type":"code","source":"merchants = merchants.drop_duplicates(subset=\"merchant_id\",keep=\"first\")\nprint(train.shape[0]==train[\"card_id\"].nunique())\nprint(merchants.shape[0]==merchants[\"merchant_id\"].nunique())\n#print(merchants[merchants[\"merchant_id\"].duplicated()])","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"19b2b411269b66555c92e0b9c33958f860529acb"},"cell_type":"markdown","source":"## drop non-important column for his, new and merchant"},{"metadata":{"trusted":true,"_uuid":"7679fc2b68642c27c241b9a461bf53d1bc74de3d"},"cell_type":"code","source":"new_drop=new.drop(['purchase_date',\"merchant_category_id\",\n                                                   \"subsector_id\",\"city_id\",\n                                                   \"state_id\"], axis=1)\nhis_drop=his.drop(['purchase_date',\"merchant_category_id\",\n                                                   \"subsector_id\",\"city_id\",\n                                                   \"state_id\"], axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c6c69b5faacd627f6d54acb4bb0371e5342c44f7"},"cell_type":"code","source":"mer_drop = merchants.drop(['merchant_group_id',\"merchant_category_id\",\n                                                   \"subsector_id\",\"most_recent_sales_range\",\n                                                   \"most_recent_purchases_range\",\n                           'city_id','state_id'], axis=1)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"c89390657500d710d0ba9b2e735b0444b1e4764b"},"cell_type":"markdown","source":"## extract history transactions record for training data"},{"metadata":{"trusted":true,"_uuid":"42586e6ff6b4cb48e7564114215ef0e7cf3030d4"},"cell_type":"code","source":"train_his=train_sub[[\"card_id\"]].merge(his_drop, how='left', on=\"card_id\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1305bc9a99444061c1a2fd8b896fc9448b5f83de"},"cell_type":"code","source":"print(train_his.shape)\ntrain_his.head()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"021a88416963a503f08df7060015acaf19f417ed"},"cell_type":"markdown","source":"## **subsample his transactions**"},{"metadata":{"trusted":true,"_uuid":"622b8bbd8aef276fa1fcc5d0e8e5a012a08f92e9"},"cell_type":"code","source":"#train_his_transactions=train_his_transactions.dropna()\ntrain_his_sub=train_his\n#train_his_sub=train_his.loc[np.random.choice(train_his.index, 1000000, replace=False)]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6a9afe17e4997416c6a513a192fb9b97889f0ac3"},"cell_type":"code","source":"print(train_his_sub.shape)\ntrain_his_sub.head()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"6b23514948d560a419d36b47eeb68941cc503038"},"cell_type":"markdown","source":"## **one hot encode** for train_his_sub : authorized_flag; category_1; category_2; category_3"},{"metadata":{"trusted":true,"_uuid":"7e1eb80be161c1ea20a2d7106d3293b87f99f012"},"cell_type":"code","source":"authorized_flag = pd.get_dummies(train_his_sub['authorized_flag'])\nauthorized_flag.columns = ['authorized_flag_N', 'authorized_flag_Y']\ntrain_his_sub=train_his_sub.drop(['authorized_flag'], axis=1)\ntrain_his_sub=pd.concat([train_his_sub, authorized_flag], axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f23e6b7aab24bf58b5181aa36e3b9060cea20936"},"cell_type":"code","source":"train_his_sub.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4965079b4e8576bd215b0fb68f6fd8b8e2620615"},"cell_type":"code","source":"category_1 = pd.get_dummies(train_his_sub['category_1'])\ncategory_1.head()\ncategory_1.columns = ['category_1_N', 'category_1_Y']\ntrain_his_sub=train_his_sub.drop(['category_1'], axis=1)\ntrain_his_sub=pd.concat([train_his_sub, category_1], axis=1)\ntrain_his_sub.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3bdd4d188a5cdf4f97fe6e776b79686123e98de8"},"cell_type":"code","source":"category_2 = pd.get_dummies(train_his_sub['category_2'])\n#category_2.head()\ncategory_2.columns = ['category_2_1', 'category_2_2',\"category_2_3\",\"category_2_4\",\"category_2_5\"]\ntrain_his_sub=train_his_sub.drop(['category_2'], axis=1)\ntrain_his_sub=pd.concat([train_his_sub, category_2], axis=1)\ntrain_his_sub.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fadc00ba9e9165ff85745bb27a3f32f357a8b4cb"},"cell_type":"code","source":"category_3 = pd.get_dummies(train_his_sub['category_3'])\n#category_3.head()\ncategory_3.columns = ['category_3_A', 'category_3_B',\"category_3_C\"]\ntrain_his_sub=train_his_sub.drop(['category_3'], axis=1)\ntrain_his_sub=pd.concat([train_his_sub, category_3], axis=1)\ntrain_his_sub.head()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"10e6b80cbb585a8afa47df1ca10972654e0253f9"},"cell_type":"markdown","source":"## rename column for merging simplicity"},{"metadata":{"trusted":true,"_uuid":"180cf66e6e35f519d1faea76b267aa2ee1ae8411"},"cell_type":"code","source":"train_his_sub.columns","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e143fbf4276dff4221bb40c75d1fe561a7ce7ec3"},"cell_type":"code","source":"train_his_sub.columns.values[1:]=[\"his_trans_\" + str(col) for col in list(train_his_sub)[1:]]\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"59c96399ee4313e520f6126354e0b4408aef3013"},"cell_type":"code","source":"train_his_sub.columns.values[2] = \"merchant_id\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e472f7bc31d0ae8796376b57560b8e70f6167979"},"cell_type":"code","source":"train_his_sub.columns.values","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b50c7e07bfa88b32bae08d13b88c60a8606bed72"},"cell_type":"code","source":"mer_drop = merchants.drop(['merchant_group_id',\"merchant_category_id\",\n                                                   \"subsector_id\",\"most_recent_sales_range\",\n                                                   \"most_recent_purchases_range\",\n                           'city_id','state_id'], axis=1)\nmer_drop.columns.values[1:]=[\"his_mer_\" + str(col) for col in mer_drop.columns.values[1:]] \nmer_drop.columns","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"c7c4b3dc962f6bc7ff69aea6cfe3cd2de4cde712"},"cell_type":"markdown","source":"## merge with merchants (X : his transaction, Y : merchant)"},{"metadata":{"trusted":true,"_uuid":"a32185119bd7a335ae9408101441b1afae0f7fd4"},"cell_type":"code","source":"train_his_sub_mer = train_his_sub.merge(mer_drop,how=\"left\",on='merchant_id')\ntrain_his_sub_mer.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"dbb9f1b2f82c0d4bd524ac973d7a4698db6f7235"},"cell_type":"code","source":"train_his_sub_mer.head()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8ea69db6e67b1542dd46b4b8a895f37ff1168a2e"},"cell_type":"markdown","source":"## **one hot encode** for train_his_sub_mer(merchants part) : category_1; category_2; category_3"},{"metadata":{"trusted":true,"_uuid":"5c177c373fb5860685a1c156f3e09490fef37baf"},"cell_type":"code","source":"category_1 = pd.get_dummies(train_his_sub_mer['his_mer_category_1'])\ncategory_1.head()\ncategory_1.columns = ['his_mer_category_1_N', 'his_mer_category_1_Y']\ntrain_his_sub_mer=train_his_sub_mer.drop(['his_mer_category_1'], axis=1)\ntrain_his_sub_mer=pd.concat([train_his_sub_mer, category_1], axis=1)\ntrain_his_sub_mer.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bb4e46b225f6cda9b6b4fb1503c027f4161b4c44"},"cell_type":"code","source":"category_2 = pd.get_dummies(train_his_sub_mer['his_mer_category_2'])\n#category_2.head()\ncategory_2.columns = ['his_mer_category_2_1', 'his_mer_category_2_2',\"his_mer_category_2_3\",\"his_mer_category_2_4\",\"his_mer_category_2_5\"]\ntrain_his_sub_mer=train_his_sub_mer.drop(['his_mer_category_2'], axis=1)\ntrain_his_sub_mer=pd.concat([train_his_sub_mer, category_2], axis=1)\ntrain_his_sub_mer.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a6dccc7c2b03a212997fc4412a3622bf00dc91f2"},"cell_type":"code","source":"category_4 = pd.get_dummies(train_his_sub_mer['his_mer_category_4'])\n#category_1.head()\ncategory_4.columns = ['his_mer_category_4_N', 'his_mer_category_4_Y']\ntrain_his_sub_mer=train_his_sub_mer.drop(['his_mer_category_4'], axis=1)\ntrain_his_sub_mer=pd.concat([train_his_sub_mer, category_4], axis=1)\ntrain_his_sub_mer.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b2798cf8f28a09767f8d5a9fcd0a6dd47cb85d8c"},"cell_type":"code","source":"with open('train_his_sub_mer.pickle', 'wb') as f:\n    pickle.dump(train_his_sub_mer, f)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7076743bda443116d5609632bb892d98c2b50a33"},"cell_type":"code","source":"with open('train_his_sub_mer.pickle', 'rb') as f:\n    train_his_sub_mer = pickle.load(f)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"3b9c0aa2b7d9c00995f3604b4e08184dfe424752"},"cell_type":"markdown","source":""},{"metadata":{"_uuid":"9a74b367cd0e657f29690e3991f027259325b1cb"},"cell_type":"markdown","source":"## same for new transaction"},{"metadata":{"trusted":true,"_uuid":"5203032984842a8efacde18e7773d0418713c70f"},"cell_type":"code","source":"## extract history transactions record for training data\n\ntrain_new=train_sub[[\"card_id\"]].merge(new_drop, how='left', on=\"card_id\")\n\nprint(train_new.shape)\ntrain_new.head()\n\n## **one hot encode** for train_his_sub : authorized_flag; category_1; category_2; category_3\ntrain_new['authorized_flag']=train_new['authorized_flag'].fillna(\"N\")\nauthorized_flag = pd.get_dummies(train_new['authorized_flag'])\n#print(train_new['authorized_flag'].value_counts())\n#print(train_new['authorized_flag'].isna().sum())\nauthorized_flag.columns = ['authorized_flag_N', 'authorized_flag_Y']\ntrain_new=train_new.drop(['authorized_flag'], axis=1)\ntrain_new=pd.concat([train_new, authorized_flag], axis=1)\n\ntrain_new.head()\n\ncategory_1 = pd.get_dummies(train_new['category_1'])\ncategory_1.head()\ncategory_1.columns = ['category_1_N', 'category_1_Y']\ntrain_new=train_new.drop(['category_1'], axis=1)\ntrain_new=pd.concat([train_new, category_1], axis=1)\ntrain_new.head()\n\ncategory_2 = pd.get_dummies(train_new['category_2'])\n#category_2.head()\ncategory_2.columns = ['category_2_1', 'category_2_2',\"category_2_3\",\"category_2_4\",\"category_2_5\"]\ntrain_new=train_new.drop(['category_2'], axis=1)\ntrain_new=pd.concat([train_new, category_2], axis=1)\ntrain_new.head()\n\ncategory_3 = pd.get_dummies(train_new['category_3'])\n#category_3.head()\ncategory_3.columns = ['category_3_A', 'category_3_B',\"category_3_C\"]\ntrain_new=train_new.drop(['category_3'], axis=1)\ntrain_new=pd.concat([train_new, category_3], axis=1)\ntrain_new.head()\n\n## rename column for merging simplicity\n\nprint(train_new.columns)\n\ntrain_new.columns.values[1:]=[\"new_trans_\" + str(col) for col in list(train_new)[1:]]\n\n\ntrain_new.columns.values[2] = \"merchant_id\"\n\nprint(train_new.columns.values)\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"eb5d6d8a240ed712ecef2068ddb5f9df38e20eca"},"cell_type":"code","source":"mer_drop = merchants.drop(['merchant_group_id',\"merchant_category_id\",\n                                                   \"subsector_id\",\"most_recent_sales_range\",\n                                                   \"most_recent_purchases_range\",\n                           'city_id','state_id'], axis=1)\nmer_drop.columns.values[1:]=[\"new_mer_\" + str(col) for col in mer_drop.columns.values[1:]] \nprint(mer_drop.columns)\n\n## merge with merchants (X : his transaction, Y : merchant)\n\ntrain_new_mer = train_new.merge(mer_drop,how=\"left\",on='merchant_id')\ntrain_new_mer.shape\n\ntrain_new_mer.head()\n\n## **one hot encode** for train_his_sub_mer(merchants part) : category_1; category_2; category_3\n\ncategory_1 = pd.get_dummies(train_new_mer['new_mer_category_1'])\n#category_1.head()\ncategory_1.columns = ['new_mer_category_1_N', 'new_mer_category_1_Y']\ntrain_new_mer=train_new_mer.drop(['new_mer_category_1'], axis=1)\ntrain_new_mer=pd.concat([train_new_mer, category_1], axis=1)\ntrain_new_mer.head()\n\ncategory_2 = pd.get_dummies(train_new_mer['new_mer_category_2'])\n#category_2.head()\ncategory_2.columns = ['new_mer_category_2_1', 'new_mer_category_2_2',\"new_mer_category_2_3\",\"new_mer_category_2_4\",\"new_mer_category_2_5\"]\ntrain_new_mer=train_new_mer.drop(['new_mer_category_2'], axis=1)\ntrain_new_mer=pd.concat([train_new_mer, category_2], axis=1)\ntrain_new_mer.head()\n\ncategory_4 = pd.get_dummies(train_new_mer['new_mer_category_4'])\n#category_1.head()\ncategory_4.columns = ['new_mer_category_4_N', 'new_mer_category_4_Y']\ntrain_new_mer=train_new_mer.drop(['new_mer_category_4'], axis=1)\ntrain_new_mer=pd.concat([train_new_mer, category_4], axis=1)\ntrain_new_mer.head()\n\nwith open('train_new_mer.pickle', 'wb') as f:\n    pickle.dump(train_new_mer, f)\n\nwith open('train_new_mer.pickle', 'rb') as f:\n    train_new_mer = pickle.load(f)\n\ntrain_new_mer.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a1dee9f8a4517befc99e39928a34e538f2cc9e1e"},"cell_type":"code","source":"train_new_mer.columns.values","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d6c6ded3154baeca82ce6a0fbe779aba8e7c2e07"},"cell_type":"code","source":"train_new_mer.shape","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"e9d62f096fd1ee88f7453fbc78ff0a3c1e05eae2"},"cell_type":"markdown","source":"## Feature Engineering"},{"metadata":{"trusted":true,"_uuid":"58ea3824b24f9258e9b52125866bcb6ae540abee"},"cell_type":"code","source":"def aggregate_new_trans(data):  \n    agg_func = {\n        'card_id': ['size'], #num_trans\n        'new_trans_installments': ['sum', 'mean','median', 'max', 'min', 'std', 'nunique'],\n        'merchant_id': ['nunique'],\n        'new_trans_month_lag': ['mean', 'max', 'min', 'std', 'nunique'],\n        'new_trans_purchase_amount': ['sum', 'mean', 'max', 'min', 'std', 'nunique'],\n        'new_trans_authorized_flag_Y': ['mean'],\n        'new_trans_category_1_Y': ['mean'],\n        'new_trans_category_2_1': ['mean'],\n        'new_trans_category_2_2': ['mean'],\n        'new_trans_category_2_3': ['mean'],\n        'new_trans_category_2_4': ['mean'],\n        'new_trans_category_2_5': ['mean'],\n        'new_trans_category_3_A': ['mean'],\n        'new_trans_category_3_B': ['mean'],\n        'new_trans_category_3_C': ['mean'],\n        'new_mer_numerical_1':['mean'],\n        'new_mer_numerical_2':['mean'],\n        'new_mer_avg_sales_lag3':['mean'],\n        'new_mer_avg_purchases_lag3':['mean'],\n        'new_mer_active_months_lag3':['mean'], \n        'new_mer_avg_sales_lag6':['mean'],\n        'new_mer_avg_purchases_lag6':['mean'],\n        'new_mer_active_months_lag6':['mean'],\n        'new_mer_avg_sales_lag12':['mean'],\n        'new_mer_avg_purchases_lag12':['mean'],\n        'new_mer_active_months_lag12':['mean'],\n        'new_mer_category_1_Y':['mean'], \n        'new_mer_category_2_1':['mean'],\n        'new_mer_category_2_2':['mean'], \n        'new_mer_category_2_3':['mean'],\n        'new_mer_category_2_4':['mean'], \n        'new_mer_category_2_5':['mean'],\n        'new_mer_category_4_Y':['mean']\n    }    \n    agg_trans = data.groupby(['card_id']).agg(agg_func)\n    agg_trans.columns = ['_'.join(col).strip() for col in agg_trans.columns.values]\n    agg_trans.reset_index(inplace=True)\n    \n    return agg_trans\n\n#hist_sum = aggregate_trans(histdata, 'hist_')\nnew_sum = aggregate_new_trans(train_new_mer)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3ff17a05f733010098252012b20a2290c7d5e7e4"},"cell_type":"code","source":"new_sum.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"239846e4e3ae69a9cff5c24a6cfa38cb1123634f"},"cell_type":"code","source":"new_sum.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"01bf771327961323c05e10e8dcad4f57c701a82f"},"cell_type":"code","source":"def aggregate_his_trans(data):  \n    agg_func = {\n        'card_id': ['size'], #num_trans\n        'his_trans_installments': ['sum', 'mean','median', 'max', 'min', 'std', 'nunique'],\n        'merchant_id': ['nunique'],\n        'his_trans_month_lag': ['mean', 'max', 'min', 'std', 'nunique'],\n        'his_trans_purchase_amount': ['sum', 'mean', 'max', 'min', 'std', 'nunique'],\n        'his_trans_authorized_flag_Y': ['mean'],\n        'his_trans_category_1_Y': ['mean'],\n        'his_trans_category_2_1': ['mean'],\n        'his_trans_category_2_2': ['mean'],\n        'his_trans_category_2_3': ['mean'],\n        'his_trans_category_2_4': ['mean'],\n        'his_trans_category_2_5': ['mean'],\n        'his_trans_category_3_A': ['mean'],\n        'his_trans_category_3_B': ['mean'],\n        'his_trans_category_3_C': ['mean'],\n        'his_mer_numerical_1':['mean'],\n        'his_mer_numerical_2':['mean'],\n        'his_mer_avg_sales_lag3':['mean'],\n        'his_mer_avg_purchases_lag3':['mean'],\n        'his_mer_active_months_lag3':['mean'], \n        'his_mer_avg_sales_lag6':['mean'],\n        'his_mer_avg_purchases_lag6':['mean'],\n        'his_mer_active_months_lag6':['mean'],\n        'his_mer_avg_sales_lag12':['mean'],\n        'his_mer_avg_purchases_lag12':['mean'],\n        'his_mer_active_months_lag12':['mean'],\n        'his_mer_category_1_Y':['mean'], \n        'his_mer_category_2_1':['mean'],\n        'his_mer_category_2_2':['mean'], \n        'his_mer_category_2_3':['mean'],\n        'his_mer_category_2_4':['mean'], \n        'his_mer_category_2_5':['mean'],\n        'his_mer_category_4_Y':['mean']\n    }    \n    agg_trans = data.groupby(['card_id']).agg(agg_func)\n    agg_trans.columns = ['_'.join(col).strip() for col in agg_trans.columns.values]\n    agg_trans.reset_index(inplace=True)\n    \n    return agg_trans\n\n#hist_sum = aggregate_trans(histdata, 'hist_')\nhis_sum = aggregate_his_trans(train_his_sub_mer)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"07b127cd186a527d60f55f0a79315d12ca060817"},"cell_type":"code","source":"with open('new_sum.pickle', 'wb') as f:\n    pickle.dump(new_sum, f)\nwith open('his_sum.pickle', 'wb') as f:\n    pickle.dump(his_sum, f)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e1b283b55b1ff3950b1f51f3a195cda9f579f685"},"cell_type":"code","source":"his_sum.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ec26b745d86c40cec1e5ff97eef6987e555fdab1"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}