{"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":"markdown","source":"# 初始化","metadata":{}},{"cell_type":"code","source":"import numpy as np #高性能矩阵运算\nimport pandas as pd #数据处理\nfrom sklearn import ensemble #机器学习\nfrom sklearn import metrics #R2决定测试\nfrom sklearn.metrics import mean_squared_log_error #kaggle测试","metadata":{"execution":{"iopub.status.busy":"2022-07-12T06:51:20.752882Z","iopub.execute_input":"2022-07-12T06:51:20.753311Z","iopub.status.idle":"2022-07-12T06:51:22.067291Z","shell.execute_reply.started":"2022-07-12T06:51:20.753225Z","shell.execute_reply":"2022-07-12T06:51:22.066084Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 数据预处理","metadata":{}},{"cell_type":"code","source":"# 导入训练数据\ntrainData=pd.read_csv('/kaggle/input/bike-sharing-demand/train.csv')\n# trainData\n\n# 导入测试数据\ntestData=pd.read_csv('/kaggle/input/bike-sharing-demand/test.csv')\n# testData\n\n# 导入答案文档\nanswerData=pd.read_csv('/kaggle/input/bike-sharing-demand/sampleSubmission.csv')\n# answerData","metadata":{"execution":{"iopub.status.busy":"2022-07-12T06:51:22.069806Z","iopub.execute_input":"2022-07-12T06:51:22.070296Z","iopub.status.idle":"2022-07-12T06:51:22.148217Z","shell.execute_reply.started":"2022-07-12T06:51:22.070248Z","shell.execute_reply":"2022-07-12T06:51:22.147190Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 认为时间分析是有帮助的，应该把时间字段分开，进而可处理\n# 将object属性转换为pd可处理的datetime\ntrainData['datetime']=pd.to_datetime(trainData['datetime'])\ntestData['datetime'] = pd.to_datetime(testData['datetime'])\n# trainData.info()","metadata":{"execution":{"iopub.status.busy":"2022-07-12T06:51:22.149933Z","iopub.execute_input":"2022-07-12T06:51:22.150642Z","iopub.status.idle":"2022-07-12T06:51:22.173635Z","shell.execute_reply.started":"2022-07-12T06:51:22.150597Z","shell.execute_reply":"2022-07-12T06:51:22.172435Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 分离标准时间格式，得到多个时间有关的字段\ntrainData['Year'] = trainData['datetime'].dt.year\ntrainData['Month'] = trainData['datetime'].dt.month\ntrainData['Day'] = trainData['datetime'].dt.day\ntrainData['Time'] = trainData['datetime'].dt.hour\ntrainData['DayOfWeek'] = trainData['datetime'].dt.dayofweek\ntrainData['WeekOfYear'] = trainData['datetime'].dt.isocalendar().week\n\ntestData['Year'] = testData['datetime'].dt.year\ntestData['Month'] = testData['datetime'].dt.month\ntestData['Day'] = testData['datetime'].dt.day\ntestData['Time'] = testData['datetime'].dt.hour\ntestData['DayOfWeek'] = testData['datetime'].dt.dayofweek\ntestData['WeekOfYear'] = testData['datetime'].dt.isocalendar().week\n\n# 删去datetime\ntrainData=trainData.drop(columns=['datetime'])\ntestData=testData.drop(columns=['datetime'])\n# trainData","metadata":{"execution":{"iopub.status.busy":"2022-07-12T06:51:22.174994Z","iopub.execute_input":"2022-07-12T06:51:22.175828Z","iopub.status.idle":"2022-07-12T06:51:22.231491Z","shell.execute_reply.started":"2022-07-12T06:51:22.175781Z","shell.execute_reply":"2022-07-12T06:51:22.230560Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 使用计数后移，方便后来切片（原测试用，此处保留以备不时之需）\ntrainData['Casual'] = trainData['casual']\ntrainData['Registered'] = trainData['registered']\ntrainData['Count'] = trainData['count']\n\ntrainData=trainData.drop(columns=['casual','registered','count'])\n\ntrainData['casual'] = trainData['Casual']\ntrainData['registered'] = trainData['Registered']\ntrainData['count'] = trainData['Count']\n\ntrainData=trainData.drop(columns=['Casual','Registered','Count'])\n# trainData","metadata":{"execution":{"iopub.status.busy":"2022-07-12T06:51:22.234776Z","iopub.execute_input":"2022-07-12T06:51:22.235511Z","iopub.status.idle":"2022-07-12T06:51:22.251394Z","shell.execute_reply.started":"2022-07-12T06:51:22.235463Z","shell.execute_reply":"2022-07-12T06:51:22.250568Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 起用sklearn随机森林回归","metadata":{}},{"cell_type":"code","source":"# 建立随机森林1，用以回归预测casual\nrf1=ensemble.RandomForestRegressor(n_estimators=2000,max_depth=100)\n#随机森林训练，自变量是去除三个属性的数据，目标映射是ln(casual+1)\nrf1.fit(trainData.drop(columns=['casual','registered','count']),np.log1p(trainData['casual'].ravel()))\n\n# 建立随机森林2，用以回归预测registered\nrf2=ensemble.RandomForestRegressor(n_estimators=2000,max_depth=100)\n#随机森林训练，自变量是去除三个属性的数据，目标映射是ln(registered+1)\nrf2.fit(trainData.drop(columns=['casual','registered','count']),np.log1p(trainData['registered'].ravel()))","metadata":{"execution":{"iopub.status.busy":"2022-07-12T06:51:22.253075Z","iopub.execute_input":"2022-07-12T06:51:22.253795Z","iopub.status.idle":"2022-07-12T06:54:28.794184Z","shell.execute_reply.started":"2022-07-12T06:51:22.253730Z","shell.execute_reply":"2022-07-12T06:54:28.792929Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 针对测试数据，回归运算\nans1=rf1.predict(testData)\nans2=rf2.predict(testData)\n\n# 此时ans是ln(y+1)形态，执行转换\nans1=np.expm1(ans1)\nans2=np.expm1(ans2)\n\n# 合成为count\nans=ans1+ans2\nans","metadata":{"execution":{"iopub.status.busy":"2022-07-12T06:54:28.795642Z","iopub.execute_input":"2022-07-12T06:54:28.796040Z","iopub.status.idle":"2022-07-12T06:54:34.095364Z","shell.execute_reply.started":"2022-07-12T06:54:28.796005Z","shell.execute_reply":"2022-07-12T06:54:34.094275Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 形成答案","metadata":{}},{"cell_type":"code","source":"answerData['count']=ans\nanswerData","metadata":{"execution":{"iopub.status.busy":"2022-07-12T06:54:34.097456Z","iopub.execute_input":"2022-07-12T06:54:34.098284Z","iopub.status.idle":"2022-07-12T06:54:34.116846Z","shell.execute_reply.started":"2022-07-12T06:54:34.098246Z","shell.execute_reply":"2022-07-12T06:54:34.115944Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"answerData.to_csv('out.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2022-07-12T06:54:34.118339Z","iopub.execute_input":"2022-07-12T06:54:34.118990Z","iopub.status.idle":"2022-07-12T06:54:34.152234Z","shell.execute_reply.started":"2022-07-12T06:54:34.118957Z","shell.execute_reply":"2022-07-12T06:54:34.151096Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}