{"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)\n\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\n\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":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport plotly.offline as py\nfrom plotly.offline import init_notebook_mode, iplot\nimport plotly.graph_objs as go\nfrom plotly import tools\ninit_notebook_mode(connected=True)  \nimport plotly.figure_factory as ff\nimport os\nprint(os.listdir(\"../input\"))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e09408639c4e9f2286e62a484a39948a0874babc"},"cell_type":"code","source":"game_data = pd.read_csv('../input/game_data.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bbb8be9f87a60b2393a85f8e622ef1232c85dd6f"},"cell_type":"code","source":"game_data.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0bf8a30255d11027c07669a1a169376a40729f45"},"cell_type":"code","source":"import random\ndef random_colors(number_of_colors):\n    color = [\"#\"+''.join([random.choice('0123456789ABCDEF') for j in range(6)])\n                 for i in range(number_of_colors)]\n    return color","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cebf5df4b64d2f56a0efee847e3349702560008c"},"cell_type":"code","source":"game_data['Temperature']= game_data['Temperature'].fillna(game_data['Temperature'].mean())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4cdb1d0d3e25ae5f73a060a090c2bdedc85bfa2e"},"cell_type":"code","source":"game_data.head()\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0fbbc4ddffce5303b95cead436ef98bbe215e21a"},"cell_type":"code","source":"video_review= pd.read_csv('../input/video_review.csv')\nvideo_review.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5a7839419cb7537a952eb47dbbb4983337b14db7"},"cell_type":"code","source":"NGS= pd.read_csv('../input/NGS-2016-post.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"aea847517868d62fbb63d708e8184481099a6e44"},"cell_type":"code","source":"NGS.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"406125c083839c5653ef117471e46a2e0a0757ab"},"cell_type":"code","source":"NGS = NGS.fillna(0)\nNGS.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"50ecdf29c190c946141d18cf22f17c05035036da"},"cell_type":"code","source":"NGS1= NGS.truncate(before=1, after=1000)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f11f06eebcc4d7020993639381a534e3405c363f"},"cell_type":"code","source":"def convert_to_mph(dis, converter):\n    mph = dis * converter\n    return mph","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"646589f6f3390003b1b0496be9e21687809599e5"},"cell_type":"code","source":"def get_speed(ng_data, playId, gameKey, player, partner):\n    ng_data = pd.read_csv(ng_data,low_memory=False)\n    ng_data['mph'] = convert_to_mph(ng_data['dis'], 20.455)\n    player_data = ng_data.loc[(ng_data.GameKey == gameKey) & (ng_data.PlayID == playId) \n                               & (ng_data.GSISID == player)].sort_values('Time')\n    partner_data = ng_data.loc[(ng_data.GameKey == gameKey) & (ng_data.PlayID == playId) \n                              & (ng_data.GSISID == partner)].sort_values('Time')\n    player_grouped = player_data.groupby(['GameKey','PlayID','GSISID'], \n                               as_index = False)['mph'].agg({'max_mph': max,\n                                                             'avg_mph': np.mean\n                                                            })\n    player_grouped['Player_Involved'] = 'player_injured'\n    partner_grouped = partner_data.groupby(['GameKey','PlayID','GSISID'], \n                               as_index = False)['mph'].agg({'max_mph': max,\n                                                             'avg_mph': np.mean\n                                                            })\n    partner_grouped['Player_Involved'] = 'primary_partner'\n    return pd.concat([player_grouped, partner_grouped], axis = 0)[['Player_Involved',\n                                                                   'max_mph',\n                                                                   'avg_mph']].reset_index(drop=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f1f2dee9228e9bd4c9cd7e4a64e38c610b516e06"},"cell_type":"code","source":"def load_layout():\n    \"\"\"\n    Returns a dict for a Football themed Plot.ly layout \n    \"\"\"\n    layout = dict(\n        title = \"Player Activity\",\n        plot_bgcolor='darkseagreen',\n        showlegend=True,\n        xaxis=dict(\n            autorange=False,\n            range=[0, 120],\n            showgrid=False,\n            zeroline=False,\n            showline=True,\n            linecolor='black',\n            linewidth=1,\n            mirror=True,\n            ticks='',\n            tickmode='array',\n            tickvals=[10,20, 30, 40, 50, 60, 70, 80, 90, 100, 110],\n            ticktext=['Goal', 10, 20, 30, 40, 50, 40, 30, 20, 10, 'Goal'],\n            showticklabels=True\n        ),\n        yaxis=dict(\n            title='',\n            autorange=False,\n            range=[-3.3,56.3],\n            showgrid=False,\n            zeroline=False,\n            showline=True,\n            linecolor='black',\n            linewidth=1,\n            mirror=True,\n            ticks='',\n            showticklabels=False\n        ),\n        shapes=[\n            dict(\n                type='line',\n                layer='below',\n                x0=0,\n                y0=0,\n                 x1=120,\n                y1=0,\n                line=dict(\n                    color='white',\n                    width=2\n                )\n            ),\n            dict(\n                type='line',\n                layer='below',\n                x0=0,\n                y0=53.3,\n                x1=120,\n                y1=53.3,\n                line=dict(\n                    color='white',\n                    width=2\n                )\n            ),\n            dict(\n                type='line',\n                layer='below',\n                x0=10,\n                y0=0,\n                x1=10,\n                y1=53.3,\n                line=dict(\n                    color='white',\n                    width=10\n                )\n            ),\n            dict(\n                type='line',\n                layer='below',\n                x0=20,\n                y0=0,\n                x1=20,\n                y1=53.3,\n                line=dict(\n                    color='white'\n                )\n            ),\n             dict(\n                type='line',\n                layer='below',\n                x0=30,\n                y0=0,\n                x1=30,\n                y1=53.3,\n                line=dict(\n                    color='white'\n                )\n            ),\n            dict(\n                type='line',\n                layer='below',\n                x0=40,\n                y0=0,\n                x1=40,\n                y1=53.3,\n                line=dict(\n                    color='white'\n                )\n            ),\n            dict(\n                type='line',\n                layer='below',\n                x0=50,\n                y0=0,\n                x1=50,\n                y1=53.3,\n                line=dict(\n                    color='white'\n                )\n            ),\n            dict(\n                type='line',\n                layer='below',\n                x0=60,\n                y0=0,\n                x1=60,\n                y1=53.3,\n                line=dict(\n                    color='white'\n                )\n            ),dict(\n                type='line',\n                layer='below',\n                x0=70,\n                y0=0,\n                x1=70,\n                y1=53.3,\n                line=dict(\n                    color='white'\n                )\n            ),dict(\n                type='line',\n                layer='below',\n                x0=80,\n                y0=0,\n                x1=80,\n                y1=53.3,\n                line=dict(\n                    color='white'\n                )\n            ),\n            dict(\n                type='line',\n                layer='below',\n                x0=90,\n                y0=0,\n                x1=90,\n                y1=53.3,\n                line=dict(\n                    color='white'\n                )\n            ),dict(\n                type='line',\n                layer='below',\n                x0=100,\n                y0=0,\n                x1=100,\n                y1=53.3,\n                line=dict(\n                    color='white'\n                )\n            ),\n             dict(\n                type='line',\n                layer='below',\n                x0=110,\n                y0=0,\n                x1=110,\n                y1=53.3,\n                line=dict(\n                    color='white',\n                    width=10\n                )\n            )\n        ]\n    )\n    return layout\n\nlayout = load_layout()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c227fe1165fb6179af0b6f3c5b1f8e4e336fcd36"},"cell_type":"code","source":"Player_position= go.Scatter(x=NGS1.x,y=NGS1.y)\n\nfig=go.Figure(data=[Player_position],layout=layout)\npy.iplot(fig)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"43540f74ac01fdd0faea95b36c931c89b4208d67"},"cell_type":"code","source":"\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4fcf8db865f3bc99921c41789e973f73f5718096"},"cell_type":"code","source":"# Loading and plotting functions\n\ndef load_plays_for_game(GameKey):\n    \"\"\"\n    Returns a dataframe of play data for a given game (GameKey)\n    \"\"\"\n    play_information = pd.read_csv('../input/NFL-Punt-Analytics-Competition/play_information.csv')\n    play_information = play_information[play_information['GameKey'] == GameKey]\n    return play_information\n\n\ndef load_game_and_ngs(ngs_file=None, GameKey=None):\n    \"\"\"\n    Returns a dataframe of player movements (NGS data) for a given game\n    \"\"\"\n    if ngs_file is None:\n        print(\"Specifiy an NGS file.\")\n        return None\n    if GameKey is None:\n        print('Specify a GameKey')\n        return None\n    # Merge play data with NGS data    \n    plays = load_plays_for_game(GameKey)\n    ngs = pd.read_csv(ngs_file, low_memory=False)\n    merged = pd.merge(ngs, plays, how=\"inner\", on=[\"GameKey\", \"PlayID\", \"Season_Year\"])\n    return merged\n\n\ndef plot_play(game_df, PlayID, player1=None, player2=None, custom_layout=False):\n    \"\"\"\n    Plots player movements on the field for a given game, play, and two players\n    \"\"\"\n    game_df = game_df[game_df.PlayID==PlayID]\n    \n    GameKey=str(pd.unique(game_df.GameKey)[0])\n    HomeTeam = pd.unique(game_df.Home_Team_Visit_Team)[0].split(\"-\")[0]\n    VisitingTeam = pd.unique(game_df.Home_Team_Visit_Team)[0].split(\"-\")[1]\n    YardLine = game_df[(game_df.PlayID==PlayID) & (game_df.GSISID==player1)]['YardLine'].iloc[0]\n    \n    traces=[]   \n    if (player1 is not None) & (player2 is not None):\n        game_df = game_df[ (game_df['GSISID']==player1) | (game_df['GSISID']==player2)]\n        for player in pd.unique(game_df.GSISID):\n            player = int(player)\n            trace = go.Scatter(\n                x = game_df[game_df.GSISID==player].x,\n                y = game_df[game_df.GSISID==player].y,\n                name='GSISID '+str(player),\n                mode='markers'\n            )\n            traces.append(trace)\n    else:\n        print(\"Specify GSISIDs for player1 and player2\")\n        return None\n    \n    if custom_layout is not True:\n        layout = load_layout()\n        layout['title'] =  HomeTeam + \\\n        ' vs. ' + VisitingTeam + \\\n        '<br>Possession: ' + \\\n        YardLine.split(\" \")[0] +'@'+YardLine.split(\" \")[1]\n    data = traces\n    fig = dict(data=data, layout=layout)\n    play_description = game_df[(game_df.PlayID==PlayID) & (game_df.GSISID==player1)].iloc[0][\"PlayDescription\"]\n    print(\"\\n\\n\\t\",play_description)\n    offline.iplot(fig, config=config)\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"16436db98d6812cfa8f282bd9bfef09f1fb69b3e"},"cell_type":"code","source":"video_review1 = pd.merge(video_review,NGS, on=['Season_Year','GameKey','PlayID','GSISID'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c5a648dfa8a20b8432ce982b097100b4de942e9b"},"cell_type":"code","source":"video_review1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9fa9381bfc6bcb5f2c9fbeae58391f87cc4222c8"},"cell_type":"code","source":"import glob\nfrom plotly import offline\nimport plotly.graph_objs as go\n\n\npd.set_option('max.columns', None)\noffline.init_notebook_mode()\nconfig = dict(showLink=False)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"1e233e7f5294ee1fc503b5b981700a64d0d4f54e"},"cell_type":"markdown","source":"No concussion incident happened during 2016 post season matches."},{"metadata":{"trusted":true,"_uuid":"bef01dd864ca51b740a47c3f11974d764646bb6d"},"cell_type":"code","source":"NGS_pre= pd.read_csv('../input/NGS-2016-pre.csv')\nNGS_pre.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2f2c94a395975d38659bfa564a0f866ec430ac7a"},"cell_type":"code","source":"NGS_pre1= NGS_pre.truncate(before=1, after=1000)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"63e6d80644a1d48d46f42615887cddf80ffca2db"},"cell_type":"code","source":"trace1= go.Scatter(x=NGS_pre1.x,y=NGS_pre1.y)\n\nfig=go.Figure(data=[trace1],layout=layout)\npy.iplot(fig)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"40e29c5db29f89b1512c9f211f9cc1d068ebf577"},"cell_type":"code","source":"video_review1 = pd.merge(video_review,NGS_pre, on=['Season_Year','GameKey','PlayID','GSISID'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7ce8d80e132073a9b75ea5e4479ace6001a79b9e"},"cell_type":"code","source":"video_review1= video_review1.sort_values('GSISID', ascending=False).drop_duplicates('GameKey').sort_index()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b0d05a0146b7f646513b7c95c7e339751a77d714"},"cell_type":"code","source":"# Plot a single play, with two players\nprint('Primary Impact:',video_review1.iloc[0][\"Primary_Impact_Type\"]) \nprint('Primary Activity:',video_review1.iloc[0][\"Player_Activity_Derived\"] )\nprint('Partners Activity:',video_review1.iloc[0][\"Primary_Partner_Activity_Derived\"] )\nprint('Players from same team :',video_review1.iloc[0][\"Friendly_Fire\"] )\nprint(get_speed('../input/NGS-2016-pre.csv', 3129, 5, 31057, 32482))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"227ce8d14071fdfa5cc94b1e10f5bb2b2fd63c87"},"cell_type":"code","source":"# Plot a single play, with two players\nprint('Primary Impact:',video_review1.iloc[1][\"Primary_Impact_Type\"]) \nprint('Primary Activity:',video_review1.iloc[1][\"Player_Activity_Derived\"] )\nprint('Partners Activity:',video_review1.iloc[1][\"Primary_Partner_Activity_Derived\"] )\nprint('Players from same team :',video_review1.iloc[1][\"Friendly_Fire\"] )\nprint(get_speed('../input/NGS-2016-pre.csv', 2587, 21, 29343, 31059))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"42da2fa60c54a10819de63f4b16e82c3135c360f"},"cell_type":"code","source":"# Plot a single play, with two players\nprint('Primary Impact:',video_review1.iloc[2][\"Primary_Impact_Type\"]) \nprint('Primary Activity:',video_review1.iloc[2][\"Player_Activity_Derived\"] )\nprint('Partners Activity:',video_review1.iloc[2][\"Primary_Partner_Activity_Derived\"] )\nprint('Players from same team :',video_review1.iloc[2][\"Friendly_Fire\"] )\nprint(get_speed('../input/NGS-2016-pre.csv', 538, 29, 31023, 31941))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cd886d0433a614f8467652b5fc18f8fc355205c0"},"cell_type":"code","source":"print('Primary Impact:',video_review1.iloc[3][\"Primary_Impact_Type\"]) \nprint('Primary Activity:',video_review1.iloc[3][\"Player_Activity_Derived\"] )\nprint('Partners Activity:',video_review1.iloc[3][\"Primary_Partner_Activity_Derived\"] )\nprint('Players from same team :',video_review1.iloc[3][\"Friendly_Fire\"] )\nprint(get_speed('../input/NGS-2016-pre.csv', 1212, 45, 33121, 28429))","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-output":true,"trusted":true,"_uuid":"c8ea5b31468770b4bec9f38e24609663b8b0a8d0"},"cell_type":"code","source":"print('Primary Impact:',video_review1.iloc[5][\"Primary_Impact_Type\"]) \nprint('Primary Activity:',video_review1.iloc[5][\"Player_Activity_Derived\"] )\nprint('Partners Activity:',video_review1.iloc[5][\"Primary_Partner_Activity_Derived\"] )\nprint('Players from same team :',video_review1.iloc[5][\"Friendly_Fire\"] )\nprint(get_speed('../input/NGS-2016-pre.csv', 905, 60, 30786, 29815))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"50964e52b9df64f66710d7ba24cc554f4291c67e"},"cell_type":"code","source":"NGS_reg= pd.read_csv('../input/NGS-2016-reg-wk1-6.csv')\nNGS_reg.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5acb7eed773180b62959179a63a4fb872213ae7f"},"cell_type":"code","source":"NGS_reg1= NGS_reg.truncate(before=1, after=1000)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"634b30a244bfeea430ea08898e99dba1fd0905c6"},"cell_type":"code","source":"trace1= go.Scatter(x=NGS_reg1.x,y=NGS_reg1.y)\n\nfig=go.Figure(data=[trace1],layout=layout)\npy.iplot(fig)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8fe5d1924561ca3fc3a215069bf21ac7c4149adb"},"cell_type":"code","source":"video_review= pd.merge(video_review,NGS_reg, on=['Season_Year','GameKey','PlayID','GSISID'])\nvideo_review1= video_review1.sort_values('GSISID', ascending=False).drop_duplicates('GameKey').sort_index()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"414211cdbc974bd7e5be833669d9427f61272e83"},"cell_type":"code","source":"print('Primary Impact:',video_review1.iloc[0][\"Primary_Impact_Type\"]) \nprint('Primary Activity:',video_review1.iloc[0][\"Player_Activity_Derived\"] )\nprint('Partners Activity:',video_review1.iloc[0][\"Primary_Partner_Activity_Derived\"] )\nprint('Players from same team :',video_review1.iloc[0][\"Friendly_Fire\"] )\nprint(get_speed('../input/NGS-2016-reg-wk1-6.csv', 2342, 144, 32410, 23259))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"3b2bee72cc743169547c394e3c898c97cb7b7604"},"cell_type":"markdown","source":"Players and their Partner's Movement during the play which caused concussion"},{"metadata":{"trusted":true,"_uuid":"05c2f304ef561a213972a42d8eb16bd2d3bd3af2"},"cell_type":"code","source":"print('Primary Impact:',video_review1.iloc[1][\"Primary_Impact_Type\"]) \nprint('Primary Activity:',video_review1.iloc[1][\"Player_Activity_Derived\"] )\nprint('Partners Activity:',video_review1.iloc[1][\"Primary_Partner_Activity_Derived\"] )\nprint('Players from same team :',video_review1.iloc[1][\"Friendly_Fire\"] )\nprint(get_speed('../input/NGS-2016-reg-wk1-6.csv', 3663, 149, 28128, 29629))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a2c3a6fb59673f7dde4bf1b2648795229fbba068"},"cell_type":"code","source":"NGS_reg= pd.read_csv('../input/NGS-2016-reg-wk7-12.csv')\nNGS_reg.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"21d93cd4583d4970b5d1e2c9e7b987cc5b7011d9"},"cell_type":"code","source":"NGS_reg1= NGS_reg.truncate(before=1, after=1000)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6b3235782631b859fea79d1a51a0e2fc58e8459e"},"cell_type":"code","source":"trace1= go.Scatter(x=NGS_reg1.x,y=NGS_reg1.y)\n\nfig=go.Figure(data=[trace1],layout=layout)\npy.iplot(fig)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"95e810e0c3913f762e331592e2f97e4d3061b088"},"cell_type":"code","source":"video_review1 = pd.merge(video_review,NGS_reg, on=['Season_Year','GameKey','PlayID','GSISID'])\nvideo_review1= video_review1.sort_values('GSISID', ascending=False).drop_duplicates('GameKey').sort_index()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"1f94f0f082bebec64a186b1124820259607e96b9"},"cell_type":"markdown","source":"Pre Season Analysis of 2017 NFL Matches"},{"metadata":{"trusted":true,"_uuid":"434c698be5dc4de0279d2e641d5bfe8dcd1cb9f0"},"cell_type":"code","source":"NGS_pre1= NGS_pre.truncate(before=1, after=1000)\nNGS_pre.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2ab534985508d4343b4646eca3cd8e6ebd74de5f"},"cell_type":"code","source":"NGS_pre1= NGS_pre.truncate(before=1, after=1000)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0e5227c91a0503d37753f02bea5ba71d94b9147e"},"cell_type":"code","source":"trace1= go.Scatter(x=NGS_pre1.x,y=NGS_pre1.y)\n\nfig=go.Figure(data=[trace1],layout=layout)\npy.iplot(fig)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fe0ccdd312f8412ee8d8233dd5464322772ff5a2"},"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}