大家好,我是木木~
今天为大家带来一篇关于Kaggle竞赛的实战!话不多说,直接上代码
01
准备数据
使用数据集:
华盛顿特区首都自行车租赁数据集
背景描述:
自行车共享系统是租用自行车的一种方式,在这种情况下,获得会员资格、租赁和自行车返回的过程通过遍布城市的亭址网络实现自动化。使用这些系统,人们可以从一个地点租一辆自行车,并根据需要将它归还到另一个地方。目前,世界各地有500多个自行车共享项目
数据说明:
datetime - 如:2011/1/1 19:00:00格式
season - 1 = 春天, 2 = 夏天, 3 = 秋天, 4 = 冬天
holiday - 0或者1,是否是假期
workingday - 0或者1 ,是否是工作日
weather - 1: 晴,少云,部分云,多云
2: 薄雾+云,薄雾+碎云,薄雾+少量云,薄雾
3: 轻雪,轻雨+雷暴+散云,轻雨+散云
4: 大雨+冰盘+雷雨+薄雾,雪+雾
temp - 摄氏温度
atemp -体感温度
humidity -相对湿度
windspeed - 风速
casual - 已启动的未注册用户租金数目
registered - 已启动的注册用户租金数目
count - 租金总额
数据来源:
https://www.kaggle.com/c/bike-sharing-demand/data
问题描述:
提供两年的每小时租金数据,训练集由每月的前19天组成,而测试集是第20天到月底。预测在测试集涵盖的每一小时内租用的自行车总数,仅使用租期之前可用的信息。
import pylab
import calendar
import numpy as np
import pandas as pd
import seaborn as sn
from scipy import stats
import missingno as msno
from datetime import datetime
import matplotlib.pyplot as plt
import warnings
pd.options.mode.chained_assignment = None
warnings.filterwarnings("ignore", category=DeprecationWarning)
%matplotlib inline
#读取数据
dailyData = pd.read_csv('../train.csv')
02
特征工程
通过describe, info, head 等函数可以看出如下问题
“season”、“holiday”、“workingday”和“weather”等栏应该是“类别”数据类型,但目前的数据类型是“int”。让我们以以下方式转换数据集,以便我们可以开始使用EDA,并且数据无空值,这点非常棒。
从“datatime”栏中创建新列
将“int”的数据类型强制转换成分类类型
删除datetime列,因为我们已经从其中提取了有用的特性
dailyData["data"] = dailyData.datetime.apply(lambda x : x.split()[0])
dailyData["hour"] = dailyData.datetime.apply(lambda x : x.split()[1].split(":")[0])
dailyData["weekday"] = dailyData.data.apply(lambda dataString : calendar.day_name[datetime.strptime(dataString,"%Y-%m-%d").weekday()])
dailyData["month"] = dailyData.data.apply(lambda dataString : calendar.month_name[datetime.strptime(dataString,"%Y-%m-%d").month])
dailyData["season"] = dailyData.season.map({1: "Spring", 2:"Summer", 3: "Fall", 4: "Winter"})
dailyData["weather"] = dailyData.weather.map({1: " Clear + Few clouds + Partly cloudy + Partly cloudy",\
2 : " Mist + Cloudy, Mist + Broken clouds, Mist + Few clouds, Mist ", \
3 : " Light Snow, Light Rain + Thunderstorm + Scattered clouds, Light Rain &#