Kaggle共享单车数据分析——数据可视化
@猴子 求第七关门票
本文数据来源于Kaggle_Bike_Sharing_Demand。主要内容为模型前期的简要数据分析及可视化。
数据总览
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
df = pd.read_csv('train.csv')
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10886 entries, 0 to 10885
Data columns (total 12 columns):
datetime 10886 non-null object
season 10886 non-null int64
holiday 10886 non-null int64
workingday 10886 non-null int64
weather 10886 non-null int64
temp 10886 non-null float64
atemp 10886 non-null float64
humidity 10886 non-null int64
windspeed 10886 non-null float64
casual 10886 non-null int64
registered 10886 non-null int64
count 10886 non-null int64
dtypes: float64(3), int64(8), object(1)
memory usage: 1020.6+ KB
字段描述
项目数据描述如下:
(1) datetime:日期,以年-月-日 小时的形式给出。
(2) season:季节。1 为春季, 2为夏季,3 为秋季,4 为冬季。
(3) hodliday:是否为假期。1代表是,0代表不是。
(4) workingday:是否为工作日,1代表是,0代表不是。
(5) weather:天气:
1: 天气晴朗或者少云/部分有云。
2: 有雾和云/风等。
3: 小雪/小雨,闪电及多云。
4: 大雨/冰雹/闪电和大雾/大雪。
(6) temp - 摄氏温度。
(7) atemp - 人们感觉的温度。
(8) humidity - 湿度。
(9) windspeed - 风速。
(10) casual -随机预定自行车的人数
(11) registered - 登记预定自行车的人数。
(12) count - 总租车数,即casual+registered数目。
其中10~12不属于特征,12为我们需要预测的值。
各因素之间的相关性
fig = plt.figure(figsize=(15,10))
mask = np.zeros_like(df.corr())
mask[np.triu_indices_from(mask)] = True
with sns.axes_style("white"):
sns.heatmap(df.corr(),annot = True,center=2,linewidth=.5,cmap="YlGnBu",mask=mask)
各因素之间的相关性
除registered和casual这种直接与count想关联的字段外,与count关系最密切的因素为temp和atemp,并且temp和atemp相关度极高,可以推测到:影响自行车租借量的最重要因素极有可能是气温。
另外湿度与租借量的相关度也较高,可见人们都喜欢在晴朗的天气(湿度小)中骑车。
租借时间分布
这里我们并不打算做一个时间序列模型,所以,我们不考虑时间的前后关联关系,而是把时间看成一种周期性的特征。为了更好地处理时间特征,需要将时间中的月、日和小时单独分出。
df['month'] = pd.DatetimeIndex(df.datetime).month
df['day'] = pd.DatetimeIndex(df.datetime).dayofweek
df['hour'] = pd.DatetimeIndex(df.datetime).hour
df = df.drop('datetime',axis=1)
1.租借时间总览
plt.figure(figsize=(10,5))
plt.title("Rent count in different hours")
sns.boxplot(x = 'hour',y = 'count',data=df)
<matplotlib.axes._subplots.AxesSubplot at 0x14f05ba8>
租借时间总览
2.工作日与双休日租借时间分布对比
plt.figure(figsize=(10,10))
plt.subplot(2,1,1)
plt.title("Rent Time in WeekDay")
sns.swarmplot(x = 'hour',y = 'count',data = df[df['workingday']==1])
plt.subplot(2,1,2)
plt.title("Rent Time in WeekEnd")
sns.swarmplot(x = 'hour',y = 'count',data = df[df['workingday']==1])
<matplotlib.axes._subplots.AxesSubplot at 0x129d5eb8>
工作日与双休日租借时间分布对比
可见,周一到周五骑行时间主要集中在上下班时间,主要是通勤需求;而周末骑行时间集中在中午前后,主要是出游需求。
3.不同季节的骑行量对比
plt.figure(figsize=(15,15))
plt.subplot(3,1,1)
plt.title("Rent count in different month")
sns.pointplot(x = 'month',y = 'count',data = df)
plt.subplot(3,1,2)
plt.title("Temperature in different month")
sns.barplot(x = 'month',y = 'temp',data = df)
plt.subplot(3,1,3)
plt.title("Rent count in different temperature")
df['temp'] = df['temp'].astype('int')
sns.pointplot(x = 'temp',y = 'count',data = df)
<matplotlib.axes._subplots.AxesSubplot at 0x116385c0>
不同季节的租借量
人们更倾向于在夏季骑车,在32℃时租借量达到顶点,气温下降之后,人们开始转向其他出行方式,3℃时,租借量到达谷底。
4.天气与租借量的关系
plt.figure(figsize=(15,15))
plt.subplot(3,1,1)
plt.title("Rent count in different weather")
sns.boxplot(x = 'weather',y = 'count',data = df)
plt.subplot(3,1,2)
plt.title("Rent count in different humidity")
sns.pointplot(x = 'humidity',y = 'count',data = df)
plt.subplot(3,1,3)
plt.title("Rent count in different windspeed")
sns.pointplot(x = 'windspeed',y = 'count',data = df)
<matplotlib.axes._subplots.AxesSubplot at 0x164b6908>
天气与租借量的关系
总体来说,人们更愿意在天气晴朗、湿度较小,风速正常的天气下骑车。
- memory_profiler的使用
- 使用line_profiler查看api接口函数每行代码执行时间
- GAN 的 keras 实现
- 双向 LSTM
- scrapy回调函数传递参数
- python更新数据库脚本两种方法
- 使聊天机器人具有个性
- 遇到502错误,invalid request block size 解决方法
- python中json.loads,dumps,jsonify使用
- sqlalchemy和flask-sqlalchemy几种分页操作
- 一个 tflearn 情感分析小例子
- 前端js,后台python实现RSA非对称加密
- 运行mysql时,提示Table ‘performance_schema.session_variables’ doesn’t exist
- ODL应用开发之MD-SAL中级教程
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 挑苹果中的行为参数化思想
- 详解MapReduce(Spark和MapReduce对比铺垫篇)
- 使用 OWIN 作为 ASP.NET Web API 的宿主
- 二进制源码和补码的基础解释
- Spark推荐系统实践
- Xamarin Studio 比 Visual Studio 2013 好用的三个功能
- Scss (Sass) 语法简介
- 如何写一个简单的node.js c++扩展
- 给 c# 程序员的十个重要提示
- 子序列问题
- Spark实现推荐系统中的相似度算法
- iOS 中的 CFBundleShortVersionString 与 CFBundleVersion
- 买卖股票问题合集
- 服务出错优先考虑及排查手册(待续整理)
- Android 沉浸式全屏