В этом блоге:

  • Локальные и глобальные модели мышления
  • Уточнение вывода
  • Поиск общих тенденций
  • Изучение горячей тенденции
  • Копать глубже
  • Частотный анализ
  • Активность вокруг тренда
  • Стол, говорящий на 1000 слов
  • Анализ используемых языков
  • Последние мысли

Локальные и глобальные модели мышления

Хотя мы не можем быть поклонниками твиттера, мы должны признать, что он имеет огромное влияние на мир. Данные Twitter не только кратны с точки зрения инсайтов, но и Twitter-штормы доступны для анализа почти в реальном времени. Это означает, что мы можем узнавать о больших волнах мыслей и настроений во всем мире по мере их возникновения.

Как и в любом другом месте, наполненном богатством, в Твиттере есть охранники, не позволяющие нам сразу же заполучить данные ⛔️ Некоторые шаги аутентификации (действительно простые) необходимы для вызова их API-интерфейсов для сбора данных. Так как наша цель сегодня - научиться извлекать информацию из данных, мы уже получили зеленый пропуск от системы безопасности ✅ Наши данные готовы к использованию в папке наборов данных - мы можем сосредоточиться на самом интересном! 🕵️‍♀️🌎

Twitter предоставляет как глобальные, так и местные тенденции. Давайте загрузим и проверим данные по темам, которые были актуальны во всем мире и в США на момент запроса - снимок ответов JSON на вызов API Twitter GET Trends / Place.

Примечание. Здесь находится документация по этому вызову, а здесь - полный обзор API-интерфейсов Twitter.

import json

# Load WW_trends and US_trends data into the the given variables respectively
WW_trends = json.loads(open('/content/WWTrends.json').read())
US_trends = json.loads(open('/content/USTrends.json').read())

Уточнение вывода

Наши данные было трудно читать! К счастью, мы можем прибегнуть к методу jason.dumps (), чтобы отформатировать его как красивую строку JSON.

# Pretty-printing the results. First WW and then US trends.
print("WW trends:", WW_trends)
print("\n", "US trends:", US_trends)

Поиск общих тенденций

🕵️‍♀️ Из хорошо напечатанных результатов (вывод предыдущей задачи) мы можем заметить, что:

  • У нас есть массив объектов трендов, включающий: название темы, имеющей тенденцию, параметр запроса, который можно использовать для поиска темы в Twitter-Search, URL-адрес поиска и количество твитов за последние 24 часа, если они доступны. (Тенденции обновляются каждые 5 минут.)
  • Во время запроса #BeratKandili, #GoodFriday и #WeLoveTheEarth в тренде WW.
  • «tweet_volume» сообщает нам, что #WeLoveTheEarth был самым популярным из трех.
  • Результаты не сортируются по «tweet_volume».
  • Есть несколько тенденций, характерных только для США.

Легко пролистать два набора тенденций и выявить общие тенденции, но давайте не будем заниматься «ручной» работой. Мы можем использовать структуру данных набора Python для поиска общих тенденций - мы можем перебирать два объекта тенденций, преобразовывать списки имен в наборы и вызывать метод пересечения, чтобы получить общие имена между двумя наборами.

# Extracting all the WW trend names from WW_trends
world_trends = set([trend['name'] for trend in WW_trends[0]['trends']])
# Extracting all the US trend names from US_trends
us_trends = set([trend['name'] for trend in US_trends[0]['trends']])
# Getting the intersection of the two sets of trends
common_trends = world_trends.intersection(us_trends)
# Inspecting the data
print(world_trends, "\n")
print(us_trends, "\n")
print (len(common_trends), "common trends:", common_trends)

Изучение горячей тенденции

🕵️‍♀️ На пересечении (последний результат) мы видим, что из двух наборов трендов (каждый размером 50) у нас есть 11 перекрывающихся тем. В частности, есть одна общая тенденция, которая звучит очень интересно: #WeLoveTheEarth - так приятно видеть, что Twitteratis единодушно говорят о любви к Матери Земле. ! 💚

