Извлечение данных из Твиттера и применение анализа эмоций, чтобы понять настроение последних твитов, касающихся нового вируса короны.

Введение

Нет абсолютно никаких сомнений в том, что новый коронавирус 2019 года (2019-nCoV) является одной из самых серьезных проблем, с которыми человечество столкнется в ближайшие несколько месяцев и, возможно, лет.

На данный момент — 15 марта 2020 года — предпринимается широкий спектр действий, чтобы замедлить распространение вируса по всему миру. Закрываются школы и университеты, пустеют стадионы, ужесточается пограничный контроль, ограничивая свободы, к которым мы так привыкли.

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

Чтобы понять, как люди реагируют на эти новые обстоятельства, а также на сам вирус, можно обратиться к социальным сетям. Да, знаю. Каждый пользователь живет в пузыре, мнения становятся поляризованными, пользователей кормят контентом, который соответствует их целевой аудитории, и есть масса ботов, распространяющих дезинформацию и пропаганду. Но, применяя анализ настроений и/или эмоций к тому, что вы берете из Интернета, вы все равно можете получить представление о более широкой картине того, что происходит в мире. В данном случае мы обращаемся к анализу эмоций, поскольку спрашивать об отношении (положительно-нейтрально-отрицательном или, может быть, даже смешанном) твитов к пандемической вспышке смертельного вируса кажется немного устаревшим. Ну, может, и не устарело, но вы меня поняли.

Отказ от ответственности

Полное раскрытие: это не академическое исследование. Да, ниже будут ссылки на источники. Да, это будет выглядеть научно. Но я слишком уважаю настоящих ученых, чтобы утверждать, что эта статья даже отдаленно находится на том же уровне, что и академические статьи, проходящие рецензирование. Нет, у меня нет фальсифицируемой гипотезы, нет ни индуктивных, ни дедуктивных исследований, ни научной методологии. Пожалуйста, относитесь ко всему с недоверием и имейте в виду, что эта статья — не что иное, как исследование данных. Вы можете не согласиться со мной в какой-то момент или цифре, что я просто ошибаюсь в чем-то, и это нормально для меня. Я не претендую на всезнание. Ведь я дизайнер и разработчик, а не математик. Если вы хотите провести статистическое тестирование или углубленное исследование, не стесняйтесь использовать то, что я создал. Исходный код можно найти на моем Github. Если вы ищете достоверную информацию о распространении коронирусного вируса, о том, как оставаться здоровым, или о других смежных темах, обратитесь к заслуживающим доверия источникам, таким как ВОЗ или другим медицинским экспертам. Все мы знаем, как статистика может вводить в заблуждение. Но я заявляю об этом ясно, чтобы не подтолкнуть вас в направлении, к которому я мог бы быть предвзятым или которое может быть результатом надежности данных.

Получение данных с помощью Tweepy

Перво-наперво. Чтобы получить какие-то данные, с которыми мы реально можем работать, мы используем Tweepy — библиотеку python для доступа к API Twitter. Используя эту библиотеку, мы делаем вызов API и получаем объект, содержащий до 3200 твитов, в качестве ответа от Twitter. Эти отдельные твиты содержат всевозможную интересную информацию. Имя пользователя, иногда его географическое положение, но, что наиболее важно, текст конкретного твита.

Давайте авторизуемся в Twitter. Для этого нам нужно использовать ключи и секреты. Для этого мы используем следующий код, взятый из документов Tweepy. Ключ и секрет потребителя, а также токен доступа и секрет можно сгенерировать, создав приложение на портале разработчиков Twitter.

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

Итак, мы здесь. У нас 3200 твитов. Давайте двигаться дальше и посмотрим, что мы можем сделать с ними!

Анализ эмоций с помощью Senpy

Для анализа эмоций мы можем использовать Senpy. Senpy — это сервер анализа настроений и эмоций, который можно использовать в блокноте Jupyter с помощью Python. Он частично финансируется за счет MixedEmotions, набора инструментов с открытым исходным кодом для анализа эмоций¹. Конечная точка, которую мы используем, использует DepecheMood. Вот как выглядит код:

Вот пример JSON, который является ответом от сервера Senpy.

ОК, круто. У нас есть твиты, а также анализ эмоций. Давайте поместим все в кадр данных Pandas, чтобы мы могли с ним работать. Как только мы получим ответ от Senpy для каждого загруженного нами твита, мы заполним соответствующий столбец, содержащий интенсивность каждой эмоции, который будет выглядеть следующим образом:

Честно? Это была трудная часть. Код для синтаксического анализа объектов в JSON и заполнения фрейма данных потребовал много работы по сравнению с другими задачами.

Датафрейм также содержит исходный твит, но из соображений конфиденциальности он не показан на скриншоте и не будет обнародован.

Визуализация данных

