聚合来自多个帐户的推文的动物园时间序列
Aggregate zoo time series of tweets from multiple accounts
当涉及到在 R 中聚合或分箱动物园对象时,我设法让自己陷入停顿,因为我是使用 R 的新手,尤其是使用时间序列数据。
谁能帮帮我?
我有许多数据框,它们给出了推文的创建日期及其许多特定 Twitter 帐户的 ID
str(temp)
'data.frame': 1528 obs. of 2 variables:
$ id_str : chr "605698007263260672" "605681239408963584" "603854670856069120" "601792133297786880" ...
$ created_at: POSIXct, format: "2015-06-02 12:30:32" "2015-06-02 11:23:55" "2015-05-28 10:25:47" "2015-05-22 17:49:59" ...
我不知道推文的频率(创建日期值之间的间隔)但我需要创建一个包含
的数据集
TimeSeries AccountName NumOfTweets
2010-01 MyTweeter 45
2010-02 YourTweeter 5
我想根据创建的 周 或 月 分组并计算有多少个并绘制它们以显示自记录开始以来,帐户数量在推文数量和持续 activity 方面相互比较。
关于如何处理合并或加入时间序列的任何建议,这样我就可以用 x 轴上的时间序列和 Y 轴上的推文数量绘制它们
使用 select_n() 获取的随机观察样本,并在下面使用 dput
提供
dput(sample.df)
structure(list(id_str = c("235710687006035968", "148522094328680448",
"555743466945523712", "139818931253813249", "601792133297786880",
"391194341978669057", "455754624859779072", "139640022696603648",
"182085980864528384", "372375117130526720"), created_at = structure(c(1345032781,
1324245401, 1421334542, 1322170405, 1432313399, 1382102973, 1397495344,
1322127750, 1332247655, 1377616120), class = c("POSIXct", "POSIXt"
), tzone = "")), .Names = c("id_str", "created_at"), row.names = c(882L,
1363L, 33L, 1478L, 4L, 536L, 180L, 1489L, 1116L, 635L), class = "data.frame")
所需输出的示例,但需要帮助计算聚合并将多个数据帧(每个帐户 1 个)合并到合适的最终数据结构中以进行绘图
这是否与您正在寻找的相似?首先,将 created_at
转换为每月并按 ID 和月份计算观察结果(推文):
# To have some counts > 1 and several observations per ID
set.seed(123)
df2 <- data.frame(sample(df$id_str, size = 50, replace = T),
sample(df$created_at, size = 50, replace = T))
colnames(df2) <- colnames(df)
# Convert to months
df2$Month <- strftime(df2$created_at, format = "%Y-%m")
result <- aggregate(df2$id_str, by = list(df2$id_str, df2$Month), FUN = length)
colnames(result) <- c("ID", "Month", "nTweets")
head(result)
# ID Month nTweets
# 1 139640022696603648 2011-11 1
# 2 139818931253813249 2011-11 1
# 3 148522094328680448 2011-11 1
# 4 182085980864528384 2011-11 2
# 5 391194341978669057 2011-11 1
# 6 455754624859779072 2011-11 2
然后您可以使用 ggplot 绘制结果:
library(ggplot2)
ggplot(result, aes(x = Month, y = nTweets, group = ID, color = ID)) +
geom_line(size = 2)
请注意,此处 x 轴的间距不正确,因为有些月份没有观测值。我想这对于完整数据来说是不正确的。
遵循 Khl4v 的代码并进行一些试验和错误
首先使用所需的格式字符串将字符列“created_at”转换为日期对象,以便将其识别为日期值
MyDataFrame <- mutate(MyDataFrame,created_at = as.POSIXct(created_at, format="%a %b %d %H:%M:%S %z %Y"))
现在将其转换为年月值,然后再创建一个名为 df2 的新数据框,字符串为“Tweets”,随着年月值的变化,我们将很快计算下一个值
df2 <- data.frame("Tweets",strftime(MyDataFrame$created_at, format = "%Y-%m"))
将列名重命名为更用户友好的名称
colnames(df2) <- c("Tweeter","TimePeriod")
对于 TimePeriod
列值的每次更改,使用聚合函数计算 columd Tweeter 中的 number/length 次
结果包含组,即年月和推文出现的次数
result <- aggregate(df2$Tweeter, by = list(df2$TimePeriod), FUN = length)
在结果中添加另一列以存储所使用的推特帐户的名称
result <- mutate(result ,Account ="MyTwitter")
重命名列名称以更加用户友好
colnames(result) <- c("TimePeriod","Tweets","Tweeter")
使用 ggplot 绘制结果并旋转 x 标签,使其更易于阅读
ggplot(result, aes(x = TimePeriod, y = Tweets, group = Tweeter, color = Tweeter)) + geom_line(size = 1) + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
当涉及到在 R 中聚合或分箱动物园对象时,我设法让自己陷入停顿,因为我是使用 R 的新手,尤其是使用时间序列数据。
谁能帮帮我?
我有许多数据框,它们给出了推文的创建日期及其许多特定 Twitter 帐户的 ID
str(temp)
'data.frame': 1528 obs. of 2 variables:
$ id_str : chr "605698007263260672" "605681239408963584" "603854670856069120" "601792133297786880" ...
$ created_at: POSIXct, format: "2015-06-02 12:30:32" "2015-06-02 11:23:55" "2015-05-28 10:25:47" "2015-05-22 17:49:59" ...
我不知道推文的频率(创建日期值之间的间隔)但我需要创建一个包含
的数据集TimeSeries AccountName NumOfTweets 2010-01 MyTweeter 45 2010-02 YourTweeter 5
我想根据创建的 周 或 月 分组并计算有多少个并绘制它们以显示自记录开始以来,帐户数量在推文数量和持续 activity 方面相互比较。
关于如何处理合并或加入时间序列的任何建议,这样我就可以用 x 轴上的时间序列和 Y 轴上的推文数量绘制它们
使用 select_n() 获取的随机观察样本,并在下面使用 dput
提供dput(sample.df)
structure(list(id_str = c("235710687006035968", "148522094328680448",
"555743466945523712", "139818931253813249", "601792133297786880",
"391194341978669057", "455754624859779072", "139640022696603648",
"182085980864528384", "372375117130526720"), created_at = structure(c(1345032781,
1324245401, 1421334542, 1322170405, 1432313399, 1382102973, 1397495344,
1322127750, 1332247655, 1377616120), class = c("POSIXct", "POSIXt"
), tzone = "")), .Names = c("id_str", "created_at"), row.names = c(882L,
1363L, 33L, 1478L, 4L, 536L, 180L, 1489L, 1116L, 635L), class = "data.frame")
所需输出的示例,但需要帮助计算聚合并将多个数据帧(每个帐户 1 个)合并到合适的最终数据结构中以进行绘图
这是否与您正在寻找的相似?首先,将 created_at
转换为每月并按 ID 和月份计算观察结果(推文):
# To have some counts > 1 and several observations per ID
set.seed(123)
df2 <- data.frame(sample(df$id_str, size = 50, replace = T),
sample(df$created_at, size = 50, replace = T))
colnames(df2) <- colnames(df)
# Convert to months
df2$Month <- strftime(df2$created_at, format = "%Y-%m")
result <- aggregate(df2$id_str, by = list(df2$id_str, df2$Month), FUN = length)
colnames(result) <- c("ID", "Month", "nTweets")
head(result)
# ID Month nTweets
# 1 139640022696603648 2011-11 1
# 2 139818931253813249 2011-11 1
# 3 148522094328680448 2011-11 1
# 4 182085980864528384 2011-11 2
# 5 391194341978669057 2011-11 1
# 6 455754624859779072 2011-11 2
然后您可以使用 ggplot 绘制结果:
library(ggplot2)
ggplot(result, aes(x = Month, y = nTweets, group = ID, color = ID)) +
geom_line(size = 2)
请注意,此处 x 轴的间距不正确,因为有些月份没有观测值。我想这对于完整数据来说是不正确的。
遵循 Khl4v 的代码并进行一些试验和错误
首先使用所需的格式字符串将字符列“created_at”转换为日期对象,以便将其识别为日期值
MyDataFrame <- mutate(MyDataFrame,created_at = as.POSIXct(created_at, format="%a %b %d %H:%M:%S %z %Y"))
现在将其转换为年月值,然后再创建一个名为 df2 的新数据框,字符串为“Tweets”,随着年月值的变化,我们将很快计算下一个值
df2 <- data.frame("Tweets",strftime(MyDataFrame$created_at, format = "%Y-%m"))
将列名重命名为更用户友好的名称
colnames(df2) <- c("Tweeter","TimePeriod")
对于 TimePeriod
结果包含组,即年月和推文出现的次数
result <- aggregate(df2$Tweeter, by = list(df2$TimePeriod), FUN = length)
在结果中添加另一列以存储所使用的推特帐户的名称
result <- mutate(result ,Account ="MyTwitter")
重命名列名称以更加用户友好
colnames(result) <- c("TimePeriod","Tweets","Tweeter")
使用 ggplot 绘制结果并旋转 x 标签,使其更易于阅读
ggplot(result, aes(x = TimePeriod, y = Tweets, group = Tweeter, color = Tweeter)) + geom_line(size = 1) + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))