前沿
提供两年的每小时租金数据。训练集是每个月的前19天,而测试集是每月的20号到月底。必须仅使用租借期之前的可用信息来预测测试集涵盖的每个小时内租用的自行车总数。
一、载入数据
1.1收集数据
一般而言,数据由甲方提供。若甲方不提供数据,则需要根据相关问题从网络爬取,或者以问卷调查形式收集。本次共享单车数据分析项目数据源于Kaggle(https://www.kaggle.com/c/bike-sharing-demand/data)。
1.2 载入数据
// 载入工具包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
import matplotlib
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.metrics import r2_score
%matplotlib inline
// 载入数据
train=pd.read_csv('/python/bike-sharingdemand/train.csv')
test=pd.read_csv('/python/bike-sharing-demand/test.csv')
//查看数据前5行
train.head()
//查看数据基本信息
train.info()
test.info()
训练数据共有12列,10886样本,并且数据无缺失;测试数据共有9列,6493样本。测试数据相对于训练数据,缺少casual(未注册用户租车数量)、registered(注册用户租车数量)、count(总租车数量)三列,这需要通过最终的模型预测得出。
特征说明
datetime:时间。年月日小时格式
season:季节。1:春天;2:夏天;3:秋天;4:冬天
holiday:是否节假日。0:否;1:是
workingday:是否工作日。0:否;1:是
weather:天气。1:晴天;2:阴天;3:小鱼或小雪;4:恶劣天气
temp:实际温度
atemp:体感温度
humidity:湿度
windspeed:风速
casual:未注册用户租车数量
registered:注册用户租车数量
count:总租车数量
二、数据预处理
2.1数据缺失值处理
//查看数据基本信息
train.info()
test.info()
数据没有缺失值,因此不需要进行缺失值的处理
2.2 数据异常值处理
//数据描述
train.describe()
可以发现最终需要预测的租赁量(count)的标准差很大。通过画图看下分布:
plt.rcParams['font.family'] = ['Arial Unicode MS'] #mac和windows有区别,本次使用的是mac
plt.rcParams['axes.unicode_minus']=False #可以显示负数
plt.figure(figsize=(10,10))
plt.hist(train['count'],bins=20)
plt.title('租赁量分布趋势')
plt.xlabel('租赁量(count)')
整体的分布倾斜比较严重,需要处理一下,以便于最后不会过拟合。
处理方法:将3个标准差以外的数据排除,然后对count做log变换,并查看变换后的分布。
#排除3个标准差以外的数据
train=train[np.abs(train['count']-train['count'].mean())<=3*train['count'].std()]
fig=plt.figure()
plt.subplot(1,1,1)
sns.distplot(train['count'])
plt.title(