Обзор гражданской войны в Сирии

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

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

Конфликт в Сирии превратился из мирных протестов против правительства в 2011 году в насильственные повстанческие действия, охватившие многие другие страны. Отчасти это гражданская война правительства против народа; отчасти религиозная война, в которой секта меньшинства президента Асада, связанная с боевиками из Ирана и Хизбаллы в Ливане, противостоит суннитским повстанческим группам; и все чаще опосредованная война с участием России и Ирана против Соединенных Штатов и их союзников. Что бы это ни было, на данный момент оно унесло жизни более 500 000 человек, привело к перемещению половины населения страны (+7 000 000) и способствовало подъему ИГИЛ. "Ссылка на сайт"

О наборе данных

Я большой поклонник проектов с открытым исходным кодом и отдачи сообществу. В своем первом сообщении в блоге из этой серии я рассказал о том, как связаться с отдельными лицами и компаниями для получения наборов данных. Благодаря исследованиям мне посчастливилось связаться с человеком из Финляндии по имени Даниэль Заутнер. Дэниел ранее исследовал сирийские повстанческие общины в Твиттере и проанализировал программу ЦРУ по противотанковым ракетам TOW. ЦРУ разработало план по предоставлению ракет повстанческим группам, а взамен повстанцы должны были загрузить на YouTube видео о том, как они используют оружие. Подробнее о программе можно прочитать [здесь] и [здесь]. Дэниел смог помочь мне с моим исследованием и предоставил мне свой набор данных Twitter. Я особенно хочу поблагодарить Дэниела за его помощь, и я надеюсь, что мы сможем встретиться в будущем за напитками или кофе.

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

Понимание данных

Поскольку набор данных мне неизвестен, мне нужно провести базовый анализ. Мне нужно решить, что важно для анализа, и я хочу ознакомиться с данными. Чтобы помочь мне понять данные, я рассмотрю следующее:

  • Насколько велик набор данных?
  • Какие атрибуты у него есть?

Во-первых, исследование набора данных. Нам нужно решить, что важно для анализа. Каждый объект JSON твита содержит много информации, и мне нужно выяснить, какие именно атрибуты я хочу исследовать. Я хочу сократить набор данных, чтобы определить, какие данные действительно полезны.

Распечатать пример твита

