时间序列及其可视化

Posted

技术标签:

【中文标题】时间序列及其可视化【英文标题】:Timeseries and its visualisation 【发布时间】:2018-03-17 15:18:02 【问题描述】:

我有一百万个事件中的四分之一是这样的:

                 Slot Anzahl Nutzung TimeSlotNr WochenSlots Tag
1 2011-01-01 00:00:00      2   Firma          1         242   1
2 2011-01-01 00:00:00     50  Privat          1         242   1
3 2011-01-01 00:30:00      1   Firma          2         243   1
4 2011-01-01 00:30:00     49  Privat          2         243   1
5 2011-01-01 01:00:00      1   Firma          3         244   1
6 2011-01-01 01:00:00     48  Privat          3         244   1

一个 slot 代表半 30 分钟,"Anzahl" 是一个 slot 中的事件数,第一个 slot 开始于 2011-01-01 00:00:00 "WochenSlots" 是 TimeSlotNr %% 336 并且开始于一个星期六 00:00:00。所以我想看看一周后的分布情况。

我现在想做的是:

以 x 比例显示日期(周一 00:00 - 周日 24:00) 显示线(信封),显示 x% 的事件分布。

我不知道该怎么做。

  ggplot(data=PB2) + 
    geom_point(mapping = aes(x = WochenSlots, y = Anzahl, colour = Nutzung), alpha=0.6) +
    scale_y_continuous(labels = scales::percent) +
    facet_wrap(~Nutzung,
               shrink = TRUE,
               nrow = 2,
               scales = "free_y")

输入(PB2[1:100, ]) 结构(列表(插槽 = 结构(c(1293840000、1293840000、1293841800、 1293841800, 1293843600, 1293843600, 1293845400, 1293845400, 1293847200, 1293847200, 1293849000, 1293849000, 1293850800, 1293850800, 1293852600, 1293852600, 1293854400, 1293854400, 1293856200, 1293856200, 1293858000, 1293858000, 1293859800, 1293859800, 1293861600, 1293861600, 1293863400, 1293863400, 1293865200, 1293865200, 1293867000, 1293867000, 1293868800, 1293868800, 1293870600, 1293870600, 1293872400, 1293872400, 1293874200, 1293874200, 1293876000, 1293876000, 1293877800, 1293877800, 1293879600, 1293879600, 1293881400, 1293881400, 1293883200, 1293883200, 1293885000, 1293885000, 1293886800, 1293886800, 1293888600, 1293888600, 1293890400, 1293890400, 1293892200, 1293892200, 1293894000, 1293894000, 1293895800, 1293895800, 1293897600, 1293897600, 1293899400, 1293899400, 1293901200, 1293901200, 1293903000, 1293903000, 1293904800, 1293904800, 1293906600, 1293906600, 1293908400, 1293908400, 1293910200, 1293910200, 1293912000, 1293912000, 1293913800, 1293913800, 1293915600, 1293915600, 1293917400, 1293917400, 1293919200, 1293919200, 1293921000, 1293921000, 1293922800, 1293922800, 1293924600, 1293924600, 1293926400, 1293926400, 1293928200, 1293928200), class= c("POSIXct", "POSIXt"), tzone = "UTC"), 安扎尔 = c(2L, 50L, 1L, 49L, 1L, 48L, 1L, 43L, 1L, 43L, 1L, 30L, 1L, 27L, 0L, 22L, 0L, 19L, 0L, 20L, 0L, 18L, 0L, 17L, 0L, 17L, 0L, 17L, 0L, 17L, 0L, 18L, 0L, 19L, 2L, 19L, 2L, 19L, 2L, 20L, 2L, 21L, 2L, 21L, 2L, 20L, 2L, 18L, 2L, 22L, 2L, 24L, 3L, 25L, 1L, 28L, 1L, 30L, 1L, 33L, 1L, 32L, 1L, 28L, 2L, 24L, 2L, 25L, 2L, 25L, 2L, 22L, 2L, 20L, 1L, 15L, 2L, 14L, 1L, 13L, 1L, 11L, 1L, 12L, 1L, 11L, 1L, 9L, 1L, 8L, 1L, 7L, 1L, 5L, 1L, 4L, 1L, 3L, 0L, 3L), Nutzung = c("公司", “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, “私人”,“公司”,“私人”,“公司”,“私人”,“公司”, "Privat", "Firma", "Privat"), TimeSlotNr = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L, 5L, 5L, 6L, 6L, 7L, 7L, 8L, 8L, 9L, 9L, 10L, 10L, 11L, 11L, 12L, 12L, 13L, 13L, 14L, 14L, 15L, 15L, 16L、16L、17L、17L、18L、18L、19L、19L、20L、20L、21L、21L、 22L, 22L, 23L, 23L, 24L, 24L, 25L, 25L, 26L, 26L, 27L, 27L, 28L, 28L, 29L, 29L, 30L, 30L, 31L, 31L, 32L, 32L, 33L, 33L, 34L, 34L, 35L, 35L, 36L, 36L, 37L, 37L, 38L, 38L, 39L, 39L, 40L, 40L, 41L, 41L, 42L, 42L, 43L, 43L, 44L, 44L, 45L, 45L, 46L, 46L, 47L, 47L, 48L, 48L, 49L, 49L, 50L, 50L), WochenSlots = c(242, 242、243、243、244、244、245、245、246、246、247、247、248、 248、249、249、250、250、251、251、252、252、253、253、254、 254、255、255、256、256、257、257、258、258、259、259、260、 260、261、261、262、262、263、263、264、264、265、265、266、 266、267、267、268、268、269、269、270、270、271、271、272、 272、273、273、274、274、275、275、276、276、277、277、278、 278、279、279、280、280、281、281、282、282、283、283、284、 284、285、285、286、286、287、287、288、288、289、289、290、 290, 291, 291), 标签 = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L)), .Names = c("Slot", "Anzahl", "Nutzung", "TimeSlotNr", "WochenSlots", "Tag"), row.names = c(NA, 100L), class= "data.frame")