Что ж, давайте посмотрим, что мы можем визуализировать здесь. Для построения кадра данных Pandas мы используем Seaborn. Seaborn — это удивительный пакет, который может создавать все виды потрясающе красивых визуализаций. Здесь у нас есть несколько диаграмм рассеяния. Поскольку для каждого момента времени существует множество точек, мы рисуем линию, используя функцию линейного графика, чтобы лучше понять, что происходит. Кроме того, вот код, используемый для отображения всех эмоций в подсюжетах, а также самих сюжетов.

Ладно, вау. Сначала посмотрим на строки. Похоже, благоговение, раздражение и страх немного выше по сравнению с другими эмоциями. Таким образом, можно сделать вывод, что эти эмоции немного более доминируют в социальных сетях. Да, конечно. Это не совсем то, что мы бы назвали надежными данными. На самом деле даже не близко. Мы не можем гарантировать, что выборка собрана случайным образом из какой-либо совокупности, и мы не знаем фактического содержания твитов. Мы ни в коем случае не можем предположить, что эти эмоции преобладают в Твиттере, но стоит отметить, что в социальных сетях есть динамика, которая может быть отражена в этих данных.

Итак, перейдем к визуально очевидному: все эмоциональные измерения довольно стабильны на графике, кроме одного. Страх кажется повсюду. У него явно более широкий диапазон, чем у других эмоций. Кроме того, в нем больше случаев, которые имеют чрезвычайно высокую эмоциональную интенсивность, то есть экстремальные значения. Как на самом деле. Гораздо больше. Просто представьте себе коробочную диаграмму, визуализирующую диапазон для каждой эмоции. Ах, хватит воображать. Я вас прикрыл:

Обратите внимание, что диапазон оси Y установлен не на (0, 1), как это было раньше, а на (0, 0,5), поэтому несколько случаев экстремальных значений интенсивности для страха выпал из графика. Но вау. Посмотрите на страх идти.

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

Серую таблицу не совсем легко интерпретировать. Конечно, отсутствие визуальных стимулов как бы защищает вас от чрезмерной чувствительности к корреляции, обозначенной яркими цветами, но читать ее тоже не совсем легко. Давайте сделаем его немного более читабельным, изобразив все с помощью тепловой карты. В версии пакетов, которые я использую, тепловая карта по умолчанию немного обрезана, поэтому нам нужно исправить это, вручную установив предел оси Y.

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

С другой стороны, кажется, что гнев и раздражение идут рука об руку — вроде как. Это рисует чуть более подробную картину того, что происходит за кулисами. Теперь не забывайте: это корреляции. Мы не можем прямо вывести из этого какую-либо причинно-следственную связь. Кроме того, если вы хотите применить статистические тесты, такие как корреляция Пирсона или Спирмена, к любому набору данных, необходимо заранее выполнить определенные критерии, например проверить, являются ли данные отношениями, интервалами или порядковыми данными. Прямо сейчас мы просто предполагаем, что они выполняются, даже если это не так, так что опять же — недоверие.

Итак, в чем дело?

После количественного анализа сверху я хотел понять, что происходит на более качественном уровне, поэтому я взял случайно выбранные твиты из фрейма данных и прочитал настоящий твит. Вы знаете, как это чувствовалось? Как будто люди были в замешательстве. Некоторые утверждают, что у них был точно такой же коронавирус много лет назад, некоторые жалуются на бессвязную информацию, обнародованную властями, некоторые просто не понимают, что происходит в мире. В заключение все указывает на это:

Люди, кажется, реагируют со страхом, а иногда и гневом на ситуацию, которая далека от контроля, и сбиты с толку дезинформацией и кликбейтными СМИ. В такой ситуации необходимо принимать кардинальные меры. Очевидно, мы не извлекли уроков из прошлого. К сожалению, правительства стран мира не были готовы к такой вспышке.

Но одна вещь, которую сравнительно легко реализовать в наши дни и которая абсолютно необходима для предотвращения паники, оказалась слишком короткой: образование.

Самое простое, что мы все можем сделать для обучения и защиты себя и друг друга, — это слушать людей, которые действительно знают, о чем говорят, когда речь идет о вирусных инфекциях: врачей, медсестер и специалистов в области общественного здравоохранения.

Подведение итогов

Социальные сети, особенно Twitter, — прекрасный инструмент для сбора данных в исследовательских целях. Независимо от контекста вашей работы. Будь то научное сообщество, агентство или частный проект, серфинг по волне API социальных сетей отвечает на множество вопросов, заставляет вас задавать еще больше и лучше и дает вам возможность проводить исследования с огромными объемами данных, не выходя из вашей спальни. .

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

Если вам понравилось то, что вы прочитали, рассмотрите возможность подписаться на меня в Instagram, чтобы получить больше контента, сделанного с любовью, а также поделиться этой статьей со своими друзьями, семьей и коллегами. Будьте осторожны, избегайте обезвоживания.

Дополнительные источники

  1. П. Буителаар и др., «Смешанные эмоции: набор инструментов с открытым исходным кодом для мультимодального анализа эмоций», в IEEE Transactions on Multimedia, vol. 20, нет. 9, стр. 2454–2465, сентябрь 2018 г.