[{'_id': {'$oid': '595e82d713bbf01307babbba'}, 'created_at': {'$date': '2017-07-06T18:34:37.000Z'}, 'id': 8.830314454338519e+17, 'id_str': '883031445433851904', 'text': 'RT @rishibagree: Distance From Delhi to Syria - 3600 Km\nDistance From Delhi to #Basirhat WB-1100 km\n\nGuess where did @ndtv Reporters… ', 'source': '<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>', 'truncated': False, 'in_reply_to_status_id': None, 'in_reply_to_status_id_str': None, 'in_reply_to_user_id': None, 'in_reply_to_user_id_str': None, 'in_reply_to_screen_name': None, 'user': {'id': 94272634, 'id_str': '94272634', 'name': 'Oh my god!', 'screen_name': 'AnxJain', 'location': None, 'url': None, 'description': None, 'protected': False, 'verified': False, 'followers_count': 80, 'friends_count': 51, 'listed_count': 0, 'favourites_count': 6708, 'statuses_count': 4096, 'created_at': 'Thu Dec 03 06:37:58 +0000 2009', 'utc_offset': None, 'time_zone': None, 'geo_enabled': False, 'lang': 'en', 'contributors_enabled': False, 'is_translator': False, 'profile_background_color': 'C0DEED', 'profile_background_image_url': 'http://abs.twimg.com/images/themes/theme1/bg.png', 'profile_background_image_url_https': 'https://abs.twimg.com/images/themes/theme1/bg.png', 'profile_background_tile': False, 'profile_link_color': '1DA1F2', 'profile_sidebar_border_color': 'C0DEED', 'profile_sidebar_fill_color': 'DDEEF6', 'profile_text_color': '333333', 'profile_use_background_image': True, 'profile_image_url': 'http://pbs.twimg.com/profile_images/858923442631974912/yqngwcC2_normal.jpg', 'profile_image_url_https': 
...

Загрузка примеров твитов в excel

Иногда работа с Excel необходима для удобочитаемости, и в этом случае это так. Я написал инструмент, который принимает n твитов в формате JSON, перемещает данные твитов по вертикали и записывает каждый твит на отдельную вкладку Excel. Это поможет мне лучше понять структуру объекта JSON.

Отобразить образец Excel

Общее количество твитов и атрибутов столбцов

Total count of tweets 2853841
['_id.$oid', 'contributors', 'coordinates', 'created_at.$date', 'entities.hashtags', 'entities.symbols', 'entities.urls', 'entities.user_mentions', 'favorite_count', 'favorited', 'filter_level', 'geo', 'id', 'id_str', 'in_reply_to_screen_name', 'in_reply_to_status_id', 'in_reply_to_status_id_str', 'in_reply_to_user_id', 'in_reply_to_user_id_str', 'is_quote_status', 'lang', 'place', 'retweet_count', 'retweeted', 'retweeted_status.contributors', 'retweeted_status.coordinates', 'retweeted_status.created_at', 'retweeted_status.display_text_range', 'retweeted_status.entities.hashtags', 'retweeted_status.entities.symbols', 'retweeted_status.entities.urls', 'retweeted_status.entities.user_mentions', 'retweeted_status.extended_tweet.display_text_range', 'retweeted_status.extended_tweet.entities.hashtags', 'retweeted_status.extended_tweet.entities.media', 'retweeted_status.extended_tweet.entities.symbols', 'retweeted_status.extended_tweet.entities.urls', 'retweeted_status.extended_tweet.entities.user_mentions', 'retweeted_status.extended_tweet.extended_entities.media', 'retweeted_status.extended_tweet.full_text', 'retweeted_status.favorite_count', 'retweeted_status.favorited', 'retweeted_status.filter_level', 'retweeted_status.geo', 'retweeted_status.id', 'retweeted_status.id_str', 'retweeted_status.in_reply_to_screen_name', 'retweeted_status.in_reply_to_status_id', 'retweeted_status.in_reply_to_status_id_str',
...

Удаление ретвитов из моего набора данных

Во-первых, конденсационная часть. Я обнаружил, что большая часть данных была получена из ретвитов. Мало того, что большинство твитов являются ретвитами, но и размер данных резко увеличился для ретвитов. Например, если я сплющу исходный твит, у меня будет всего около 60 атрибутов. Однако, если я сплющу ретвит, у меня будет около 200 атрибутов. Для этого анализа я собираюсь сосредоточить свои усилия на оригинальных и уникальных твитах. Я предполагаю, что я могу найти более подходящую информацию из уникальных твитов и позже включить ретвиты.

Total count of tweets without retweets: 1160088

Определите атрибуты твитов и сохраните их в файл CSV.

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

  • Многим нравится видеть все данные сразу в виде CSV — есть удобные способы распечатать их в Python, но это легче усвоить.
  • CSV — отличный формат для использования, если вам нужно поделиться данными с людьми, которые не умеют программировать, поскольку они могут открыть их в любом блокноте или программе для работы с электронными таблицами, не требуя кодирования.
  • Если вы хотите продолжить анализ с Python, но в другом файле проекта, вы всегда можете использовать словарь или прочитать в CSV в пару строк кода

Атрибуты твитов для анализа

Я собираюсь определить все важные атрибуты для этого проекта и перечислить их ниже. Это будет частью раздела очистки/обработки данных. Я сослался на официальную документацию Twitter API, чтобы понять все поля и определить, какую информацию я хочу извлечь из каждого твита. Вот ссылка.

Атрибуты

Объект user содержит общедоступные метаданные учетной записи Twitter и описывает учетную запись. В разделе entities представлены массивы общих вещей, включенных в твиты: хэштеги, упоминания пользователей, ссылки, биржевые тикеры (символы), опросы Twitter и прикрепленные медиафайлы. Вот пример атрибутов твитов, которые я извлекаю:

  • created_at: время в формате UTC, когда был создан этот твит.
  • id: целочисленное представление уникального идентификатора этого твита.
  • id_str: строковое представление уникального идентификатора этого твита.
  • text: Фактический текст твита в кодировке UTF-8.
  • source: Утилита, используемая для публикации твита в виде строки в формате HTML.
  • retweet_count: Количество ретвитов твита.
  • favorite_count: Сколько раз твит был добавлен в избранное.
  • lang: если присутствует, указывает идентификатор языка BCP 47, соответствующий языку, обнаруженному машиной в тексте твита, или und, если язык не может быть обнаружен.
  • coordinates: представляет географическое местоположение этого твита, сообщаемое пользователем или клиентским приложением.

Функции очистки данных

Записать данные в файл CSV

Изучение и визуализация набора данных

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

Вот мои шаги:

  1. Загрузите чистый набор данных во фрейм данных, чтобы обобщить основные характеристики набора данных.
  2. Создавайте визуализации для быстрого и простого просмотра большинства важных функций набора данных.
  3. Определите переменные, которые, вероятно, будут иметь интересные наблюдения.
  • Каковы наши сроки?
  • Топ пользователей по подписчикам?
  • Лучшие хэштеги по количеству?
  • Основные источники, используемые для отправки твитов?

Загрузить файл CSV в фрейм данных

Сроки дат твитов

Давайте посмотрим на временную шкалу нашего набора данных. Каковы даты и подсчеты во времени в данных? Какие события произошли за этот промежуток времени?

Вот список событий, произошедших за этот период времени:

Июль 2017 г.

  • 1 July Войска сирийской армии полностью отбили район карьеров к западу от города Баас в Кунейтре, сведя на нет все достижения повстанцев во время наступления.
  • 4 July Пятый раунд переговоров, организованный Россией, Турцией и Ираном, проходит в Астане, Казахстан, на котором обсуждается введение безопасных зон в Сирии.
  • 11 July Сирийская обсерватория по правам человека подтверждает смерть Абу Бакра аль-Багдади, лидера Исламского государства.
  • 14 July Сирийская арабская армия утверждает, что командир 107-го полка Свободной сирийской армии погиб в результате взрыва придорожной бомбы, заложенной САА в Дераа.
  • 29 July Исламское Государство Ирака и Леванта теряет 6000 квадратных километров в течение первого месяца 4-го года своего создания.
  • Август 2017 г.
  • 3 August Сирийское правительство обстреливает повстанческие города в Восточной Гуте.
  • 4 August Почти 8000 сирийских беженцев и боевиков прибыли в контролируемую повстанцами центральную часть Сирии из Ливана в рамках соглашения о прекращении огня между «Хизбаллой» и «Фатех аш-Шам».

Лучшие источники твитов

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

Эта диаграмма показывает нам, что самая важная часть твита отправляется через веб-клиент Twitter, iPhone и Android и менее 3% через Instagram и другие устройства. Я заметил, что IFTTT составляет около 6% устройств.

Что такое IFTTT?
Он назван в честь условного оператора программирования «если это, то это». Компания предоставляет программную платформу, которая соединяет приложения, устройства и сервисы от разных разработчиков, чтобы запускать одну или несколько автоматизаций, связанных с этими приложениями, устройствами и сервисами. Это действительно удивительно для меня и может быть признаком ботов в Твиттере.

Лучшие хештеги твитов

Неудивительно, что некоторые из самых популярных хэштегов — «Сирия», «ИГИЛ», «Иран» и «Ирак». Это отличный показатель того, что мои темы данных связаны с сирийской войной. Однако я заметил, что один из хэштегов на арабском языке. Позже я расскажу, как я планирую обрабатывать свои данные на иностранном языке.

Топ пользователей твиттера по подписчикам

Типы медиа для твитов

Языки твитов

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

Большинство моих данных на английском языке, и это здорово. Однако, учитывая, что моя тема сосредоточена на Ближнем Востоке, я хочу обязательно включить эти данные (например, арабский). Чтобы получить значимые результаты с помощью обработки текста, мне нужно перевести все мои текстовые данные на один язык (например, на английский). Google Translation API очень прост в настройке и использовании. Однако это не бесплатно, поэтому, если вы делаете какие-либо вызовы API, убедитесь, что вы предприняли шаги, чтобы оценить, сколько это будет стоить. Особенно для большого набора данных.

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

Анализ настроений с помощью textblob

Что такое анализ тональности? Анализ тональности относится к задаче классификации в сообществе обработки естественного языка (NLP), целью которой обычно является определение полярности (положительная/отрицательная) входного текста. Принимая во внимание, что анализ субъективности имеет дело с обнаружением частных состояний (мнений, эмоций, настроений, убеждений, предположений), классифицируя текстовый ввод как объективный/субъективный.

Что такое textblob? Я не эксперт НЛП, но недавно обнаружил библиотеку под названием TextBlob. Мне было очень легко начать. Возможно, вы захотите прочитать документы и посмотреть, насколько это подходит для вашего проекта. Вот ссылка.

TextBlob — это библиотека Python для обработки текстовых данных. Он предоставляет простой API для погружения в общие задачи обработки естественного языка (NLP), такие как тегирование частей речи, извлечение именных словосочетаний, анализ тональности, классификация, перевод и многое другое.

Есть ли у textblob какие-либо преимущества или отличия от набора инструментов естественного языка (NLTK)?

  • У меня не так много опыта, но я обнаружил, что TextBlob гораздо проще подобрать и использовать, чем NLTK.
  • Он построен на основе NLTK и предоставляет более чистый API, который поможет вам быстро выполнить свою работу.

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

Следующие шаги

Что дальше? У меня есть много данных и отличное начало для анализа гражданской войны в Сирии. Однако данных всегда не хватает! Поскольку мой набор данных относится к прошлому лету, я попытаюсь сократить разрыв между прошлым летом и сегодняшним днем ​​для подмножества пользователей твиттера. Я также собираюсь поработать над переводом текста на английский язык. Для моего исследования, вот некоторые области, которые я собираюсь исследовать:

  • Классифицировать темы в твите
  • Проанализируйте отношение к различным средствам массовой информации, например, к картине о войне (например, картинка злит или огорчает людей?)
  • Как эмоциональное состояние людей влияет на их решение о том, публиковать твиты или нет?
  • Как отношение людей к типам СМИ влияет на их решение о том, взаимодействовать с различными типами СМИ или нет?

Я очень рад начать работу над аспектом науки о данных моего проекта.