تحلیل احساسات در توییتر با پایتون — راهنمای جامع و کاربردی

۵۰۱ بازدید
آخرین به‌روزرسانی: ۲۳ اردیبهشت ۱۴۰۲
زمان مطالعه: ۵ دقیقه
تحلیل احساسات در توییتر با پایتون — راهنمای جامع و کاربردی

در این مطلب به منظور انجام تحلیل احساسات (Sentiment Analysis) در شبکه اجتماعی «توئیتر»، با اتصال به Twitter Streaming API، توئیت‌ها (Tweets) را گردآوری (بر اساس یک کلیدواژه) و احساسات هر توئیت را محاسبه کرده و یک دشبورد «زمان واقعی» (real-time) با استفاده از «الاستیک‌سرچ» (Elasticsearch) و «کیبانا» (Kibana) به منظور بصری‌سازی نتایج ساخته می‌شود. ابزارهای مورد استفاده در این راستا به شرح زیر هستند.

  • Docker v1.3.0 (+)
  • boot2docker v1.3.0 (+)
  • Tweepy v2.3.0 (+)
  • TextBlob v0.9.0 (+)
  • Elasticsearch v1.3.5 (+)
  • Kibana v3.1.2 (+)

معرفی ابزارهای مورد استفاده

در ادامه، سه ابزار اصلی مورد استفاده در این راهنما به صورت اجمالی معرفی شده‌اند.

داکر

«داکر» (Docker)، یک برنامه کامپیوتری برای انجام مجازی‌سازی در سطح سیستم‌عامل است که به آن «containerization» نیز گفته می‌شود. داکر برای اجرای بسته‌های نرم‌افزاری که «ظرف» (کانتینر | container) نامیده می‌شوند مورد استفاده قرار می‌گیرد.

کیبانا

«کیبانا» (Kibana) یک پلاگین بصری‌سازی داده‌های متن‌باز برای Elasticsearch است. این پلاگین، قابلیت «بصری‌سازی» (visualization) را براساس محتوای اندیس‌گذاری شده در خوشه Elasticsearch فراهم می‌کند. کاربران می‌توانند «نوار» (bar)، نمودارهای نقطه‌ای، خطی، نمودار دایره‌ای و نقشه‌ها را براساس حجم بالایی از داده‌ها ایجاد کنند.

الاستیک سرچ

«الاستیک سرچ» (Elasticsearch) یک موتور جست‌و‌جو بر اساس کتابخانه بازیابی اطلاعات «متن‌باز» (Open Source) «آپاچی لوسین» (Apache Lucene) و دارای قابلیت «چند مستاجری» (Multitenancy) تمام متن با یک رابط وب HTTP و مستندات JSON است.

محیط داکِر

برای نصب «داکِر» (Docker) و boot2docker مطالعه مستندات رسمی آن (+) توصیه می‌شود. پس از نصب، با boot2docker در حال اجرا، باید دستور docker version را برای بررسی نصب داکر (Docker) در «شِل» (Shell) وارد کرد.

همچنین، کاربران باید یک دایرکتوری برای نگهداری پروژه خود بسازند و Dockerfile را از مخزن گرفته و یک «ایمیج» (image) ایجاد کنند.

1$ docker build -rm -t=elasticsearch-kibana .

پس از ساخت، «کانتینر» (container | ظرف) را می‌توان با بهره‌گیری از دستور زیر اجرا کرد.

1$ docker run -d -p 8000:8000 -p 9200:9200 elasticsearch-kibana

در نهایت، باید دو دستور بعدی را در ترمینال جدید ویندوز برای نگاشت آدرس port combo/IP استفاده شده در boot2docker VM در «لوکال‌هاست» (localhost) (متعلق به کاربر)، اجرا کرد.

1$ boot2docker ssh -L8000:localhost:8000
2$ boot2docker ssh -L9200:localhost:9200

اکنون، می‌توان به Elasticsearch در مسیر http://localhost:9200 و Kibana در مسیر http://localhost:8000 دسترسی داشت.

Twitter Streaming API

به منظور دسترسی داشتن به Twitter Streaming API، نیاز به نصب ثبت یک نرم‌افزار کاربردی در اینجا (+) است. پس از ساخت، کاربر باید به صفحه برنامه کاربردی خودش هدایت شود که در آنجا می‌تواند «کلید مصرف‌کننده» (consumer key) و «رمز مصرف‌کننده» (consumer secret) را دریافت کند و یک توکن دسترسی در «سربرگ» (tab) با نام «Keys and Access Tokens» بسازد.