Примечание. У нас не могло быть совпадений или совпадений гораздо больше; когда мы сделали запрос на получение тенденций, люди в США могли быть горячими по темам, имеющим отношение только к ним.

# Extracting all the WW trend names from WW_trends
world_trends = set([trend['name'] for trend in WW_trends[0]['trends']])
# Extracting all the US trend names from US_trends
us_trends = set([trend['name'] for trend in US_trends[0]['trends']])
# Getting the intersection of the two sets of trends
common_trends = world_trends.intersection(us_trends)
# Inspecting the data
print(world_trends, "\n")
print(us_trends, "\n")
print (len(common_trends), "common trends:", common_trends)

Мы нашли модный тренд #WeLoveTheEarth. Теперь давайте посмотрим, какую историю он пытается нам рассказать!
Если мы запросим API поиска Twitter с этим хэштегом в качестве параметра запроса, мы получим фактические твиты, связанные с ним. У нас есть ответ от API поиска, который хранится в папке наборов данных как ‘WeLoveTheEarth.json’. Итак, давайте загрузим этот набор данных и углубимся в эту тенденцию.

# Loading the data
tweets = json.loads(open('/content/WeLoveTheEarth.json').read())
# Inspecting some tweets
tweets[0:2]

Копать глубже

🕵️‍♀️ Печать первых двух элементов твита заставляет нас понять, что твит - это гораздо больше, чем то, что мы обычно воспринимаем как твит - это гораздо больше, чем просто короткий текст!

Но послушайте, давайте не будем отвлекаться от всей информации в объекте твита! Давайте сосредоточимся на нескольких интересных областях и посмотрим, сможем ли мы найти в них какие-либо скрытые идеи.

# Extracting the text of all the tweets from the tweet object
texts = [tweet['text'] for tweet in tweets]
# Extracting screen names of users tweeting about #WeLoveTheEarth
names = [user_mention['screen_name'] for tweet in tweets for user_mention in tweet['entities']['user_mentions']]
# Extracting all the hashtags being used when talking about this topic
hashtags = [hashtag['text'] for tweet in tweets for hashtag in tweet['entities']['hashtags']]
# Inspecting the first 10 results
print (json.dumps(texts[0:10], indent=1),"\n")
print (json.dumps(names[0:10], indent=1),"\n")
print (json.dumps(hashtags[0:10], indent=1),"\n")

Частотный анализ

🕵️‍♀️ Только по первым нескольким результатам последнего извлечения мы можем сделать следующие выводы:

  • Речь идет о песне о любви к Земле.
  • За этой волной в Твиттере стоят многие крупные артисты, особенно Лил Дики.
  • Эд Ширан был симпатичной коалой в песне - хэштег «EdSheeranTheKoala»! 🐨

Наблюдение за первыми 10 элементами интересных полей дало нам представление о данных. Теперь мы можем более подробно рассмотреть это, выполнив простое, но очень полезное упражнение - вычисление частотных распределений. Как правило, хороший подход - начать с простых частот; это помогает получить представление о том, как действовать дальше.

# Importing modules
from collections import Counter
# Counting occcurrences/ getting frequency dist of all names and hashtags
for item in [names, hashtags]:
    c = Counter(item)
    # Inspecting the 10 most common items in c
    print (c.most_common(10), "\n")

Активность вокруг тренда

🕵️‍♀️ Основываясь на последних частотных распределениях, мы можем сделать дальнейшие выводы по нашим выводам:

  • С большей уверенностью можно сказать, что это был музыкальный клип Лил Дики о Земле (хэштег «EarthMusicVideo»).
  • ДиКаприо не музыкальный исполнитель, но он тоже принимал участие (Лео - защитник окружающей среды, поэтому неудивительно, что его имя появилось здесь).
  • Также можно сказать, что видео было выпущено в пятницу; очень вероятно 19 апреля.

Нам удалось извлечь так много полезной информации. Довольно мощно, не правда ли ?!

Давайте продолжим анализ данных, чтобы найти закономерности в активности вокруг твитов - все ли ретвиты происходили вокруг определенного твита?

Если твит был ретвитирован, поле ‘retweeted_status’ содержит много интересных деталей о самом исходном твите и его авторе.

