{"cells":[{"metadata":{"trusted":true,"_uuid":"d1338cfae175e875bcb3ac84d284542b7774490f"},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom collections import Counter\n%matplotlib inline\n\nimport warnings\nwarnings.filterwarnings('ignore')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fbd4c24a61372e1bae5fb47c6b33e3291fddf224"},"cell_type":"code","source":"data_train = pd.read_csv('../input/train.csv')\ndata_test = pd.read_csv('../input/test.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1562e8f6b9edbe301aaf63c8e013470d7e2d2026"},"cell_type":"code","source":"data_train.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7dc6b766b7c13071062c3bc39502aa10973bb6bf"},"cell_type":"code","source":"data_train.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a146249b0d498d50e5f1e37127dde30b3e49fc78"},"cell_type":"code","source":"def detect_outliers(df,n,features):\n    outlier_indices = []\n    for col in features:\n        Q1 = np.percentile(df[col],25)\n        Q3 = np.percentile(df[col],75)\n        IQR = Q3 - Q1\n        outlier_step = 1.5 * IQR\n        outlier_list_col = df[(df[col] < Q1 - outlier_step) | (df[col] > Q3 + outlier_step)].index\n        outlier_indices.extend(outlier_list_col)\n\n    outlier_indices = Counter(outlier_indices)\n    multiple_outliers = list(k for k, v in outlier_indices.items() if v>n)\n    return multiple_outliers","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"91350a03edc19380190e36c1bc165a6754a8ddeb"},"cell_type":"code","source":"data1 = data_train.copy()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3d12379197d7470e9b97bf71136ad2d532da109e"},"cell_type":"code","source":"Outliers_to_drop = detect_outliers(data1,2,['Age','Parch','Fare','SibSp'])\ndata1.iloc[Outliers_to_drop]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"55b5b5af9bcc0872b3f79b208d9a12c26c2e4c19"},"cell_type":"code","source":"data2 = data1.drop(Outliers_to_drop).reset_index(drop=True)\ndata3 = data2.copy()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ec2373eb7a2cbc42b65226f9a013098c84faa40c"},"cell_type":"code","source":"data2.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b639d516daa4dd908894c4abd6e2bc7e83d2f0c0"},"cell_type":"code","source":"data2.head(3)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"fe7776c06e976d53e9b3c40ffab0a37187a71d1d"},"cell_type":"markdown","source":"### EDA&Feature Engineering"},{"metadata":{"trusted":true,"_uuid":"5a29702eaa5d78f2342c2186b75b55355bb84f89"},"cell_type":"code","source":"def categorical_plot(df, feature):\n    sns.countplot(data=df, x=feature)\n    sns.factorplot(data=df, x=feature,y ='Survived', kind='bar')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"738b011851671f690bbb90cd2f39de3daa0a6481"},"cell_type":"markdown","source":"### Pclass"},{"metadata":{"trusted":true,"_uuid":"ccfbd491612cfa6adf20e5a1dbdaaa6242866fe2"},"cell_type":"code","source":"categorical_plot(data2, 'Pclass')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"63448088a2e8d30749a8fc2650baf40126236a72"},"cell_type":"markdown","source":"### Sex"},{"metadata":{"trusted":true,"_uuid":"dbf99ad9434ea8547fc0644e3d94be5fc458137a"},"cell_type":"code","source":"categorical_plot(data2, 'Sex')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"87416ded1a7d8da1a47330f8053429b52ff0802c"},"cell_type":"code","source":"sns.factorplot(data=data2, x='Pclass',y ='Survived', hue='Sex',kind='bar')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4743a7074e8f84369917cfd7ecadbb7a2eb0469c"},"cell_type":"code","source":"data2['Sex'] = data2['Sex'].apply(lambda x: 1 if x=='male' else 0)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"0848392d4db1fa41545b853ce2681fb49d8b7aff"},"cell_type":"markdown","source":"### Embark"},{"metadata":{"trusted":true,"_uuid":"5a54bc43d4e23a7db3feb780eea8cd6d5f8f52bf"},"cell_type":"code","source":"categorical_plot(data2, 'Embarked')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"980c4173385346462fc689698f389a502e0f750a"},"cell_type":"code","source":"data2['Embarked'] = data2.Embarked.fillna('S')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"dd3dc4f1e4bdd1178f1728d54d12bbf22dfcdfa4"},"cell_type":"code","source":"sns.factorplot(data=data2, x='Embarked', y ='Survived', hue='Sex',kind='bar')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"26c72f09487aeb4d2d4c01adedefb8ae9e323948"},"cell_type":"markdown","source":"### Cabin"},{"metadata":{"trusted":true,"_uuid":"c8e39de6c1de52aec98af533eb263d55195553ea"},"cell_type":"code","source":"data2['Cabin_Initial'] = data2['Cabin'].apply(lambda x: 'NA' if pd.isna(x) else str(x)[0])\ndata2.Cabin_Initial.value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fd75026bb26f73726db208e9a462fec57baf1d0c"},"cell_type":"code","source":"categorical_plot(data2, 'Cabin_Initial')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2acaa188486530e399e5e675f21f352bb2b10cd9"},"cell_type":"code","source":"sns.factorplot(data=data2, x='Cabin_Initial', y ='Survived', hue='Sex',kind='bar')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b30f73beba6acc42b8443784c546cd541324fab5"},"cell_type":"markdown","source":"### Age"},{"metadata":{"trusted":true,"_uuid":"14ed1f8d9252ff5772bcef81207bafbec76fa051"},"cell_type":"code","source":"sns.distplot(data2[-(data2['Age'].isna())].Age)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9b4f4119f6d196b19bbdcc748c7edc899ce8f618"},"cell_type":"code","source":"data2.head(3)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1d3138127020aebdf98c9b82b15d5c57d6f5eeb4"},"cell_type":"code","source":"na_index = list(data2[data2['Age'].isna()].index)\nage_median = data2[-(data2['Age'].isna())].Age.median()\nfor i in na_index:\n    age_median2 = data2[((data2['Sex']==data2.iloc[i]['Sex'])&(data2['SibSp']==data2.iloc[i]['SibSp'])&(data2['Parch']==data2.iloc[i]['Parch']))]['Age'].median()\n    if not np.isnan(age_median2):\n        data2['Age'].iloc[i] = age_median2\n    else:\n        data2['Age'].iloc[i] = age_median","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"dc011298d502e0d8213f41d637bdff3abe0fe5db"},"cell_type":"code","source":"sns.distplot(data2.Age)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ff381b8a86c546f93ec06a4790cec7c4d08db169"},"cell_type":"code","source":"data2['Age_bucket'] = pd.cut(data2['Age'], 6, labels=['A','B','C','D','E','F'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3c269e337f0fc8958b009349288a1abde5f11e8e"},"cell_type":"code","source":"data2.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1f0979a507e81c76762229aef52f884b689ad9f7"},"cell_type":"code","source":"sns.factorplot(data=data2, x='Age_bucket', y='Survived',kind='bar')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fc97c7bd3a770ccac74ad432056f4084bb39c78a"},"cell_type":"code","source":"def age_gap(x):\n    if x < 8:\n        return 'A'\n    elif x < 12:\n        return 'B'\n    elif x < 18:\n        return 'C'\n    elif x < 50:\n        return 'D'\n    elif x < 60:\n        return 'E'\n    else:\n        return 'F'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ecc1bc59d68400d0b56791041fd2738ff5075198"},"cell_type":"code","source":"data2['Age_bucket2'] = data2['Age'].apply(age_gap)\nsns.factorplot(data=data2, x='Age_bucket2', y='Survived',kind='bar')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"edfad7cd1f22692793b6675aeb793dfe1ebf4bc4"},"cell_type":"markdown","source":"### SibSp"},{"metadata":{"trusted":true,"_uuid":"38d924aa611e3738ada33fc0e7ef7ec6892c1926"},"cell_type":"code","source":"sns.factorplot(data=data2, x='SibSp', y='Survived',kind='bar')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"220fa217c9758f387325abdc8f69dfeb63405f9c"},"cell_type":"code","source":"sns.factorplot(data=data2, x='Parch', y='Survived',kind='bar')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"28074664c57fa875ba0a0b12e4343c6c25bafe6f"},"cell_type":"code","source":"data2['Family'] = data2['Parch']+data2['SibSp']+1\nsns.factorplot(data=data2, x='Family', y='Survived',kind='bar')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"dac3ad0fc64679c05c901b431391ade774b765c9"},"cell_type":"markdown","source":"### Name"},{"metadata":{"trusted":true,"_uuid":"e5891b1772e493ef3e1b805bd545aefa20fb37b0"},"cell_type":"code","source":"data2['Title'] = data2['Name'].map(lambda i: i.split(',')[1].split('.')[0].strip())\ndata2['Title'].value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fcbe39e11ca54106353bc5758f0d74cfbcfc517e"},"cell_type":"code","source":"data2['Title'] = data2['Title'].replace(['Lady', 'the Countess','Countess','Capt', 'Col','Don', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')\ndata2['Title'] = data2['Title'].map({'Master':0, 'Miss':1, 'Ms' : 1 , 'Mme':1, 'Mlle':1, 'Mrs':1, 'Mr':2, 'Rare':3})\ndata2['Title'] = data2['Title'].astype(int)\n\nsns.factorplot(data=data2, x='Title', y='Survived',kind='bar')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"1b2b61f4b95e62457fb2b168549606da688c44fb"},"cell_type":"markdown","source":"### Ticket"},{"metadata":{"trusted":true,"_uuid":"3621869c4826d2c43b924ef6079226879a9db88a"},"cell_type":"code","source":"data2.head(3)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"edd3c6c9e0a90f42e0adafee03867980f0cb01f5"},"cell_type":"code","source":"data2['Ticket_Initial'] = data2['Ticket'].apply(lambda x: 'NA' if x.isdigit() else \n                                               x.replace('.','').replace('/','').strip().split(' ')[0])\ndata2[['Ticket_Initial','Survived']].groupby(by='Ticket_Initial', as_index=True).mean().sort_values(by='Survived', ascending=False)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"daf9861f79497dc354de1cc2f39d5471af575820"},"cell_type":"markdown","source":"### Fare"},{"metadata":{"trusted":true,"_uuid":"f7ecb1fac486935f85cfa61b2a8158580d8f8b12"},"cell_type":"code","source":"sns.distplot(data2.Fare)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f3342cdaf739f838f235308ea44b7b603605abfd"},"cell_type":"code","source":"data2['Fare_log'] = data2['Fare'].apply(lambda x: np.log(x) if x !=0 else 0)\nsns.distplot(data2.Fare_log)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d265698f4660eb800b12c67c1ee90cf709cfd115"},"cell_type":"code","source":"data2['Fare_bucket'] = pd.cut(data2['Fare_log'], bins=4, labels=['A','B','C','D'])\nsns.factorplot(data=data2, x='Fare_bucket', y='Survived',kind='bar')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"deaa839a7ee5b50d7ca465cad37eb2f65f2a36da"},"cell_type":"markdown","source":"### Concat"},{"metadata":{"trusted":true,"_uuid":"4af8a997dd97fca39cb7519664e14763ba27ad26"},"cell_type":"code","source":"data_test.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"99f74136c4e0711e4925877972b5a6c3bc239a01"},"cell_type":"code","source":"data_all = pd.concat([data3, data_test], axis=0).reset_index(drop=True)\ntrain_len = len(data3)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6e56a792f85ea2572573c89ffdd92570486fd482"},"cell_type":"code","source":"data_all['Embarked'] = data_all.Embarked.fillna('S')\ndata_all['Cabin_Initial'] = data_all['Cabin'].apply(lambda x: 'NA' if pd.isna(x) else str(x)[0])\n\nna_index = list(data_all[data_all['Age'].isna()].index)\nage_median = data_all[-(data_all['Age'].isna())].Age.median()\nfor i in na_index:\n    age_median2 = data_all[((data_all['Sex']==data_all.iloc[i]['Sex'])&(data_all['SibSp']==data_all.iloc[i]['SibSp'])&(data_all['Parch']==data_all.iloc[i]['Parch']))]['Age'].median()\n    if not np.isnan(age_median2):\n        data_all['Age'].iloc[i] = age_median2\n    else:\n        data_all['Age'].iloc[i] = age_median\n        \ndata_all['Age_bucket2'] = data_all['Age'].apply(age_gap)\n\ndata_all['Family'] = data_all['Parch']+data_all['SibSp']+1\ndata_all['Title'] = data_all['Name'].map(lambda i: i.split(',')[1].split('.')[0].strip())\ndata_all['Title'] = data_all['Title'].replace(['Lady', 'the Countess','Countess','Capt', 'Col','Don', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')\ndata_all['Title'] = data_all['Title'].map({'Master':0, 'Miss':1, 'Ms' : 1 , 'Mme':1, 'Mlle':1, 'Mrs':1, 'Mr':2, 'Rare':3})\ndata_all['Title'] = data_all['Title'].astype(int)\n\ndata_all['Ticket_Initial'] = data_all['Ticket'].apply(lambda x: 'NA' if x.isdigit() else \n                                               x.replace('.','').replace('/','').strip().split(' ')[0])\ndata_all['Fare_log'] = data_all['Fare'].apply(lambda x: np.log(x) if x !=0 else 0)\ndata_all['Fare_bucket'] = pd.cut(data_all['Fare_log'], bins=4, labels=['A','B','C','D'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f36a93eb8f627bbb5e23ff2006f55cf57beaed4d"},"cell_type":"code","source":"data_all.tail()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3c0d845e47cc27c4ec0abb8e6eb7c90e35b028c6"},"cell_type":"code","source":"dummies_Age = pd.get_dummies(data_all['Age_bucket2'], prefix='Age_bucket2')\ndummies_Cabin = pd.get_dummies(data_all['Cabin_Initial'], prefix='Cabin_Initial')\ndummies_Embarked = pd.get_dummies(data_all['Embarked'], prefix='Embarked')\ndummies_Fare = pd.get_dummies(data_all['Fare_bucket'], prefix='Fare_bucket')\ndummies_Ticket = pd.get_dummies(data_all['Ticket_Initial'], prefix='Ticket_Initial')\ndummies_Pclass = pd.get_dummies(data_all['Pclass'], prefix='Pclass')\ndummies_Sex = pd.get_dummies(data_all['Sex'], prefix='Sex')\ndummies_Family = pd.get_dummies(data_all['Family'], prefix='Family')\ndummies_Name = pd.get_dummies(data_all['Title'], prefix='Title')\n\ndata_all = pd.concat([data_all, dummies_Age, dummies_Cabin, dummies_Embarked, dummies_Fare,\n                     dummies_Ticket,dummies_Pclass,dummies_Sex,dummies_Family,dummies_Name], axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"31c68e41c43f33ec2427aef5886b2e8c9058048e"},"cell_type":"code","source":"data_all.head(3)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1e5a7b48833df910c9deebb1b52708a986c3b444"},"cell_type":"code","source":"train_df = data_all[:train_len].filter(regex='Age_bucket2_.*|Fare_bucket_.*|Cabin_Initial_.*|Embarked_.*|Sex_.*|Pclass_.*|Family_.*|Ticket_Initial_.*|Title_.*')\ntest_df = data_all[train_len:].filter(regex='Age_bucket2_.*|Fare_bucket_.*|Cabin_Initial_.*|Embarked_.*|Sex_.*|Pclass_.*|Family_.*|Ticket_Initial_.*|Title_.*')\n\ntrain = train_df.as_matrix()\ntest = test_df.as_matrix()\n\nX = train\ny = data_all[:train_len]['Survived'].as_matrix()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"53ec7016e7d4ad83c54224ea8b2ea16e59dd8be7"},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5d8f97ec0405d9a9f37560d936aa509c67c8c531"},"cell_type":"code","source":"from sklearn.model_selection import GridSearchCV\nfrom sklearn.metrics import accuracy_score","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"094fc45b5d5bd2e80ae50c8d9125becf9fd6cf59"},"cell_type":"markdown","source":"### Logistic Regression"},{"metadata":{"trusted":true,"_uuid":"2c06268c11fbf2dc36daed20318e2098d8be8dea"},"cell_type":"code","source":"from sklearn.linear_model import LogisticRegression\n\nlgr = LogisticRegression()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"724a6d8249aec06d9bce6e8fbb35b201bfc1aa5c"},"cell_type":"code","source":"C = [0.001,0.01,0.1,1,10,100]\npenalty = ['l1','l2']\n\nparam_grid = dict(C=C, penalty=penalty)\n\ngrid_search = GridSearchCV(lgr, param_grid, scoring='accuracy', cv=5)\ngrid_result = grid_search.fit(X_train, y_train)\n\nresult_lgr = pd.DataFrame(grid_result.cv_results_)\nresult_lgr.sort_values(by='mean_test_score', ascending=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d01716c259525b771edeb1daa609b31ee10f2407"},"cell_type":"code","source":"best_lgr = grid_search.best_estimator_\ny_pred = best_lgr.predict(X_test)\nprint(accuracy_score(y_test,y_pred))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d94e792aa9afadb58aba4af3f34ea4db33f02e9e"},"cell_type":"markdown","source":"> ### RandomForest"},{"metadata":{"trusted":true,"_uuid":"189e4d797dc4a9a5be4e3d8187a240fcdfe4d713"},"cell_type":"code","source":"from sklearn.ensemble import RandomForestClassifier\n\nrfc = RandomForestClassifier()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"87fe65b00e63b2c89d67b16da0c026ffb2da21c0"},"cell_type":"code","source":"n_estimators = [i for i in range(50,350,10)]\nmax_depth = [i for i in range(7,13,1)]\n\nparam_grid = dict(max_depth=max_depth, n_estimators=n_estimators)\n\ngrid_search = GridSearchCV(rfc, param_grid, scoring='accuracy', cv=5)\ngrid_result = grid_search.fit(X_train, y_train)\n\nresult_rfc = pd.DataFrame(grid_result.cv_results_)\nresult_rfc.sort_values(by='mean_test_score', ascending=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"663e2702f24c0e439bf873c8a58e10e26471edbc"},"cell_type":"code","source":"best_rfc = grid_search.best_estimator_\ny_pred = best_rfc.predict(X_test)\nprint(accuracy_score(y_test,y_pred))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"368ba6b7e46624d71485207a67c8f4c87c9c5573"},"cell_type":"markdown","source":"### GradientBoosting"},{"metadata":{"trusted":true,"_uuid":"9546a113825d4568ecaa752eeb2a80527ef0ff11"},"cell_type":"code","source":"from sklearn.ensemble import GradientBoostingClassifier\n\ngbc = GradientBoostingClassifier()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"393235267141e30ef833ce8b1ad4f45d3362cff5"},"cell_type":"code","source":"n_estimators = [i for i in range(50,350,10)]\nmax_depth = [i for i in range(7,13,1)]\n\nparam_grid = dict(max_depth=max_depth, n_estimators=n_estimators)\n\ngrid_search = GridSearchCV(gbc, param_grid, scoring='accuracy', cv=5)\ngrid_result = grid_search.fit(X_train, y_train)\n\nresult_gbc = pd.DataFrame(grid_result.cv_results_)\nresult_gbc.sort_values(by='mean_test_score', ascending=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8f047c5ccb6fe7f1b14446c1a370a52110c4ec8a"},"cell_type":"code","source":"best_gbc = grid_search.best_estimator_\ny_pred = best_gbc.predict(X_test)\nprint(accuracy_score(y_test,y_pred))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cecfa9c3645180c87bfc8534a4c8c0580dc6d29b"},"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}