این موارد را باید به یک فایل جدید با نام config.py افزود.

1consumer_key = "add_your_consumer_key"
2consumer_secret = "add_your_consumer_secret"
3access_token = "add_your_access_token"
4access_token_secret = "add_your_access_token_secret"

تذکر: با توجه به آنکه این فایل حاوی اطلاعات حساسی است، کاربران نباید آن را به مخزن گیت خود بیافزایند.

مطابق مستندات Twitter Streaming (+)، راه‌اندازی یک اتصال به streaming API به معنای ایجاد یک درخواست HTTP با طول عمر بالا و تجزیه پاسخ به صورت افزایشی است. به لحاظ مفهومی، می‌توان به آن به عنوان دانلود کردن یک فایل بی‌نهایت بلند از طریق HTTP نگاه کرد. بنابراین، کاربر باید یک درخواست ایجاد و آن را با کلیدواژه‌های خاص، کاربر و یا ناحیه جغرافیایی فیلتر کند، و سپس اتصال را باز نگه دارد تا بتواند به اندازه ممکن توییت گردآوری کند. این کار ظاهرا پیچیده به نظر می‌رسد اما Tweepy انجام آن را آسان ساخته است.

Tweepy Listener

Tweepy از یک «listener» نه فقط برای گردآوری توئیت‌های استریم شده، بلکه فیلتر کردن آن‌ها نیز استفاده می‌کند.

کد

کاربر باید کد زیر را با نام sentiment.py ذخیره کند.

1import json
2from tweepy.streaming import StreamListener
3from tweepy import OAuthHandler
4from tweepy import Stream
5from textblob import TextBlob
6from elasticsearch import Elasticsearch
7
8# import twitter keys and tokens
9from config import *
10
11# create instance of elasticsearch
12es = Elasticsearch()
13
14
15class TweetStreamListener(StreamListener):
16
17    # on success
18    def on_data(self, data):
19
20        # decode json
21        dict_data = json.loads(data)
22
23        # pass tweet into TextBlob
24        tweet = TextBlob(dict_data["text"])
25
26        # output sentiment polarity
27        print tweet.sentiment.polarity
28
29        # determine if sentiment is positive, negative, or neutral
30        if tweet.sentiment.polarity < 0:
31            sentiment = "negative"
32        elif tweet.sentiment.polarity == 0:
33            sentiment = "neutral"
34        else:
35            sentiment = "positive"
36
37        # output sentiment
38        print sentiment
39
40        # add text and sentiment info to elasticsearch
41        es.index(index="sentiment",
42                 doc_type="test-type",
43                 body={"author": dict_data["user"]["screen_name"],
44                       "date": dict_data["created_at"],
45                       "message": dict_data["text"],
46                       "polarity": tweet.sentiment.polarity,
47                       "subjectivity": tweet.sentiment.subjectivity,
48                       "sentiment": sentiment})
49        return True
50
51    # on failure
52    def on_error(self, status):
53        print status
54
55if __name__ == '__main__':
56
57    # create instance of the tweepy tweet stream listener
58    listener = TweetStreamListener()
59
60    # set twitter keys/tokens
61    auth = OAuthHandler(consumer_key, consumer_secret)
62    auth.set_access_token(access_token, access_token_secret)
63
64    # create instance of the tweepy stream
65    stream = Stream(auth, listener)
66
67    # search twitter for "congress" keyword
68    stream.filter(track=['congress'])

آنچه در کد بالا اتفاق می‌افتد به صورت موجز به شرح زیر است:

  • اتصال به Twitter Streaming API
  • فیلتر کردن داده‌ها با کلیدواژه «congress»
  • «رمزگشایی» (دیکد | Decode) کردن نتایج (توئیت‌ها)
  • محاسبه تحلیل احساسات با TextBlob
  • تعیین اینکه احساسات کلی مثبت، منفی و یا خنثی هستند.
  • در نهایت داده‌های توییت‌ها و احساسات مرتبط به آن ها به Elasticsearch DB افزوده می‌شود.

برای آگاهی از جزئیات بیشتر، مطالعه «توضیحات» (Comments) موجود در کد توصیه می‌شود.

مبانی محاسبه احساسات با TextBlob

برای محاسبه عواطف کلی، باید به درجه قطبش (قطبیت) نگاه شود:

  1. مثبت: از ۰/۰۱ تا ۱/۰
  2. خنثی: ۰
  3. منفی: از ۰/۰۱- تا ۱/۰-

برای آگاهی از جزئیات چگونگی محاسبه احساسات توسط TextBlob، مراجعه به صفحه رسمی آن توصیه می‌شود.

