---
title: "Favorited 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),
            median_mention = median(entities_mentions_count),
            median_hashtag = median(entities_hashtags_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_fav" & df_bydate_outlet$from_user_screen_name=="ConsumerReports",], type = "line", group = "from_user_screen_name")

h1$yAxis(list(list(title = list(text = 'Favorite count per day'))))
h1$title(text='Favorites received 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_fav" & 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 = 'Favorite count per day'))))
h2$title(text='RFavorites received 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_fav" & 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 = 'Favorite count per day'))))
h3$title(text='Favorites received 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_fav" & 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 = 'Favorite count per day'))))
h4$title(text='Favorites received 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_fav" & 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 = 'Favorite count per day'))))
h5$title(text='Favorites received 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_fav" & 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 = 'Favorite count per day'))))
h6$title(text='Favorites received by @PCCYteam')
h6$print("chart7",include_assets = TRUE)
```
