一、提出问题
在本项目中,参与者被要求将历史使用模式与天气数据相结合,以便预测华盛顿特区的自行车租赁计划中的自行车租赁需求。
二、理解数据
2.1 收集数据
一般而言,数据由甲方提供。若甲方不提供数据,则需要根据相关问题从网络爬取,或者以问卷调查形式收集。本次共享单车数据分析项目数据源于Kaggle。获取数据后需要对数据整体进行分析,从而提炼问题,为后续建模奠定基础。
首先查看Kaggle所提供的数据描述:
(1) 日期时间:年/月/日/时间,例:2011/1/1 0:00
(2) 季节:1=春,2=夏,3=秋天,4=冬天
(3) 假日:是否是节假日(0=否,1=是)
(4) 工作日:是否是工作日(0=否,1=是)
(5) 天气:1=晴天、多云等(良好),2=阴天薄雾等(普通),3=小雪、小雨等(稍差),4=大雨、冰雹等(极差)
(6) 实际温度(℃)
(7) 感觉温度(℃)
(8) 湿度
(9) 风速
(10)未注册用户租借数量
(11)注册用户租借数量
(12)总租借数量
根据官方数据描述,特征为前9项,分别为日期时间(1)、季节(2)、工作日/节假日(3-4)、天气(5-9)四类;标签为后3项:注册/未注册用户租借数量以及租借总数。因为官方规定的提交文件中要求预测的只有租借总数,因此本项目中只关注租借总数的预测。
2.2导入并理解数据
首先导入并查看训练数据和测试数据:import pandas as pd
#导入并查看训练数据和测试数据
train_data = pd.read_csv('data/train.csv')
test_data = pd.read_csv('data/test.csv')
print(train_data.shape)
print(train_data.info())
print(test_data.shape)
print(test_data.info())
训练数据共12列,10886行,测试数据共9列,6493行,且所有数据完整,没有缺失。相比于训练数据,测试数据缺少注册/未注册用户租借数量以及租借总数3个标签,需要我们通过建模进行预测。
三、数据处理与分析
3.1 数据预处理
在数据处理过程中,最好将训练数据与测试数据合并在一起处理,方便特征的转换。通过查看数据,训练和测试数据均无缺失、不一致和非法等问题。值得注意的是,日期时间特征由年、月、日和具体小时组成,还可以根据日期计算其星期,因此可以将日期时间拆分成年、月、日、时和星期5个特征。#第二步:数据预处理
#合并两种数据,使之共同进行数据规范化
data = train_data.append(test_data)
#拆分年、月、日、时
data['year'] = data.datetime.apply(lambda x: x.split()[0].split('-')[0])
data['year'] = data['year'].apply(lambda x: int(x))
data['month'] = data.datetime.apply(lambda x: x.split()[0].split('-')[1])
data['month'] = data['month'].apply(lambda x: int(x))
data['day'] = data.datetime.apply(lambda x: x.split()[0].split('-')[2])
data['day'] = data['day'].apply(lambda x: int(x))
data['hour'] = data.datetime.apply(lambda x: x.split()[1].split(':')[0])
data['hour'] = data['hour'].apply(lambda x: int(x))
data['date'] = data.datetime.apply(lambda x: x.split()[0])
data['weekday'] = pd.to_datetime(data['date']).dt.weekday_name
data['weekday']=data['weekday'].map({'Monday&#