本文概述
- 教程目标
- 自行车共享数据集
- 功能选择
- 直方图
- 将双变量分布拟合到你的数据
- 热图
- 总结
教程目标 在本教程中, 你将学习如何
- 使用ggplot创建和自定义直方图。
- 用MASS :: kde2d函数拟合双变量分布。
- 创建轮廓图。
- 生成热图。 :target:before { content:""; display:block; height:150px; margin:-150px 0 0; } h3 {font-weight:normal; margin-top:.5em} h4 { font-weight:lighter }
自行车共享数据集 对于本教程, 你将使用kaggle竞赛中的Bike Sharing Demand数据集。
按照链接进入数据标签, 然后下载train.csv文件。
文章图片
将数据集加载到R中。
library(dplyr)
bike<
- read.csv("train.csv", na.strings = FALSE, strip.white = TRUE)
glimpse(bike)
数据集功能
特征 | 描述 |
---|---|
约会时间 | 每小时日期+时间戳 |
季节 | 1 =春季2 =夏季3 =秋季4 =冬季 |
假日 | 那天是否被认为是假期 |
工作日 | 一天既不是周末也不是假期 |
天气 | 1:晴, 少云, 局部多云, 局部多云2:薄雾+多云, 薄雾+碎云, 薄雾+少量云, 薄雾3:小雪, 小雨+雷暴+零星云, 小雨+零星云4:重雨+冰板+雷暴+雾, 雪+雾 |
温度 | 摄氏温度 |
暂时的 | 摄氏温度的” 感觉” |
湿度 | 相对湿度 |
风速 | 风速 |
随便的 | 发起的未注册用户租金的数量 |
注册 | 已启动的注册用户租金数量 |
计数 | 总租金数 |
bike_data<
-
bike %>
%
dplyr::select(season, atemp, humidity)
head(bike_data)
直方图 好了, 现在你可以开始分析数据了, 首先按季节为每个要素创建一个直方图。你将使用ggplot2库进行此操作, 因此不要忘记加载它。
湿度直方图
library(ggplot2)
bike_data %>
%
ggplot( aes(x=humidity) ) +
geom_histogram(bins=30) +
facet_wrap(~season, ncol = 2)
文章图片
使用直方图, 你可以看到冬季湿度较高(这很明显), 但是你可以了解每个季节的湿度分布情况。
现在添加密度, 密度地毯并更改构面名称, 只是为了获得更好的外观。
bike_data %>
%
mutate(season_label = case_when(
season == 1 ~ "Spring", season == 2 ~ "Summer", season == 3 ~ "fall", season == 4 ~ "winter")) %>
%
ggplot( aes(x=humidity) ) +
geom_histogram(bins=30, aes(y = ..density..)) +
geom_rug()+
geom_density()+
facet_wrap(~season_label, ncol = 2)+
ggtitle("Histogram of humidity by season")
文章图片
现在, 这可以使你更好地了解湿度的行为, 在不带温度的情况下也是如此。
非临时直方图
重用上面的代码并将变量更改为atemp,
bike_data %>
%
mutate(season_label = case_when(
season == 1 ~ "Spring", season == 2 ~ "Summer", season == 3 ~ "fall", season == 4 ~ "winter")) %>
%
ggplot( aes(x=atemp) ) +
geom_histogram(bins=30, aes(y = ..density..)) +
geom_rug()+
geom_density()+
facet_wrap(~season_label, ncol = 2)+
ggtitle("Histogram of atemp by season")
【R中的双变量分布热图】按季节划分的无节直方图
文章图片
好的, 到目前为止, 一切都按照你对每个赛季的期望进行。在每个图中, 你都具有概率分布函数的近似值。
但是, 基于此图很难可视化要素之间的交互方式。遇到的第一个困难是直方图必须是3D的, 因为你正试图找到这两个特征的分布函数。
将双变量分布拟合到你的数据 目标是可视化双变量分布, 要做到这一点, 你首先需要将双变量分布拟合到数据。这将使用MASS库和kde2d函数完成。假设随机变量的正态性, 则kde2d函数将估算双变量分布。此功能的输入如下:
输入 | 描述 |
---|---|
X | x坐标数据 |
和 | y坐标数据 |
? | 每个轴的网格点数 |
lims | x和y的极限 |
library(MASS)
bike_data_summer <
- bike_data %>
% filter(season==1)
bike_density <
- kde2d(bike_data_summer$atemp, bike_data_summer$humidity, n=1000)
注意:加载MASS库时, 它带有一个select函数, 这与dplyr select函数有关, 因此要解决此问题, 使用dplyr select时, 你需要向其中添加dplyr ::, 例如dplyr :: select()它可以正常工作。现在来看一下bike_density的类和结构
class(bike_density)
str(bike_density)
它是一个具有3个值x, y和z的列表。前两个具有特征值, 第三个是具有pdf值的矩阵。用轮廓函数看一下密度,
contour(bike_density)
text(12.2, 92, "1", cex=1.5)
points(12.2, 89, col="red", pch=18)
text(10.4, 47, "2", cex=1.5)
points(10.4, 43, col="red", pch=18)
text(21, 45, "3", cex=1.5)
points(21, 40, col="red", pch=18)
text(21.6, 82, "4", cex=1.5)
points(21.6, 78, col="red", pch=18)
文章图片
查看此点, 你可以确定一些累积点, 这可以理解为这两个特征组合的最频繁值。下表中恢复了每个点的值,
点 | 温度(°C) | 谦卑(%) |
---|---|---|
1 | 12.2 | 89 |
2 | 10.4 | 43 |
3 | 21 | 43 |
4 | 21.6 | 78 |
hm_col_scale<
-colorRampPalette(c("black", "blue", "green", "orange", "red"))(1000)
hm_col_scale是使用RGB代码以1000步从黑色变为红色的向量。
现在, 使用图像函数绘制热图, 该函数用于绘制矩阵。
image(bike_density$z, col = hm_col_scale, zlim=c(min(bike_density$z), max(bike_density$z)))
text(0.31, 0.46, "Most Frequent", col="blue", cex=0.8)
points(0.31, 0.45, col="blue", pch=18)
现在, 你可以看到它比等高线图具有更多信息, 因为现在颜色告诉我们累积点的高度。你可以看到春季最频繁的湿度和非温度值在点$(10.4, 43)$附近
总结 现在你知道了如何创建热点图, 现在该轮到你自己创建了。首先查看其他季节以及与其他变量的关系。
考虑到最频繁的点具有较高的概率, 你将如何使用它来了解必须为变量的不同值提供多少辆自行车。
如果你想了解有关使用ggplot生成数据可视化的更多信息, 请务必查看我们的使用ggplot2进行数据可视化的课程。
推荐阅读
- SQLServer连接查询之Cross Apply和Outer Apply的区别及用法
- 制作CSV格式数据集(图像数据集)
- DBSCAN(Python的宏观调查)
- Python开发(MeetUp API和JSON数据)
- Python IF,ELIF和ELSE语句
- R中的主成分分析
- 用Python预测员工流失
- #|[机器学习入门]——第六课-Markov链
- AppScan用外部设备录制脚本(手机端应用app微信等)进行安全测试