【问题讨论】:

对于第一个项目符号,确保 Slot 属于 POSIXct (PB2$Slot = as.POSIXct(PB2$Slot)) 类,然后使用 Slot 作为 x 映射。对于第二个问题,您的意思是您想要一条曲线来显示每个 x 值的 y 值,在该 y 值之上发生 X% 的事件? 第二个,你的意思是你想要一条曲线来显示每个 x 值的 y 值,在该 y 值之上发生 X% 的事件?是的 你能提供一个使用dput的数据样本吗?例如,将dput(PB2[1:100, ]) 的输出粘贴到您的问题中,以提供前 100 行数据。 我提供了你提到的样本。 【参考方案1】:

看起来分位数回归可能是您需要的。您发布的数据样本在每个时间点只有一个观察值,因此我创建了一些假数据来进行说明。在下图中,我们为回归函数使用了一个灵活的样条函数,并在数据的第 25 和第 75 个百分位数处绘制了回归线。让我知道这是否是您的想法。

library(ggplot2)
library(quantreg)
library(splines)

# Fake data
set.seed(2)
dat = data.frame(x=runif(1e4,0,20))
dat$y = cos(dat$x) + 10 + rnorm(1e4, 2)

ggplot(dat, aes(x,y)) +
  geom_point(alpha=0.1, colour="blue", size=0.5) +
  geom_quantile(formula=y ~ ns(x, 10), quantiles=c(0.25, 0.75),
                colour="red", size=1) +
  theme_classic()

【讨论】:

谢谢,它有效。是否可以说,在顶样条上,事件的概率为 75%,还是我必须为此将 ns(x, 10) 中的值设置为 1? 在本例中,25% 的点的 y 值高于顶部曲线,75% 的 y 值高于底部曲线。使用您的数据,Anzahl 是事件的计数而不是测量的大小,所以我不确定这样的行如何相关。您能否提供更多有关您正在尝试做的事情的背景信息? 我共享汽车。您可以预订汽车的最短时间段是半小时。因此,我以 30 分钟的间隔构建了从 2011 年 1 月 1 日 00:00 到今天 2017 年 9 月 1 日 24:00 的时间“插槽”向量并计算了哪些汽车已用于插槽之间的插槽 [ n] 和插槽 [n+1]。此外,我查看了预订是住宅“私人”还是公司“公司”的使用,并对两者进行了不同的计算.. 然后我想知道从周一到周日一周的平均使用量,并用时间日志 %% 336 的数量将一周内的所有计数放在一起。有许多插槽,233758/2 个插槽,用于住宅计数,233758/2 个用于商业用途,存储在 Anzahl 中。首先,我想对过去的使用有一个想法,然后我想估计在 2018 年 5 月 12.00 °clock 有一个住宅用户的可能性。 为此,我将查看第一张图并在未来推断一条线,然后查看第二张图并计算一周内的分布。我知道,这在数学意义上并不是真的,但我认为,它支持我的需求。

以上是关于时间序列及其可视化的主要内容,如果未能解决你的问题,请参考以下文章

数据的核密度估计及其可视化:Python实现

数据的核密度估计及其可视化:Python实现

数据的核密度估计及其可视化:Python实现

Redis数据库及其可视化管理工具RedisDesktopManager && Mysql数据库及其可视化管理工具navicat (一条龙解决从下载到使用!)

利用Python网络爬虫抓取微信好友的签名及其可视化展示

利用Python网络爬虫抓取微信好友的签名及其可视化展示