---
title: "Hashtags used by the organization"
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_hashtag" & df_bydate_outlet$from_user_screen_name=="ConsumerReports",], type = "line", group = "from_user_screen_name")

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