R语言进行Twitter数据可视化


R语言进行Twitter数据可视化文章插图
概述对于这个项目 , 我们在2019年5月28-29日通过爬虫来使用Twitter的原始数据 。 此外 , 数据是CSV格式(逗号分隔) 。
它涉及两个主题 , 一个是包含关键字“Joko Widodo”的Joko Widodo的数据 , 另一个是带有关键字“Prabowo Subianto”的Prabowo Subianto的数据 。 其中包括几个变量和信息 , 以确定用户情绪 。 实际上 , 数据有16个变量或属性和1000多个观察值 。 表1列出了一些变量 。
# 导入库library(ggplot2)library(lubridate)# 加载Joko Widodo的数据data.jokowi.df = read.csv(file = 'data-joko-widodo.csv',header = TRUE,sep = ',')senti.jokowi = read.csv(file = 'sentiment-joko-widodo.csv',header = TRUE,sep = ',')# 加载Prabowo Subianto的数据data.prabowo.df = read.csv(file = 'data-prabowo-subianto.csv',header = TRUE,sep = ',')senti.prabowo = read.csv(file = 'sentiment-prabowo-subianto.csv',header = TRUE,sep = ',')
R语言进行Twitter数据可视化文章插图
数据可视化数据探索旨在从Twitter数据中获取任何信息 。 应该指出的是 , 数据已经进行了文本预处理 。 我们对那些被认为是很有趣的变量进行探索 。。
# TWEETS的条形图-JOKO WIDODOdata.jokowi.df$created = ymd_hms(data.jokowi.df$created,tz = 'Asia/Jakarta')# 另一种制作“date”和“hour”变量的方法data.jokowi.df$date = date(data.jokowi.df$created)data.jokowi.df$hour = hour(data.jokowi.df$created)# 日期2019-05-29data.jokowi.date1 = subset(x = data.jokowi.df,date == '2019-05-29')data.hour.date1 = data.frame(table(data.jokowi.date1$hour))colnames(data.hour.date1) = c('Hour','Total.Tweets')# 创建数据可视化ggplot(data.hour.date1)+geom_bar(aes(x = Hour,y = Total.Tweets,fill = I('blue')),stat = 'identity',alpha = 0.75,show.legend = FALSE)+geom_hline(yintercept = mean(data.hour.date1$Total.Tweets),col = I('black'),size = 1)+geom_text(aes(fontface = 'italic',label = paste('Average:',ceiling(mean(data.hour.date1$Total.Tweets)),'Tweets per hour'),x = 8,y = mean(data.hour.date1$Total.Tweets)+20),hjust = 'left',size = 4)+labs(title = 'Total Tweets per Hours - Joko Widodo',subtitle = '28 May 2019',caption = 'Twitter Crawling 28 - 29 May 2019')+xlab('Time of Day')+ylab('Total Tweets')+scale_fill_brewer(palette = 'Dark2')+theme_bw()# TWEETS的条形图-PRABOWO SUBIANTOdata.prabowo.df$created = ymd_hms(data.prabowo.df$created,tz = 'Asia/Jakarta')# 另一种制作“date”和“hour”变量的方法data.prabowo.df$date = date(data.prabowo.df$created)data.prabowo.df$hour = hour(data.prabowo.df$created)# 日期2019-05-28data.prabowo.date1 = subset(x = data.prabowo.df,date == '2019-05-28')data.hour.date1 = data.frame(table(data.prabowo.date1$hour))colnames(data.hour.date1) = c('Hour','Total.Tweets')# 日期 2019-05-29data.prabowo.date2 = subset(x = data.prabowo.df,date == '2019-05-29')data.hour.date2 = data.frame(table(data.prabowo.date2$hour))colnames(data.hour.date2) = c('Hour','Total.Tweets')data.hour.date3 = rbind(data.hour.date1,data.hour.date2)data.hour.date3$Date = c(rep(x = '2019-05-28',len = nrow(data.hour.date1)),rep(x = '2019-05-29',len = nrow(data.hour.date2)))data.hour.date3$Labels = c(letters,'A','B')data.hour.date3$Hour = as.character(data.hour.date3$Hour)data.hour.date3$Hour = as.numeric(data.hour.date3$Hour)# 数据预处理for (i in 1:nrow(data.hour.date3)) {if (i%%2 == 0) {data.hour.date3[i,'Hour'] = ''}if (i%%2 == 1) {data.hour.date3[i,'Hour'] = data.hour.date3[i,'Hour']}}data.hour.date3$Hour = as.factor(data.hour.date3$Hour)# 数据可视化ggplot(data.hour.date3)+geom_bar(aes(x = Labels,y = Total.Tweets,fill = Date),stat = 'identity',alpha = 0.75,show.legend = TRUE)+geom_hline(yintercept = mean(data.hour.date3$Total.Tweets),col = I('black'),size = 1)+geom_text(aes(fontface = 'italic',label = paste('Average:',ceiling(mean(data.hour.date3$Total.Tweets)),'Tweets per hour'),x = 5,y = mean(data.hour.date3$Total.Tweets)+6),hjust = 'left',size = 3.8)+scale_x_discrete(limits = data.hour.date3$Labels,labels = data.hour.date3$Hour)+labs(title = 'Total Tweets per Hours - Prabowo Subianto',subtitle = '28 - 29 May 2019',caption = 'Twitter Crawling 28 - 29 May 2019')+xlab('Time of Day')+ylab('Total Tweets')+ylim(c(0,100))+theme_bw()+theme(legend.position = 'bottom',legend.title = element_blank())+scale_fill_brewer(palette = 'Dark2')


推荐阅读