В этом блоге:
- Локальные и глобальные модели мышления
- Уточнение вывода
- Поиск общих тенденций
- Изучение горячей тенденции
- Копать глубже
- Частотный анализ
- Активность вокруг тренда
- Стол, говорящий на 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:
Linkedin:
GitHub: