With lot of free time i did a small project based on WhatsApp group chat sentiment analysis with ‘R’. R is a great language for statistical calculations and analytics, this small code sample can show you a showcase usefullness of that.
#!/usr/bin/r
# Load the necessary packages
library ( wordcloud )
library ( RColorBrewer )
library ( plyr )
library ( ggplot2 )
library ( sentiment )
whatsapp_chat_txt <- read.csv ( "__data_for_R" , header = FALSE ) $ V3
#cat(whatsapp_chat_txt)
whatsapp_chat_txt = gsub ( "@\\w+" , "" , whatsapp_chat_txt )
whatsapp_chat_txt = gsub ( "[[:punct:]]" , "" , whatsapp_chat_txt )
whatsapp_chat_txt = gsub ( "[[:digit:]]" , "" , whatsapp_chat_txt )
whatsapp_chat_txt = gsub ( "http\\w+" , "" , whatsapp_chat_txt )
whatsapp_chat_txt = gsub ( "[ \t]{2,}" , "" , whatsapp_chat_txt )
whatsapp_chat_txt = gsub ( "^\\s+|\\s+$" , "" , whatsapp_chat_txt )
catch.error = function ( x )
{
y = NA
catch_error = tryCatch ( tolower ( x ), error = function ( e ) e )
if ( ! inherits ( catch_error , "error" ))
y = tolower ( x )
return ( y )
}
whatsapp_chat_txt = sapply ( whatsapp_chat_txt , catch.error )
whatsapp_chat_txt = whatsapp_chat_txt [ ! is.na ( whatsapp_chat_txt )]
names ( whatsapp_chat_txt ) = NULL
whatsapp_chat_class_emo = classify_emotion ( whatsapp_chat_txt , algorithm = "bayes" , prior = 1.0 )
emotion = whatsapp_chat_class_emo [, 7 ]
emotion [ is.na ( emotion )] = "unknown"
whatsapp_chat_class_pol = classify_polarity ( whatsapp_chat_txt , algorithm = "bayes" )
polarity = whatsapp_chat_class_pol [, 4 ]
sentiment_dataframe = data.frame ( text = whatsapp_chat_txt , emotion = emotion , polarity = polarity , stringsAsFactors = FALSE )
sentiment_dataframe = within ( sentiment_dataframe , emotion <- factor ( emotion , levels = names ( sort ( table ( emotion ), decreasing = TRUE ))))
ggplot ( sentiment_dataframe , aes ( x = emotion )) + geom_bar ( aes ( y = ..count.. , fill = emotion )) +
scale_fill_brewer ( palette = "Dark2" ) +
ggtitle ( 'Sentiment Analysis with emotions categotisation' ) +
theme ( legend.position = 'right' ) + ylab ( 'Number of messages' ) + xlab ( 'Emotion Categories' )
ggsave ( filename = "./output/SA1.png" )
ggplot ( sentiment_dataframe , aes ( x = polarity )) +
geom_bar ( aes ( y = ..count.. , fill = polarity )) +
scale_fill_brewer ( palette = "Dark2" ) +
ggtitle ( 'Sentiment Analysis with polarity' ) +
theme ( legend.position = 'right' ) + ylab ( 'Number of messages' ) + xlab ( 'Polarity Categories' )
#SA2
ggsave ( filename = "./output/SA2.png" )
whatsapp_chat_emos = levels ( factor ( sentiment_dataframe $ emotion ))
n_whatsapp_chat_emos = length ( whatsapp_chat_emos )
whatsapp_chat.emo.docs = rep ( "" , n_whatsapp_chat_emos )
for ( i in 1 : n_whatsapp_chat_emos )
{
tmp = whatsapp_chat_txt [ emotion == whatsapp_chat_emos [ i ]]
whatsapp_chat.emo.docs [ i ] = paste ( tmp , collapse = " " )
}
Happy coding .. :)