Мы можем измерить популярность твита, проанализировав поля retweetcount и избранное. Но давайте также извлечем количество подписчиков твитера - на снимке много знаменитостей, поэтому можем ли мы сказать, повлияла ли их пропаганда #WeLoveTheEarth на значительную часть их подписчиков?

Примечание. retweet_count дает нам общее количество ретвитов исходного твита. Он должен быть одинаковым как в исходном твите, так и во всех последующих ретвитах. Работа с примерами твитов и официальной документацией - это способ разобраться во многих областях.

retweets = [
 (tweet['retweet_count'],
 tweet['retweeted_status']['favorite_count'],
 tweet['retweeted_status']['user']['followers_count'],
 tweet['retweeted_status']['user']['screen_name'],
 tweet['text'])
 for tweet in tweets
   if 'retweeted_status' in tweet
]

Стол, говорящий на 1000 слов

Давайте продолжим манипулировать данными и визуализировать их лучше и полнее - «выглядит важно!»

# Importing modules
import matplotlib.pyplot as plt
import pandas as pd
# Create a DataFrame and visualize the data in a pretty and insightful format
df = pd.DataFrame(retweets, columns['Retweets','Favorites','Followers','ScreenName','Text']).groupby(['ScreenName','Text','Followers']).sum().sort_values(by=['Followers'], ascending=False)
df.style.background_gradient()

Анализ используемых языков

🕵️‍♀️ Наша таблица говорит нам, что:

  • Больше всего отреагировали подписчики Лил Дики - 42,4% подписчиков понравился его первый твит.
  • Даже если у таких знаменитостей, как Кэти Перри и Эллен, огромное количество подписчиков в Твиттере, их подписчики почти не отреагировали, например, только 0,0098% подписчиков Кэти понравилось ее твит.
  • В то время как Лео получил больше всего лайков и ретвитов с точки зрения подсчета голосов, его первый твит понравился только 2,19% его подписчиков.

Большая разница в реакции может быть объяснена тем, что это был музыкальный клип Лил Дики. Лео по-прежнему пользовался большей поддержкой, чем Кэти или Эллен, потому что он сыграл важную роль в этой инициативе.

Можем ли мы найти в данных еще какие-то интересные закономерности? По тексту твитов мы могли определить разные языки, поэтому давайте создадим частотное распределение для языков.

# Extracting language for each tweet and appending it to the list of languages
tweets_languages = []
for tweet in tweets:
    tweets_languages.append(tweet['lang'])
tweets_sources = []
for tweet in tweets:
    tweets_sources.append(tweet['source'])
# Plotting the distribution of languages
%matplotlib inline
plt.hist(tweets_languages)

Найдите мысли

🕵️‍♀️ Последняя гистограмма говорит нам, что:

  • Большинство твитов было на английском.
  • Следующими заняли второе место поляки, итальянцы и испанцы.
  • Было много твитов на чужом для Twitter языке (lang = ‘und’).

Чем полезна такая информация? Потому что это может позволить нам понять «категорию» людей, интересующихся этой темой (кластеризация). Мы также могли бы проанализировать тип устройства, используемого Twitteratis, tweet['source'], чтобы ответить на такие вопросы, как «Влияет ли владение Apple по сравнению с Andorid на склонность людей к этой тенденции?». Я оставлю это вам в качестве дальнейшего упражнения!

Какое это было захватывающее путешествие! Мы начали почти ничего не понимая, и вот мы ... полны идей.

От сопоставлений на основе местоположения до анализа активности вокруг твита и нахождения закономерностей на языках и устройствах - сегодня мы многое рассмотрели - давайте заслуженно похлопаем себя по плечу!

Волшебная формула = данные + Python + творчество + любопытство

plt.hist(tweets_sources)

Ссылка на блокнот GitHub: https://github.com/vdnew/Real-Time-Insights-from-Social-media-Data---Data-Science-Case-Study

Учетная запись Twiter:

Https://twitter.com/datarishi



Linkedin:



GitHub:

Https://github.com/vdnew/