تحلیل احساسات در توییتر با زبان R – راهنمای کاربردی


«تحلیل احساسات» (Sentiment Analysis) راهکاری قدرتمند برای اندازهگیری عقاید افراد پیرامون یک موضوع مشخص در برهه مشخصی از زمان است. در این مطلب، با استفاده از «بستههای» (Packages) زبان برنامهنویسی R شامل twitteR و tidytext تحلیل احساسات به منظور تعیین عواطف موجود پیرامون قیمت کنونی طلا استفاده شده است. پروژه انجام شده در این مطلب روی دادههای انگلیسی صورت پذیرفته، ولیکن مفهوم و روش کلی پیادهسازی برای دیگر زبانها نیز مشابه است. تفاوتها تنها در بخشهای مربوط به پردازش زبان طبیعی بروز میکند.
دانلود توییتها با بسته twitteR
برای فراهم کردن امکان دانلود توئیتها، باید برنامه کاربردی مناسب برای انجام آن را از این مسیر (+) ساخت. در مسیر مذکور، کاربر باید حساب کاربری بسازد که کدهای احراز هویت گوناگون برای اتصال به API را در اختیار او قرار میدهد.
اکنون و در ابتدا، با استفاده از قطعه کد زیر، دسترسی را احراز هویت کرده و سپس، ۵۰۰ توییت مربوط به کلیدواژه جستوجوی «قیمت طلا» (gold prices) (توییتهای به زبان انگلیسی) دانلود میشوند.
1library(twitteR)
2setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret)
3
4tweets<-searchTwitter("gold prices", n=500, since='2018-06-25')
5df <- twListToDF(tweets)
اکنون، توییتها را از حالت لیست خارج کرده (به بردار تبدیل میشوند) و از dplyr برای ذخیرهسازی آنها به صورت یک مشاهده استفاده میشود.
1wctext<-paste(unlist(df), collapse=" ")
2str(df)
3
4library(dplyr)
5wctext <- data_frame(line = 1, text = wctext)
6wctext
انجام تحلیل احساسات در توییتر با tidytext
در ادامه، چگونگی انجام تحلیل عواطف با استفاده از tidytext (+) آموزش داده شده است. اکنون، «کلمات بازدارنده» (Stop Words)، پیش از انجام گامهای دیگر از تحلیلها حذف میشوند. کلمات بازدارنده به واژگانی گفته میشود که به طور متداول مورد استفاده قرار میگیرند، ولی الزاما ارزشی به تحلیل احساسات اضافه نمیکنند.
بنابراین، باید آنها را حذف کرد زیرا تعداد آنها زیاد است و وجود آنها مانع کسب هر گونه بینش مفیدی از دادهها طی انجام تحلیلها میشود.
1library(tidytext)
2
3wctext2 <- wctext %>%
4 unnest_tokens(word,text)
5
6data(stop_words)
7
8wctext2 <- wctext2 %>%
9 anti_join(stop_words)
علاوه بر آن، لیستی از کلمات بازدارنده نیز در یک فایل متنی جدا ذخیره میشوند (شامل واژههای trump، twitter و gold) و آنها نیز از تحلیلها حذف میشوند. شایان توجه است که کلمه gold حذف میشود، زیرا tidytext آن را به عنوان یک کلمه مثبت در نظر میگیرد، اما در این مساله خاص، وجود آن مانع اندازهگیری احساسات صحیح نسبت به کالای طلا میشود.
1setwd("C:/Users/michaeljgrogan/Documents/a_documents/computing/data science/datasets")
2library(tm)
3
4stopwords = readLines('stopwords.txt')
5x = wctext2$word
6x = removeWords(x,stopwords)
7
8wctext2 <- x
9wctext2<-data.frame(wctext2)
اکنون، یک tibble ساخته شده که در آن وقوع هر کلمه در تحلیلها اندازهگیری میشود، و سپس موتور احساسات Bing برای رتبهدهی به کلیدواژهها مورد استفاده قرار میگیرد.
1tibble<-wctext2 %>%
2 count(wctext2,sort=TRUE)
3col_headings<-c("word","n")
4names(tibble) <- col_headings
5
6tibblefiltered = tibble %>% filter(n > 1)
7attach(tibblefiltered)
8barplot(tibblefiltered$n, main="Word Frequency",
9 xlab="Word", names.arg=tibblefiltered$word)
10str(tibblefiltered)
11barsentiment <- tibblefiltered %>%
12 inner_join(get_sentiments("bing"), by = c("word"))
13
14rm(list= ls()[!(ls() %in% c('barsentiment'))])
15attach(barsentiment)
16library(ggplot2)
17
18barsentiment %>%
19 count(sentiment, word, n=n) %>%
20 ungroup() %>%
21 filter(n >= 1) %>%
22 mutate(n = ifelse(sentiment == "negative", -n, n)) %>%
23 mutate(word = reorder(word, n)) %>%
24 ggplot(aes(word, n, fill = sentiment)) +
25 geom_bar(stat = "identity") +
26 ylab("Contribution to sentiment") +
27 coord_flip()
در تصویر زیر، تحلیل احساسات نشان داده شده است.
میتوان مشاهده کرد که کلمات مثبت در تحلیلها مانند «amazing» و «beautiful» الزاما بیانگر احساسات مثبت پیرامون مباحث مالی طلا نیستند. اگرچه، کلمات منفی نیز وجود دارند که به احساسات پیرامون موضوعات مالی طلا مربوط هستند و از آن جمله میتوان به «risk» و «fall» اشاره کرد. با نگاهی به تصویر بالا، به نظر میرسد عواطف کلی نسبت به طلا از چشمانداز مالی «منفی» است.
هنگامی که نگاهی به قیمت طلا طی ۲۴ ساعت گذشته انداخته میشود، مشهود است که قیمت طلا کاهش پیدا کرده و این میتواند پشتوانهای برای عواطف منفی موجود نسبت به قیمت طلا در توییتر باشد.
نتیجهگیری
در این راهنما، چگونگی دانلود توییتها با کتابخانه twitteR و انجام متنکاوی با استفاده از tidytext در زبان برنامهنویسی R آموزش داده شده است.
همچنین، چگونگی انجام تحلیل احساسات در یک پروژه کاربردی (تحلیل احساسات پیرامون قیمت طلا با استفاده از دادههای شبکه اجتماعی توییتر) مورد بررسی قرار گرفت.
اگر نوشته بالا برای شما مفید بود، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- آموزش تحلیل شبکههای اجتماعی با نرم افزار نود ایکس ال (NodeXL)
- آموزش برنامهنویسی R و نرمافزار R Studio
- مجموعه آموزشهای آمار، احتمالات و دادهکاوی
- مجموعه آموزشهای یادگیری ماشین و بازشناسی الگو
- مجموعه آموزشهای شبکههای عصبی مصنوعی
- مجموعه آموزشهای هوش محاسباتی
- مجموعه آموزشهای برنامه نویسی پایتون (Python)
- مجموعه آموزشهای برنامه نویسی متلب (MATLAB)
^^
سلام
تشکر از مطالب خوبتون
مطالبی که آموزش دادید چقدر برای زبان فارسی قابل استفاده هستند. مثل همون موتور احساس bing
خیلی برام جالب بود . سپاس