如何在 R 中对字符串数据类型使用 google 动态图或散点图?
How to use google motionchart or scatterchart for string data type in R?
我的数据类型是字符串,所以我想知道如何使用 Google 动态图表或 Google 散点图来达到此目的?我希望我的 y 轴显示其中一种水果,x 轴显示时间戳。我收到此错误:
> motion
dd.rosbagTimestamp dd.data
1 1438293900729698553 strawberry
2 1438293901681590725 avocado
3 1438293904496769068 avocado
4 1438293943211221553 blueberry
5 1438293963216807017 kiwi
> gvisScatterChart(motion)
Error in gvis(type = type, checked.data, options = options, chartid = chartid, :
Only the following data types are allowed: number
However, dd.rosbagTimestamp, dd.data is of type string, string
问题是如果你有像水果名称这样的字符串格式的数据,你会在 googlevis 中做什么?
在进入解决方案之前,我想指出一些事情:
- 我不确定是谁将这些数据集放在一起,但由于我在上面的评论中提到的原因,他们要么把时间戳弄乱了,要么遗漏了一些关于如何破译它们的非常关键的信息。
- 我使用了我认为最最(回复:不一定正确)的 19 个字符时间戳的适当转换 - 即,将前 10 位数字作为秒数自 Unix 时代以来;但尽管这个数据集很奇怪。 5000 多个观测值少于 300 个唯一时间戳(使用 10 位数字法)?
- 我不知道这是课程作业还是类似的东西,你被指示使用
gvisScatterChart
或 gvisMotionChart
,但在我看来,这两个都不是特别适合这个数据集。我选择了两者中的后者。我不确定是否可以用前者表示您的数据。无论如何,您应该记住,如何 展示您的数据至少与 您展示的内容 一样重要。 googleVis
提供了一些简洁的工具,有时非常有用,但我个人觉得界面有点过于局限(可能是由于 Google 图表 API,不一定是包开发人员)。在这种情况下,gvisMotionChart
似乎不会让您绘制比日常观察更不原子的东西,所以我不得不将 1 秒的间隔转换为 1 天的间隔。
无论如何,考虑到上述问题,这里有一种可能的方法:
library(data.table)
library(googleVis)
##
mdt <- data.table(motion)
gdt <- mdt[
,.(frequency = .N),
keyby = "tstamp,fruit"]
gdt[
,time_value := as.numeric(
tstamp - min(gdt$tstamp))]
gdt[
,scaled_date := min(
as.Date(gdt$tstamp)) + time_value]
##
plot_data <- data.frame(
idvar = gdt$fruit,
timevar = gdt$scaled_date,
frequency = gdt$frequency,
fruit = gdt$fruit)
##
gmc <- gvisMotionChart(
data = plot_data,
idvar = "idvar",
timevar = "timevar",
yvar = "frequency",
colorvar = "fruit",
date.format = "%Y-%m-%d")
##
R> plot(gmc)
这是动态图表的快照:
以及从您 link 中的 CSV 文件中读取的原始数据:
Df <- read.csv(
file = "~/tmp/gazedata.csv.txt",
sep = ",", header = TRUE,
colClasses = "character",
stringsAsFactors = FALSE
)
##
motion <- data.frame(
tstamp = as.POSIXct(
as.numeric(substr(Df[,1], 1, 10)),
tz = "UTC",
origin = "1970-01-01 00:00:00"),
fruit = Df$data
)
我的数据类型是字符串,所以我想知道如何使用 Google 动态图表或 Google 散点图来达到此目的?我希望我的 y 轴显示其中一种水果,x 轴显示时间戳。我收到此错误:
> motion
dd.rosbagTimestamp dd.data
1 1438293900729698553 strawberry
2 1438293901681590725 avocado
3 1438293904496769068 avocado
4 1438293943211221553 blueberry
5 1438293963216807017 kiwi
> gvisScatterChart(motion)
Error in gvis(type = type, checked.data, options = options, chartid = chartid, :
Only the following data types are allowed: number
However, dd.rosbagTimestamp, dd.data is of type string, string
问题是如果你有像水果名称这样的字符串格式的数据,你会在 googlevis 中做什么?
在进入解决方案之前,我想指出一些事情:
- 我不确定是谁将这些数据集放在一起,但由于我在上面的评论中提到的原因,他们要么把时间戳弄乱了,要么遗漏了一些关于如何破译它们的非常关键的信息。
- 我使用了我认为最最(回复:不一定正确)的 19 个字符时间戳的适当转换 - 即,将前 10 位数字作为秒数自 Unix 时代以来;但尽管这个数据集很奇怪。 5000 多个观测值少于 300 个唯一时间戳(使用 10 位数字法)?
- 我不知道这是课程作业还是类似的东西,你被指示使用
gvisScatterChart
或gvisMotionChart
,但在我看来,这两个都不是特别适合这个数据集。我选择了两者中的后者。我不确定是否可以用前者表示您的数据。无论如何,您应该记住,如何 展示您的数据至少与 您展示的内容 一样重要。googleVis
提供了一些简洁的工具,有时非常有用,但我个人觉得界面有点过于局限(可能是由于 Google 图表 API,不一定是包开发人员)。在这种情况下,gvisMotionChart
似乎不会让您绘制比日常观察更不原子的东西,所以我不得不将 1 秒的间隔转换为 1 天的间隔。
无论如何,考虑到上述问题,这里有一种可能的方法:
library(data.table)
library(googleVis)
##
mdt <- data.table(motion)
gdt <- mdt[
,.(frequency = .N),
keyby = "tstamp,fruit"]
gdt[
,time_value := as.numeric(
tstamp - min(gdt$tstamp))]
gdt[
,scaled_date := min(
as.Date(gdt$tstamp)) + time_value]
##
plot_data <- data.frame(
idvar = gdt$fruit,
timevar = gdt$scaled_date,
frequency = gdt$frequency,
fruit = gdt$fruit)
##
gmc <- gvisMotionChart(
data = plot_data,
idvar = "idvar",
timevar = "timevar",
yvar = "frequency",
colorvar = "fruit",
date.format = "%Y-%m-%d")
##
R> plot(gmc)
这是动态图表的快照:
以及从您 link 中的 CSV 文件中读取的原始数据:
Df <- read.csv(
file = "~/tmp/gazedata.csv.txt",
sep = ",", header = TRUE,
colClasses = "character",
stringsAsFactors = FALSE
)
##
motion <- data.frame(
tstamp = as.POSIXct(
as.numeric(substr(Df[,1], 1, 10)),
tz = "UTC",
origin = "1970-01-01 00:00:00"),
fruit = Df$data
)