{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport warnings\nwarnings.filterwarnings('ignore')\nsns.set_style('whitegrid')\nplt.rcParams['font.sans-serif'] = ['SimHei']\nsns.set(font='SimHei')","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:00:24.533885Z","iopub.execute_input":"2022-07-12T03:00:24.534969Z","iopub.status.idle":"2022-07-12T03:00:25.733796Z","shell.execute_reply.started":"2022-07-12T03:00:24.534846Z","shell.execute_reply":"2022-07-12T03:00:25.732607Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('../input/bike-sharing-demand/train.csv')\ntest = pd.read_csv('../input/bike-sharing-demand/test.csv')\ntrain.info()\ntest.info() ## 没有空值","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:00:35.954810Z","iopub.execute_input":"2022-07-12T03:00:35.955207Z","iopub.status.idle":"2022-07-12T03:00:36.045650Z","shell.execute_reply.started":"2022-07-12T03:00:35.955174Z","shell.execute_reply":"2022-07-12T03:00:36.044820Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:00:42.918032Z","iopub.execute_input":"2022-07-12T03:00:42.919140Z","iopub.status.idle":"2022-07-12T03:00:42.944607Z","shell.execute_reply.started":"2022-07-12T03:00:42.919089Z","shell.execute_reply":"2022-07-12T03:00:42.943512Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#查看是否符合高斯分布\ntrain['count'].describe()","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:00:46.749721Z","iopub.execute_input":"2022-07-12T03:00:46.750133Z","iopub.status.idle":"2022-07-12T03:00:46.764027Z","shell.execute_reply.started":"2022-07-12T03:00:46.750102Z","shell.execute_reply":"2022-07-12T03:00:46.762977Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"均值191，标准差181，50%分位数是145，75%分位数是284，最大值977，说明右侧存在长尾。去除掉异常值，并取log处理，观察结果。","metadata":{}},{"cell_type":"code","source":"#把超出3倍标准差的数据，共147个剔除\ntrain = train.loc[np.abs(train['count']-train['count'].mean()) < (3*train['count'].std())]\n#对剔除异常值后的count和count_log进行比较\ntrain['count_log'] = np.log(train['count'])\nf, [ax1, ax2] = plt.subplots(1,2, figsize=(15,6))\nsns.distplot(train['count'], ax=ax1)\nax1.set_title('Distribution of count')\nsns.distplot(train['count_log'], ax=ax2)\nax2.set_title('Distribution of count_log')","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:00:52.236663Z","iopub.execute_input":"2022-07-12T03:00:52.237053Z","iopub.status.idle":"2022-07-12T03:00:53.036190Z","shell.execute_reply.started":"2022-07-12T03:00:52.237019Z","shell.execute_reply":"2022-07-12T03:00:53.035129Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"左边是去除异常值后count分布，右边是取log后的","metadata":{}},{"cell_type":"code","source":"#合并数据\ndf = train.append(test, ignore_index=True)\n#整理列顺序\ndf = pd.DataFrame(df, columns=train.columns)\ndf.tail()","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:00:58.646760Z","iopub.execute_input":"2022-07-12T03:00:58.647195Z","iopub.status.idle":"2022-07-12T03:00:58.670656Z","shell.execute_reply.started":"2022-07-12T03:00:58.647162Z","shell.execute_reply":"2022-07-12T03:00:58.669380Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#将datetime分解为多种时间格式\ndf['datetime'] = pd.to_datetime(df['datetime'], format='%Y-%m-%d %H:%M:%S')\n#细化\n# 去掉weekday，方便看每周的变化情况\ndf['year'] = df['datetime'].dt.year\ndf['month'] = df['datetime'].dt.month\ndf['hour'] = df['datetime'].dt.hour\ndf['weekday'] = df['datetime'].dt.weekday","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:01:04.003473Z","iopub.execute_input":"2022-07-12T03:01:04.003864Z","iopub.status.idle":"2022-07-12T03:01:04.027737Z","shell.execute_reply.started":"2022-07-12T03:01:04.003830Z","shell.execute_reply":"2022-07-12T03:01:04.026840Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#查看天气状况\nf, ax = plt.subplots(2,2, figsize=(12,10))\nsns.distplot(df.temp, ax=ax[0,0])\nax[0,0].set_title('Distribution of temp')\nsns.distplot(df.atemp, ax=ax[0,1])\nax[0,1].set_title('Distribution of atemp')\nsns.distplot(df.humidity, ax=ax[1,0])\nax[1,0].set_title('Distribution of humidity')\nsns.distplot(df.windspeed, ax=ax[1,1])\nax[1,1].set_title('Distribution of windspeed')","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:01:11.708810Z","iopub.execute_input":"2022-07-12T03:01:11.709944Z","iopub.status.idle":"2022-07-12T03:01:13.239314Z","shell.execute_reply.started":"2022-07-12T03:01:11.709861Z","shell.execute_reply":"2022-07-12T03:01:13.238084Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#风速为0的数据偏多，且有空缺，采用随机森林的方法填充异常值\nwind_0 = df[df['windspeed']==0]\nwind_not0 = df[df['windspeed']!=0]\ny_label = wind_not0['windspeed']","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:01:39.408497Z","iopub.execute_input":"2022-07-12T03:01:39.408877Z","iopub.status.idle":"2022-07-12T03:01:39.419928Z","shell.execute_reply.started":"2022-07-12T03:01:39.408847Z","shell.execute_reply":"2022-07-12T03:01:39.419001Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#猜测风速和天气以及时间都有关\nfrom sklearn.ensemble import RandomForestClassifier\nmodel = RandomForestClassifier()\nwindcolunms = ['season', 'weather', 'temp', 'atemp', 'humidity', 'hour', 'month']\nmodel.fit(wind_not0[windcolunms], y_label.astype('int'))\npred_y = model.predict(wind_0[windcolunms])\n#预测结果填充\nwind_0['windspeed'] = pred_y\ndf_rfw = wind_not0.append(wind_0)\ndf_rfw.reset_index(inplace=True)\ndf_rfw.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:01:45.022514Z","iopub.execute_input":"2022-07-12T03:01:45.022859Z","iopub.status.idle":"2022-07-12T03:01:47.738321Z","shell.execute_reply.started":"2022-07-12T03:01:45.022831Z","shell.execute_reply":"2022-07-12T03:01:47.737033Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_rfw = df_rfw.drop('index', axis=1)\n#查看处理后的风速情况\nf, ax = plt.subplots(figsize=(8,5))\nsns.distplot(df_rfw['windspeed'], ax=ax)\nax.set_title('Distribution of handled windspeed')","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:17:51.877207Z","iopub.execute_input":"2022-07-12T03:17:51.877589Z","iopub.status.idle":"2022-07-12T03:17:52.323318Z","shell.execute_reply.started":"2022-07-12T03:17:51.877558Z","shell.execute_reply":"2022-07-12T03:17:52.322549Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#查看各组数据和count的相关性\nf, ax = plt.subplots(figsize=(20,16))\ncmap = sns.diverging_palette(220, 10, as_cmap=True)\nsns.heatmap(df_rfw[df_rfw['count'].notnull()].corr(), cmap=cmap, ax=ax, annot=True, lw=.1)\n","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:17:59.074422Z","iopub.execute_input":"2022-07-12T03:17:59.075426Z","iopub.status.idle":"2022-07-12T03:18:00.550076Z","shell.execute_reply.started":"2022-07-12T03:17:59.075372Z","shell.execute_reply":"2022-07-12T03:18:00.548955Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#count和temp/atemp/hour有较明显正相关，和humidity有较明显负相关\ndf_rfw[df_rfw['count'].notnull()].corr()['count'].sort_values(ascending=False)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:19:07.240863Z","iopub.execute_input":"2022-07-12T03:19:07.241251Z","iopub.status.idle":"2022-07-12T03:19:07.264633Z","shell.execute_reply.started":"2022-07-12T03:19:07.241220Z","shell.execute_reply":"2022-07-12T03:19:07.263528Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"查看count与各元素间的变动关系","metadata":{}},{"cell_type":"code","source":"#时间数据\ncount_columns = ['count', 'registered', 'casual']\nf, [ax1, ax2] = plt.subplots(1,2, figsize=(15,5))\ndf_rfw.groupby(['year','season'])[count_columns].mean().plot.line(ax=ax1)\ndf_rfw.groupby('season')[count_columns].mean().plot.line(ax=ax2)\nax2.set_xticks(range(1,5))","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:19:12.896810Z","iopub.execute_input":"2022-07-12T03:19:12.897242Z","iopub.status.idle":"2022-07-12T03:19:13.337717Z","shell.execute_reply.started":"2022-07-12T03:19:12.897204Z","shell.execute_reply":"2022-07-12T03:19:13.336623Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"registered和casual的用户均呈现上升的趋势，夏季用户租赁量增速最快，冬天租赁量回退，春秋租赁量缓慢增加。","metadata":{}},{"cell_type":"code","source":"f, ax = plt.subplots(figsize=(10,5))\ndf_rfw.groupby('hour')[count_columns].mean().plot.line(ax=ax)\nax.set_title('租车量在一天内的变化', fontsize=15)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:19:19.732790Z","iopub.execute_input":"2022-07-12T03:19:19.733167Z","iopub.status.idle":"2022-07-12T03:19:20.012146Z","shell.execute_reply.started":"2022-07-12T03:19:19.733136Z","shell.execute_reply":"2022-07-12T03:19:20.010955Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"registered用户存在明显的早晚高峰，对应上班时间，中午午饭时间也有小峰值，casual用户则是在10-20点有灵活租赁。","metadata":{}},{"cell_type":"code","source":"f, [ax1,ax2] = plt.subplots(1,2,figsize=(15,5))\ndf_rfw_w = df_rfw.loc[df_rfw['workingday']==1]\ndf_rfw_notw = df_rfw.loc[df_rfw['workingday']==0]\ndf_rfw_w.groupby('hour')[count_columns].mean().plot.line(ax=ax1)\ndf_rfw_notw.groupby('hour')[count_columns].mean().plot.line(ax=ax2)\nax1.set_title('工作日租车量在一天内的变化', fontsize=15)\nax2.set_title('非工作日租车量在一天内的变化', fontsize=15)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:19:23.959253Z","iopub.execute_input":"2022-07-12T03:19:23.959640Z","iopub.status.idle":"2022-07-12T03:19:24.425326Z","shell.execute_reply.started":"2022-07-12T03:19:23.959610Z","shell.execute_reply":"2022-07-12T03:19:24.424036Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"将工作日与非工作日分开看，可以看到在工作日有更明显的早晚高峰，在非工作日两种用户的租赁趋势相同","metadata":{}},{"cell_type":"code","source":"f, ax = plt.subplots(figsize=(10,5))\ndf_rfw.groupby('weekday')[count_columns].mean().plot.line(ax=ax)\nax.set_title('租赁数量的周变化曲线')","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:19:28.534552Z","iopub.execute_input":"2022-07-12T03:19:28.535603Z","iopub.status.idle":"2022-07-12T03:19:28.825073Z","shell.execute_reply.started":"2022-07-12T03:19:28.535564Z","shell.execute_reply":"2022-07-12T03:19:28.823928Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"通过周变化曲线，发现registered用户在周一到周五的租赁数量稳定，周末两天减少20%，casual用户在周末租赁数量是工作日的两倍","metadata":{}},{"cell_type":"code","source":"#天气数据\nf, ax = plt.subplots(figsize=(10,5))\ndf_rfw.groupby('weather')[count_columns].mean().plot.line(ax=ax)\nax.set_title('租赁数量随天气的变化曲线')\nax.set_xticks(range(1,5))","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:19:34.346961Z","iopub.execute_input":"2022-07-12T03:19:34.347311Z","iopub.status.idle":"2022-07-12T03:19:34.559076Z","shell.execute_reply.started":"2022-07-12T03:19:34.347283Z","shell.execute_reply":"2022-07-12T03:19:34.557955Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"天气条件越不好，租赁人数越少，和预期相同，但是天气为4，也就是暴雨暴雪时反而租赁量很高，需要具体查看分析。","metadata":{}},{"cell_type":"code","source":"df_rfw.loc[df_rfw['weather']==4]","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:19:38.851823Z","iopub.execute_input":"2022-07-12T03:19:38.852256Z","iopub.status.idle":"2022-07-12T03:19:38.872723Z","shell.execute_reply.started":"2022-07-12T03:19:38.852223Z","shell.execute_reply":"2022-07-12T03:19:38.871585Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"天气情况为4时，只有一组数据，而且是周一的18点，是一天的租赁最高峰，相比正常情况下400+的租赁，只有164，说明天气对租赁量影响是很大的","metadata":{}},{"cell_type":"code","source":"f, [ax1, ax2] = plt.subplots(2,1,figsize=(12,10))\ndf_rfw.groupby('temp')[count_columns].mean().plot.line(ax=ax1)\nax1.set_title('租赁数量随气温的变化曲线')\ndf_rfw.groupby('atemp')[count_columns].mean().plot.line(ax=ax2)\nax2.set_title('租赁数量随体感气温的变化曲线')","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:19:43.172351Z","iopub.execute_input":"2022-07-12T03:19:43.173062Z","iopub.status.idle":"2022-07-12T03:19:43.709538Z","shell.execute_reply.started":"2022-07-12T03:19:43.173020Z","shell.execute_reply":"2022-07-12T03:19:43.708427Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"租赁数量随温度升高，呈上升趋势，气温36℃左右，体感温度40℃左右达到最大值。且体感温度和气温的曲线走势接近，只是延后4℃。\n\n气温38℃以上有异常，需根据具体数据确定","metadata":{}},{"cell_type":"code","source":"df_rfw.loc[df_rfw['temp']>=38].head(10)\n##在2012-07-07一天11:00-18:00存在长时间高租赁，可能有集体活动，具有偶然性","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:20:22.806991Z","iopub.execute_input":"2022-07-12T03:20:22.807400Z","iopub.status.idle":"2022-07-12T03:20:22.832089Z","shell.execute_reply.started":"2022-07-12T03:20:22.807368Z","shell.execute_reply":"2022-07-12T03:20:22.830795Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#因为temp和atemp相关系数为0.99，将temp和atemp合并\ndf_rfw['new_temp'] = df_rfw['temp']\n#湿度的影响\nf, ax = plt.subplots(figsize=(10,5))\ndf_rfw.groupby('humidity')[count_columns].mean().plot.line(ax=ax)\nax.set_title('租赁数量随湿度的变化曲线')\n#随湿度的增加，租赁量缓慢下降。","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:27:57.127557Z","iopub.execute_input":"2022-07-12T03:27:57.127963Z","iopub.status.idle":"2022-07-12T03:27:57.412129Z","shell.execute_reply.started":"2022-07-12T03:27:57.127921Z","shell.execute_reply":"2022-07-12T03:27:57.411275Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#风速跨度比较大，所以对其进行分组\ndf_rfw['wind_class'] = pd.cut(df_rfw['windspeed'], 9)\nf, [ax1, ax2] = plt.subplots(2,1,figsize=(12,10))\ndf_rfw.groupby('windspeed')[count_columns].mean().plot.line(ax=ax1)\nax1.set_title('租赁数量随风速的变化曲线')\ndf_rfw.groupby('wind_class')[count_columns].mean().plot.line(ax=ax2)\nax2.set_title('租赁数量随风速等级的变化曲线')\n#风速较低时，对租赁量的影响不大，风速超过45时，租赁量迅速缩小，和异常天气时的情况类似。","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:28:23.423526Z","iopub.execute_input":"2022-07-12T03:28:23.423889Z","iopub.status.idle":"2022-07-12T03:28:23.913660Z","shell.execute_reply.started":"2022-07-12T03:28:23.423858Z","shell.execute_reply":"2022-07-12T03:28:23.912290Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#查看风速>51的数据，均值偏高可以归于异常值。\ndf_rfw.loc[df_rfw['windspeed']>=51]","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:28:28.431985Z","iopub.execute_input":"2022-07-12T03:28:28.432381Z","iopub.status.idle":"2022-07-12T03:28:28.457752Z","shell.execute_reply.started":"2022-07-12T03:28:28.432346Z","shell.execute_reply":"2022-07-12T03:28:28.456690Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#查看处理后的数据\ndf_rfw.info()","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:28:30.708435Z","iopub.execute_input":"2022-07-12T03:28:30.709137Z","iopub.status.idle":"2022-07-12T03:28:30.726643Z","shell.execute_reply.started":"2022-07-12T03:28:30.709085Z","shell.execute_reply":"2022-07-12T03:28:30.725722Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#对分类数据进行one-hot编码\nseason_dummy=pd.get_dummies(df_rfw['season'],prefix='season')\nweather_dummy=pd.get_dummies(df_rfw['weather'],prefix='weather')\nmonth_dummy=pd.get_dummies(df_rfw['month'],prefix='month')\ndf_rfw1 = pd.concat([df_rfw,season_dummy,weather_dummy,month_dummy],axis=1)\ndf_rfw1.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:28:35.157807Z","iopub.execute_input":"2022-07-12T03:28:35.158208Z","iopub.status.idle":"2022-07-12T03:28:35.187097Z","shell.execute_reply.started":"2022-07-12T03:28:35.158179Z","shell.execute_reply":"2022-07-12T03:28:35.185846Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#分离训练集和测试集\ndf_train=df_rfw1[df_rfw1['count'].notnull()].sort_values('datetime',ascending=True)\ndf_test=df_rfw1[df_rfw['count'].isnull()].sort_values('datetime',ascending=True)\n#丢弃掉不要的列\ndrop_columns=['datetime','season','weather','casual','registered','count','month','temp','atemp','wind_class']\ndf_train=df_train.drop(columns=drop_columns,axis=1)\ndf_test=df_test.drop(columns=drop_columns,axis=1)\ncount_log=df_train['count_log']\ndf_train.drop('count_log',axis=1,inplace=True)\ndf_test.drop('count_log',axis=1,inplace=True)\ndf_train.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:28:37.669995Z","iopub.execute_input":"2022-07-12T03:28:37.670383Z","iopub.status.idle":"2022-07-12T03:28:37.710722Z","shell.execute_reply.started":"2022-07-12T03:28:37.670351Z","shell.execute_reply":"2022-07-12T03:28:37.709619Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.ensemble import RandomForestRegressor\nmodel = RandomForestRegressor(n_estimators=2000,random_state=42)\nmodel.fit(df_train,count_log)\npred=model.predict(df_test)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:28:40.067024Z","iopub.execute_input":"2022-07-12T03:28:40.067372Z","iopub.status.idle":"2022-07-12T03:30:07.714217Z","shell.execute_reply.started":"2022-07-12T03:28:40.067344Z","shell.execute_reply":"2022-07-12T03:30:07.713334Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#评估准确度\nmodel.score(df_train, count_log)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T03:30:32.510380Z","iopub.execute_input":"2022-07-12T03:30:32.510820Z","iopub.status.idle":"2022-07-12T03:30:36.972966Z","shell.execute_reply.started":"2022-07-12T03:30:32.510788Z","shell.execute_reply":"2022-07-12T03:30:36.971825Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#转化为可提交的数据格式\npred_exp=np.exp(pred)\npred_exp=pd.Series(pred_exp,name='count')\npred_concat=pd.concat([test['datetime'],pred_exp],axis=1)\npred_concat.to_csv('bike_submission.csv_3_online', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T04:08:35.754228Z","iopub.execute_input":"2022-07-12T04:08:35.754628Z","iopub.status.idle":"2022-07-12T04:08:35.781194Z","shell.execute_reply.started":"2022-07-12T04:08:35.754595Z","shell.execute_reply":"2022-07-12T04:08:35.780199Z"},"trusted":true},"execution_count":null,"outputs":[]}]}