Какво има в магазина-

Twitter е мощна онлайн платформа, където хора от всеки ъгъл на света идват напред, за да споделят своите идеи, знания и понякога просто да се забавляват, като тролят всякакви личности, от филмови звезди до Съединените щати президент.

Като се има предвид такава платформа, която позволява на всеки да изрази своето мнение, тя може да се превърне в мощно място за разбиране какви са нуждите и идеологиите на хората и какво наистина искат. Това накара различни организации и политически партии да анализират тези туитове, за да получат по-добра представа за мнението на хората и да го използват в своя полза.

Нашата цел днес:

Ще анализираме туитовете, направени с помощта на #JusticeForSSR. Това започна

тенденция, когато моят любим боливудски актьор Сушант Сингх Раджпут беше намерен мъртъв в дома си в Мумбай. Нетизените бързо обвиниха непотизма в Боливуд като причина за смъртта му. Затова ще анализираме и ще създадем метод за визуализация, за да разберем какво всъщност обсъждат хората.

Приготвяме се да започнем

Ние ще използваме ‘tweepy’ API за извличане на данни от twitter. Трябва да създадете акаунт за програмист в Twitter, за да използвате това.

consumer_key = ''
consumer_key_secret = ''
access_token = ''
access_token_secret = ''
auth = tweepy.OAuthHandler(consumer_key, consumer_key_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True)

Получаване на туитове, които ни интересуват-

Тук дефинираме нашия хаштаг под заявка, задаваме максималния брой туитове, които искаме да извлечем от Twitter.

query = 'JusticeForSSR'
max_tweets = 2000
searched_tweets = [status for status in tweepy.Cursor(api.search, q=query).items(max_tweets)]

Импортиране на пакетите

import tweepy
from textblob import TextBlob
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import re
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
from wordcloud import WordCloud
import json
from collections import Counter

Референтни връзки за различни пакети: -









Разглеждане на извлечените данни:

„searched_tweets“ съдържа нашите извлечени данни, нека да разгледаме какво съдържа:

searched_tweets[1]
Output:
the output contains a lot of information but we are interested only in the text part:
(searched_tweets[2]).text
Output:
Chori karne wala vyakti thodi Na bolata hai ki main chori Kiya hai.
😡😡😡😡😡😡😡😡
Jo Sushant Singh ka murder Kiya hai au… https://t.co/ueEYV0fRJN
###Looks like this person is really frustrated with what's going on:p 

Нека разделим туитовете:

Сега ще категоризираме текстовата част на туитовете в положителна или отрицателна, като предадем текстовата част на TextBlob tokenizer и използваме неговата функция за настроение, за да ги разделим с помощта на праг:

positive = []
negitive = []
neutral = []
for tweet in searched_tweets:
  result = TextBlob(tweet.text)
  if result.sentiment[0]>0:
    positive.append(tweet.text)
  elif result.sentiment[0]<0:
    negitive.append(tweet.text)
  else:
    neutral.append(tweet.text)

След получаване на категоризираните туитове, нека сега да го начертаем с помощта на matplotlib за по-добро разбиране:

Почистване на данните:

Извлеченият набор от данни съдържа много информация, но ние се интересуваме от JSON частта от него. Следователно ще вземем JSON участие в речник и след това ще изхвърлим този речник като текстов файл:

my_list = []
for json_tweet in searched_tweets:
  my_list.append(json_tweet._json)

JSON файлът също съдържа много параметри, но ние се интересуваме само от няколко полета като текстовата част и tweet id за създаване на csv файл, така че да можем да работим с dataframe:

Но тази текстова част също съдържа много неуместна информация като потребителския идентификатор на формуляр @XX, който не искаме, тъй като не играе съществена роля в нашия анализ, така че филтрираме всички думи, които започват с „@“:

def remove_pattern(input_txt, pattern):
  r = re.findall(pattern, input_txt)
  for i in r:
    input_txt = re.sub(i, '', input_txt)
  return input_txt
tweet_dataset['text'] = np.vectorize(remove_pattern)(tweet_dataset['text'], "@[\w]*")

Сега ще създадем корпус и ще добавим текстовата колона на рамката с данни, но първо ще премахнем някои от често срещаните ключови думи като https, retweet, rt и т.н., които често идват в текстовата част и не са от значение за днешния ни анализ:

corpus = []
for i in range(0, 1000):
  tweet = re.sub('[^a-zA-Z0-9]', ' ', tweet_dataset['text'][i])
  tweet = tweet.lower()
  tweet = re.sub('rt', '', tweet)
  tweet = re.sub('http', '', tweet)
  tweet = re.sub('https', '', tweet)
  tweet = re.sub('co', '', tweet)
  corpus.append(tweet)

Финална визуализация :))

Сега ще начертаем най-често срещаните думи в корпуса с помощта на wordcloud, wordcloud е интересен инструмент за създаване на смесен набор от най-често срещаните думи в низ:

all_words = ' '.join([text for text in corpus])
wordcloud = WordCloud(width=800, height=500, random_state=21, max_font_size=110).generate(all_words)
plt.figure(figsize=(10, 7))
plt.imshow(wordcloud, interpolation="bilinear")
img = plt.imshow(wordcloud, interpolation="bilinear")
plt.axis('off')
plt.savefig('img5.jpg', bbox_inches='tight')
plt.show()

Резултат:

Тъй като сега лесно анализирате, че хората са разочаровани от непотизма в Боливуд и говорят за забрана на филма Садак2койтоима Алиа Бхат, те говорят за бойкот на филми на Салман Хан и дори изискване на CBI запитване.. Вижте какви още неща можете да заключите от това и дали можете да намерите името на Каран Джохар в туитове!!

Заключение:

Така че видяхме същността на това колко мощно и лесно е да се улови мнението на обществеността от тези социални медийни платформи и те се използват от различни индустрии и политически партии, за да разберат мнението на хората и да предприемат необходимите действия, за да им повлияят!!

Последвайте ме в LinkedIn: www.linkedin.com/in/rishabh-raj-628a968b