数据字段分析
列名 | desc | 中文描述 |
---|---|---|
datetime | hourly date + timestamp | 小时日期 和时间戳 |
season | 1 = spring, 2 = summer, 3 = fall, 4 = winter | 1:春天 2:夏天 3:秋天 4:冬天 |
holiday | whether the day is considered a holiday | 当天是否是节假日 |
workingday | whether the day is neither a weekend nor holiday | 当天是否是工作日 |
weather | 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 + Scattered clouds 4: Heavy Rain + Ice Pallets + Thunderstorm + Mist, Snow + Fog | 1:晴,少云,部分多云,部分多云。 2:薄雾+多云,薄雾+破碎的云,薄雾+少量的云, 雾 3:小雪,小雨+雷雨+散云,小雨+散云 4:大雨+冰盘+雷雨+雾,雪+雾 |
temp | temperature in Celsius | 温度 |
atemp | “feels like” temperature in Celsius | 感受到的温度 |
humidity | relative humidity | 湿度 |
windspeed | wind speed | 风速 |
casual | number of non-registered user rentals initiated | 未注册用户的租赁数量 |
registered | number of registered user rentals initiated | 注册用户的租赁数量 |
count | number of total rentals | 总的租赁数量 |
season是一种离散型数据,可以进行独热编码处理
holiday 和workingday是二分类问题
箱形图(Box-plot)
又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计 图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。它主要用于反映原始数据 分布的特征,还可以进行多组数据分布特征的比 较。箱线图的绘制方法是:先找出一组数据的最大 值、最小值、中位数和两个四分位数(比如在0到100%中分成四份,25%就是下四分位数,75%就是上四分位数);然后, 连接两个四分位数画出箱子;再将最大值和最小值与箱 子相连接,中位数在箱子中间。(箱外的点越少效果越好)
共享单车租赁量预测
这是一个关于自行车租赁预测的题目,相当于国内的ofo,摩拜单车 通过对数据的预测,可以观测到共享单车在某个时间段的租赁数量,如果预测值和实际租赁值存在很大差异,就应该去调查情况,从而保证共享单车的正常运营
适用场景:
回归场景,需要对数据进行分析处理
import pandas as pd;
import numpy as np
import pylab
import calendar
import numpy as np
import pandas as pd
import seaborn as sn # matplotlib更高级封装的库
from scipy import stats
import missingno as msno #缺失值可视化处理
from datetime import datetime
import matplotlib.pyplot as plt
import warnings
from sklearn.model_selection import GridSearchCV
pd.options.mode.chained_assignment = None # 避免pandas报错
warnings.filterwarnings("ignore") # 忽略警告
%matplotlib inline
一、检视数据信息
1.帮助我们查看字段的特征和字段的名称
2.查看是否存在所谓的缺失值(任何数据操作前都要先查看缺失值)
3.数据的分布状态
1和2步骤用info函数操作,3步骤用descivbe函数操作
本应用train和test两个数据集,因为kaggle上test数据上需要上网验证效果,所以在这里只使用train进行处理,所有数据都是每个月的前20天的信息
df=pd.read_csv("./input_data/train.csv")
查看样本的所有数据,能够查看数据字段进行分析
第一点,需要对datetime进行处理,
第二点, casual + register = count
df.head()
可以通过info方法,查看数据类型,是否有缺失值等信息
可以看出,用车量是casual 和registered 的总和(这样就可以把count保留,去除casual 和registered )
df.info()# information
RangeIndex: 10886 entries(样本数)
主要查看数据分布状态,可以更好的对数据进行分析
df.describe()
在进行数据分析之前,对数据进行切分,只查看训练集进行数据分析
from sklearn.model_selection import train_test_split
train_df, test_df = train_test_split(df)#将数据集进行切分,训练集和测试集比例为7.5:2.5
查看训练集信息
train_df.info() # 查看数据量
二、数据处理
为了能够统一设置数据集,将训练集和测试集设置名称,将进行拼接成整体
all_df统一设置, 后续做预处理时,需要对训练集和测试集统一处理
因为我们真实状态下观察样本信息时,只能通过训练集观察,如果观察测试集数据,现实工程中不可行,而且会影响模型预测精度(所有的分析都是针对训练集的)
test_df["traintest"]='test';
train_df["traintest"]='train';
all_df=pd.concat((train_df,test_df))
datetime字段比较复杂,将它进行切分处理
date 为日期
month 为英文
monthnum 为中文
lambda表达式,是一种匿名函数,参数: 方法体
all_df["date"] = all_df.datetime.apply(和map一样可以对函数的数值进行调整)(lambda x : x.split()(括号里没字符可以是把空格当作分割线)[0](0在这是提取了日期,后面的空格把时间分成第二个索引了))
all_df["month"] = all_df.date.apply(
lambda dateString :
calendar(生成日期维度).month_name[da