---
title: "Median retweet count by other users"
output: html_notebook

---
```{r message=FALSE, warning=FALSE, include=FALSE, paged.print=FALSE}
library(data.table) #a library for data cleaning 
library(dplyr) #a library for data cleaning 
library(dbplyr) #a library for data cleaning 
library(RSQLite) #a library for importing data from a SQLite database
library(quanteda) #a library for quantitative textual analysis
library(ggplot2) #for plotting data
library(igraph) #for network analysis
library(lubridate)
library(scales)
library(stringr)
library(wordcloud)
library(syuzhet)
library(reshape2)
library(rCharts)
library(tidyverse)
library(tibbletime)
library(zoo)
library(quanteda)
library(rCharts)

db <- src_sqlite("/home/weiaiwaynexu/Dropbox/Acer Laptop Sync/Data Science/Nonprofits_socialmediaanalytics/nonprofits_accounts_tweets.sqlite", create = FALSE)
df <- tbl(db, sql("SELECT * FROM tweets")) #table name in the sqlite database is named "tweets"
df <- collect(df) #load the data into memory
df <- df[!duplicated(df$content),] #remove duplicates

df$created_at <- ymd_hms(df$created_at) 
df$created_at <- with_tz(df$created_at,"America/New_York")
df$created_date <- as.Date(df$created_at)
df$created_date_label <- as.factor(df$created_date)
df$Month_Yr <- format(as.Date(df$created_date), "%Y-%m")
df$Month_Yr <- ymd(paste(df$Month_Yr, "15",sep="-"))
df$Month_Yr_label <- as.factor(df$Month_Yr)
df <- df[!is.na(df$from_user_screen_name),]
df <- df[df$from_user_screen_name!="WeiaiWayne",]
df$from_user_screen_name <- as.factor(df$from_user_screen_name)
df<- df[df$retweeted_status != "THIS IS A RETWEET",]

df_bydate_outlet <- df %>% 
  group_by(created_date_label, from_user_screen_name) %>% 
  summarise(median_rt = median(retweet_count),
            median_fav = median(favorite_count),
            tweet_count = length(unique(content))) %>% melt

df_bydate_outlet$created_date_label <- as.Date(df_bydate_outlet$created_date_label)
```

```{r echo=FALSE, message=FALSE, warning=FALSE}
options(RCHART_WIDTH = 1100, RCHART_HEIGHT = 700)
knitr::opts_chunk$set(comment = NA, results = "asis", tidy = F, message = F)
df_bydate_outlet$date <- as.character(df_bydate_outlet$created_date_label)

h1 <- hPlot(x = "date", y = "value", data = df_bydate_outlet[df_bydate_outlet$variable=="median_rt" & df_bydate_outlet$from_user_screen_name=="ConsumerReports",], type = "line", group = "from_user_screen_name")

h1$yAxis(list(list(title = list(text = 'Median retweet count per day'))))
h1$title(text='Retweetability by @ConsumerReports')
h1$set(parseTime = FALSE)
h1$print("chart1",include_assets = TRUE)
```

```{r echo=FALSE, warning=FALSE}
options(RCHART_WIDTH = 1100, RCHART_HEIGHT = 700)
knitr::opts_chunk$set(comment = NA, results = "asis", tidy = F, message = F)
h2 <- hPlot(x = "date", y = "value", data = df_bydate_outlet[df_bydate_outlet$variable=="median_rt" & df_bydate_outlet$from_user_screen_name=="PAHousing",], type = "line", group = "from_user_screen_name")
h2$colors('rgba(212, 175, 232, 1)','rgba(223, 83, 83, .5)','rgba(60, 179, 113, .5)')

h2$yAxis(list(list(title = list(text = 'Median retweet count per day'))))
h2$title(text='Retweetability by @PAHousing')
h2$print("chart2",include_assets = TRUE)
```

```{r echo=FALSE, warning=FALSE}
#options(RCHART_WIDTH = 1100, RCHART_HEIGHT = 700)
#knitr::opts_chunk$set(comment = NA, results = "asis", tidy = F, message = F)
h3 <- hPlot(x = "date", y = "value", data = df_bydate_outlet[df_bydate_outlet$variable=="median_rt" & df_bydate_outlet$from_user_screen_name=="RescueTrenton",], type = "line", group = "from_user_screen_name")
h3$colors('rgba(223, 83, 83, .5)', 'rgba(119, 152, 191, .5)', 'rgba(60, 179, 113, .5)')
h3$yAxis(list(list(title = list(text = 'Median retweet count per day'))))
h3$title(text='Retweetability by @RescueTrenton')
h3$print("chart4",include_assets = TRUE)
```

```{r echo=FALSE, warning=FALSE}
#options(RCHART_WIDTH = 1100, RCHART_HEIGHT = 700)
#knitr::opts_chunk$set(comment = NA, results = "asis", tidy = F, message = F)
h4 <- hPlot(x = "date", y = "value", data = df_bydate_outlet[df_bydate_outlet$variable=="median_rt" & df_bydate_outlet$from_user_screen_name=="ProjectHOME",], type = "line", group = "from_user_screen_name")
h4$colors('rgba(60, 179, 113, .5)','rgba(223, 83, 83, .5)', 'rgba(119, 152, 191, .5)')
h4$yAxis(list(list(title = list(text = 'Median retweet count per day'))))
h4$title(text='Retweetability by @ProjectHOME')
h4$print("chart5",include_assets = TRUE)
```

```{r echo=FALSE, warning=FALSE}
#options(RCHART_WIDTH = 1100, RCHART_HEIGHT = 700)
#knitr::opts_chunk$set(comment = NA, results = "asis", tidy = F, message = F)
h5 <- hPlot(x = "date", y = "value", data = df_bydate_outlet[df_bydate_outlet$variable=="median_rt" & df_bydate_outlet$from_user_screen_name=="thenyic",], type = "line", group = "from_user_screen_name")
h5$colors('rgba(119, 152, 191, .7)','rgba(223, 83, 83, .5)', 'rgba(60, 179, 113, .5)')
h5$yAxis(list(list(title = list(text = 'Median retweet count per day'))))
h5$title(text='Retweetability by @thenyic')
h5$print("chart6",include_assets = TRUE)
```

```{r echo=FALSE, warning=FALSE}
#options(RCHART_WIDTH = 1100, RCHART_HEIGHT = 700)
#knitr::opts_chunk$set(comment = NA, results = "asis", tidy = F, message = F)
h6 <- hPlot(x = "date", y = "value", data = df_bydate_outlet[df_bydate_outlet$variable=="median_rt" & df_bydate_outlet$from_user_screen_name=="PCCYteam",], type = "line", group = "from_user_screen_name")
h6$colors('rgba(220, 109, 208, .9)','rgba(119, 152, 191, .5)','rgba(223, 83, 83, .5)')
h6$yAxis(list(list(title = list(text = 'Median retweet count per day'))))
h6$title(text='Retweetability by @PCCYteam')
h6$print("chart7",include_assets = TRUE)
```