تحلیل‌های الاستیک‌سرچ

در طول یک بازه زمانی دو ساعتی، ۹۵۰۰ توئیت با کلیدواژه «congress» گردآوری شده است. پژوهشگران می‌توانند از کلیدواژه مورد نظر خود برای گردآوری توئیت‌ها استفاده کنند. پس از آنکه حجم قابل توجهی توئیت گردآوری شد، می‌توان به کار اسکریپت پایان داد.

سپس، این امکان وجود دارد که اندکی تحلیل روی نتایج انجام داد. با استفاده از اندیس «sentiment» از اسکریپت «sentiment.py»، می‌توان از Elasticsearch search API برای گردآوری بینش اولیه استفاده کرد. برای مثال:

  • متن کامل جست‌و‌جو برای «obama» (+)
  • جست‌و‌جوی نام کاربری توییتر/نویسنده (+)
  • جست‌و‌جوی احساسات (+)
  • جست‌و‌جوی «obama» و احساسات (+)

کارهای بسیار زیادی وجود دارد که می‌توان صرفا با جست‌و‌جو و فیلتر کردن نتابج با استفاده از الاستیک‌سرچ (Elasticsearch) انجام داد. برای دریافت اطلاعات بیشتر پیرامون چگونگی تحلیل و مدل‌سازی داده‌ها مطالعه «Elasticsearch - The Definitive Guide» (+) توصیه می‌شود.

بصری‌سازی با کیبانا

«کیبانا» (Kibana)، امکان مشاهده و تعامل با داده‌ها را در زمان واقعی و در حقیقت در حالیکه گردآوری می‌شوند می‌دهد. به دلیل اینکه کیبانا با جاوااسکریپت نوشته شده، می‌توان به آن مستقیما از طرریق مرورگر دسترسی داشت.

مبانی کار با کیبانا را می‌توان از راهنمای رسمی آغاز کار با آن (+) مطالعه کرد. نمودار دایره‌ای موجود در تصویر زیر با Kibana ساخته شده و نسبت هر احساس - شامل مثبت، منفی و خنثی - را نسبت به کل توئیت‌های گردآوری شده نشان می‌دهد.

تحلیل عواطف در توییتر

در ادامه نمودارهای دیگری از کیبانا ارائه شده است.

تحلیل عواطف با توییتر
توئیت‌های فیلتر شده با کلمه «obama»
تحلیل احساسات در توییتر
کاربران با بیشترین توییت در این حوزه

کاربری که در صدر لیست قرار دارد، دارای ۷۶ توییت است. این نشان می‌دهد که نیاز به بررسی عمیق‌تر در میان توئیت‌های انجام شده طی دو ساعت گذشته وجود دارد. به هر حال، کاربر مذکور یک توییت را ۷۶ بار تکرار کرده، بنابراین شاید بهتر باشد ۷۵ مورد از آن‌ها را فیلتر کرد زیرا نتایج کلی دچار «چولگی» (Skewness) شده‌اند. علاوه بر نمودارهای ارائه شده، بصری‌سازی احساسات با استفاده از «مکان» (location) نیز می‌تواند دربردارنده اطلاعات جالب توجهی باشد. در این راستا باید اطلاعات بیشتری گردآوری کرد. همچنین، می‌توان با ترسیم نمودار هیستوگرام داده‌ها نیز اطلاعات جالبی به دست آورد. برای دریافت کد کامل استفاده شده در این راهنما، مراجعه به مخزن گیت آن (+) توصیه می‌شود.

اگر مطلب بالا برای شما مفید بوده، آموزش‌های زیر نیز به شما پیشنهاد می‌شود:

^^

بر اساس رای ۳ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
Real Python
۲ دیدگاه برای «تحلیل احساسات در توییتر با پایتون — راهنمای جامع و کاربردی»

با سلام مطلب بسیار با ارزشی بود فقط برای بدست آوردن چهارتا توکن هیچ راه دیگه ای وجود ندارد ؟
چون تویتر به هر کسی توکن نمی دهد. درخواست من برای بدست آوردن توکن ها رد شد.

با سلام مطلب بسیار با ارزشی بود فقط برای بدست آوردن چهارتا توکن هیچ راه دیگه ای وجود ندارد ؟
چون تویتر از ژون ۲۰۱۸ سختگیری اعمال کرده و به هر کسی توکن نمی دهد. درخواست من برای بدست آوردن توکن ها رد شد.
اگه راه دیگه ای رو سراغ دارید لطفا ذکر نمایید.

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *