Вступление
Одна вещь, которая нравится разработчикам Python, - это огромное количество ресурсов, разработанных его большим сообществом. Интерфейсы программирования приложений (API), созданные на Python, - обычное дело для веб-сайтов. Трудно представить, что какой-либо популярный веб-сервис не создал бы библиотеку Python API для облегчения доступа к своим сервисам. Несколько идей , таких API , для некоторых из наиболее популярных веб - сервисов можно найти здесь . Фактически, «оболочка Python» - более правильный термин, чем «Python API», потому что веб-API обычно предоставляет общий интерфейс прикладного программирования, в то время как библиотеки для конкретных языков программирования создают код для «обертывания» его в простые в использовании функции. . В любом случае, в этой статье мы будем использовать оба термина как синонимы.
В этом сообщении блога мы сконцентрируемся на Twitter API , покажем, как настройка ваших учетных данных происходит с Twitter, и сравним несколько оболочек Python на основе взаимодействия с сообществом. Затем мы покажем несколько примеров использования Twitter API для поиска твитов и создания потока твитов в реальном времени по определенной теме. Наконец, мы исследуем сохраненные данные.
Обзор API Twitter
На платформе Twitter есть множество API-интерфейсов, с которыми могут взаимодействовать разработчики программного обеспечения, с максимальной возможностью создания полностью автоматизированных систем, которые будут взаимодействовать с Twitter. Хотя эта функция может принести пользу компаниям, черпая идеи из данных Twitter, она также подходит для небольших проектов, исследований и развлечений. Вот несколько наиболее заметных API, предоставляемых Twitter:
- Твиты: поиск, публикация, фильтрация, взаимодействие, потоковая передача и т. Д.
- Реклама: управление кампанией и аудиторией, аналитика.
- Прямые сообщения (все еще в бета-версии): отправка и получение, прямые ответы, приветственные сообщения и т. Д.
- Учетные записи и пользователи (бета): управление учетными записями, взаимодействие с пользователями.
- Медиа: загрузка и доступ к фотографиям, видео и анимированным GIF-файлам.
- Тенденции: актуальные темы в определенном месте.
- Гео: информация об известных местах или местах рядом с местоположением.
API-интерфейсы Twitter предоставляют гораздо больше возможностей, которые не включены в этот список. Twitter также постоянно расширяет спектр своих услуг, время от времени добавляя новые API и обновляя существующие.
Получение учетных данных
Перед использованием Twitter API вам сначала понадобится учетная запись Twitter и некоторые учетные данные. Процесс получения учетных данных со временем может измениться, но в настоящее время он выглядит следующим образом:
- Посетите страницу управления приложениями по адресу https://apps.twitter.com/ и войдите в свою учетную запись Twitter.
- Нажмите кнопку «Создать новое приложение», введите данные и согласитесь с Условиями использования.
- Перейдите в раздел «Ключи и токены доступа» и запишите свой потребительский ключ и секрет.
- В этом же разделе нажмите кнопку «Создать мой токен доступа».
- Запишите свой токен доступа и секрет токена доступа.
И это все. Ключ / секрет потребителя используется для аутентификации приложения, использующего Twitter API, а токен / секрет доступа аутентифицирует пользователя. Все эти параметры следует рассматривать как пароли и не включать в код в виде обычного текста. Один из подходящих способов - сохранить их в файле JSON «twitter_credentials.json» и при необходимости загружать эти значения из кода.
import json
# Enter your keys/secrets as strings in the following fields
credentials = {}
credentials['CONSUMER_KEY'] = ...
credentials['CONSUMER_SECRET'] = ...
credentials['ACCESS_TOKEN'] = ...
credentials['ACCESS_SECRET'] = ...
# Save the credentials object to file
with open("twitter_credentials.json", "w") as file:
json.dump(credentials, file)
Python-оболочки
Python - один из языков программирования с наибольшим количеством разработанных оболочек для Twitter API. Поэтому их сложно сравнивать, если вы не использовали каждый из них какое-то время. Возможно, хороший способ выбрать правильный инструмент - это изучить их документацию и посмотреть на возможности, которые они предлагают, и на то, как они подходят к специфике вашего приложения. В этой части мы сравним различные обертки API, используя участие сообщества Python в их проектах GitHub. Вот несколько подходящих показателей для сравнения: количество участников , количество полученных звезд , количество наблюдателей , зрелость библиотеки за период с момента первого выпуска и т. Д.
Таблица 1 : Библиотеки Python для Twitter API, упорядоченные по количеству полученных звезд.
Библиотека # участников # звезды # наблюдателей Зрелость пухлый 135 4732 249 ~ 8,5 лет Инструменты Python для Twitter 60 2057 158 ~ 7 лет python-twitter 109 2009 г. 148 ~ 5 лет Twython 73 1461 100 NA TwitterAPI 15 424 49 ~ 4,5 года TwitterПоиск 8 241 29 ~ 4,5 года
В приведенной выше таблице перечислены некоторые из самых популярных библиотек Python для API Twitter. Теперь давайте воспользуемся одним из них для поиска твитов, сбора данных и исследования.
Примеры Twython
Мы выбрали библиотеку twython из-за ее разнообразных функций, согласованных с различными API-интерфейсами Twitter, ее зрелости - хотя информации о том, когда была опубликована ее первая версия, нет, есть информация, что версия 2.6.0 появилась около 5 лет назад, и ее поддержка потоковой передачи. твиты. В нашем первом примере мы будем использовать Search API для поиска твитов, содержащих строку «learn python», а позже мы покажем более реалистичный пример с использованием Twitter Streaming API .
API поиска
В этом примере мы создадим запрос для Search API с ключевым словом для
поиска «learn python», который вернет самые популярные общедоступные
твиты за последние 7 дней. Обратите внимание: поскольку наше ключевое
слово состоит из двух слов, «learn» и «python», они оба должны
появляться в тексте твита, и не обязательно в виде непрерывной фразы.
Сначала установим библиотеку. Самый простой способ - использовать pip
, но другие варианты также перечислены в
документации
по установке.
$ pip install twython
На следующем шаге мы импортируем класс Twython, создадим его объект и
создадим наш поисковый запрос. Мы будем использовать только четыре
аргумента в запросе: q
, result_type
, count
и lang
соответственно для ключевого слова поиска, типа, count и языка
результатов. Twitter также определяет другие аргументы для точной
настройки поискового запроса, которые можно найти
здесь
.
# Import the Twython class
from twython import Twython
import json
# Load credentials from json file
with open("twitter_credentials.json", "r") as file:
creds = json.load(file)
# Instantiate an object
python_tweets = Twython(creds['CONSUMER_KEY'], creds['CONSUMER_SECRET'])
# Create our query
query = {'q': 'learn python',
'result_type': 'popular',
'count': 10,
'lang': 'en',
}
Наконец, мы можем использовать наш объект Twython для вызова search
,
который возвращает словарь search_metadata
и statuses
- запрошенные
результаты. Мы рассмотрим только statuses
и сохраним часть всей
информации в pandas
, чтобы представить ее в таблице.
import pandas as pd
# Search tweets
dict_ = {'user': [], 'date': [], 'text': [], 'favorite_count': []}
for status in python_tweets.search(**query)['statuses']:
dict_['user'].append(status['user']['screen_name'])
dict_['date'].append(status['created_at'])
dict_['text'].append(status['text'])
dict_['favorite_count'].append(status['favorite_count'])
# Structure data in a pandas DataFrame for easier manipulation
df = pd.DataFrame(dict_)
df.sort_values(by='favorite_count', inplace=True, ascending=False)
df.head(5)
Дата избранное_count текст Пользователь
1 Пт 12 янв 21:50:03 +0000 2018 137 2017 год был годом Python. Мы собирались уехать ... Codecademy 3 Пн 08 янв 23:01:40 +0000 2018 137 Пошаговое руководство по изучению #Python для #DataS ... KirkDBorne 4 Пн 08 янв 11:13:02 +0000 2018 109 Resetter - это новый инструмент, написанный на Python и п ... linuxfoundation 8 Сб 06 янв 16:30:06 +0000 2018 96 Мы с гордостью сообщаем, что на этой неделе у нас ... DataCamp 2 Вс 07 янв 19:00:36 +0000 2018 94 Изучите программирование на Python с помощью Python ... скромный
Итак, мы получили несколько интересных твитов. Обратите внимание, что это самые популярные твиты, содержащие слова «учиться» и «питон» за последние 7 дней. Чтобы просмотреть данные в истории, вам необходимо приобрести план Search API Premium или Enterprise.
Потоковый API
В то время как в предыдущем примере был показан одноразовый поиск, более
интересным случаем будет сбор потока твитов. Это делается с помощью API
потоковой
передачи Twitter, и Twython предлагает простой способ сделать это с
помощью
класса TwythonStreamer. Нам нужно будет определить класс MyStreamer
который наследует TwythonStreamer
а затем переопределить on_success
и on_error
следующим образом.
Метод on_success
вызывается автоматически, когда twitter отправляет
нам данные, а on_error
всякий раз, когда возникает проблема с API
(чаще всего из-за ограничений API Twitter). Добавленный метод
save_to_csv
- полезный способ сохранять твиты в файл.
Как и в предыдущем примере, мы не будем сохранять все данные в твите, а
будем сохранять только интересующие нас поля, такие как: используемые
хэштеги, имя пользователя, местоположение пользователя и текст самого
твита. В твите много интересной информации, так что не стесняйтесь
экспериментировать с ним. Обратите внимание, что мы сохраним
местоположение твита в профиле пользователя, которое может не
соответствовать текущему или реальному местоположению пользователя,
отправившего твит. Это связано с тем, что лишь небольшая часть
пользователей Twitter указывает свое текущее местоположение - обычно в
coordinates
данных твита.
from twython import TwythonStreamer
import csv
# Filter out unwanted data
def process_tweet(tweet):
d = {}
d['hashtags'] = [hashtag['text'] for hashtag in tweet['entities']['hashtags']]
d['text'] = tweet['text']
d['user'] = tweet['user']['screen_name']
d['user_loc'] = tweet['user']['location']
return d
# Create a class that inherits TwythonStreamer
class MyStreamer(TwythonStreamer):
# Received data
def on_success(self, data):
# Only collect tweets in English
if data['lang'] == 'en':
tweet_data = process_tweet(data)
self.save_to_csv(tweet_data)
# Problem with the API
def on_error(self, status_code, data):
print(status_code, data)
self.disconnect()
# Save each tweet to csv file
def save_to_csv(self, tweet):
with open(r'saved_tweets.csv', 'a') as file:
writer = csv.writer(file)
writer.writerow(list(tweet.values()))
Следующее, что нужно сделать, это создать экземпляр объекта MyStreamer
с нашими учетными данными, переданными в качестве аргументов, и мы будем
использовать filter
только для сбора интересующих нас твитов. Мы
создадим наш фильтр с track
который предоставляет ключевые слова
фильтра, в нашем случае "питон". Помимо track
, есть больше
возможностей для точной настройки вашего фильтра, перечисленного в
основных параметрах потоковой
передачи
, таких как: сбор твитов от выбранных пользователей, языков,
местоположений и т. Д. Платные версии Streaming API предоставят гораздо
больше возможностей фильтрации .
# Instantiate from our streaming class
stream = MyStreamer(creds['CONSUMER_KEY'], creds['CONSUMER_SECRET'],
creds['ACCESS_TOKEN'], creds['ACCESS_SECRET'])
# Start the stream
stream.statuses.filter(track='python')
С помощью приведенного выше кода мы собрали данные примерно для 10 000 твитов, содержащих ключевое слово «python». В следующей части мы сделаем краткий анализ включенных хэштегов и местоположений пользователей.
Краткий анализ данных
Twitter API - это мощная вещь, очень подходящая для исследования общественного мнения, анализа рынка, быстрого доступа к новостям и других вариантов использования, которые может поддержать ваше творчество. Обычно после того, как вы тщательно собрали свои твиты, нужно проанализировать данные, где анализ тональности играет решающую роль в систематическом извлечении субъективной информации из текста. В любом случае, анализ настроений - это огромное поле, которое нужно рассмотреть в небольшой части сообщения в блоге, поэтому в этой части мы проведем только базовый анализ данных, касающихся местоположения и хэштегов, используемых людьми, которые пишут в Твиттере "python".
Обратите внимание, что цель этих примеров - просто показать, для чего могут быть использованы данные Twitter API - наша небольшая выборка твитов не должна использоваться для вывода выводов, потому что она не является хорошим представителем всей совокупности твитов или ее сроки сбора были независимыми и единообразными.
Сначала давайте импортируем наши данные из файла «saved_tweets.csv» и распечатаем несколько строк.
import pandas as pd
tweets = pd.read_csv("saved_tweets.csv")
tweets.head()
хэштеги текст Пользователь место расположения
0 ['IBM'] RT @freschesolution: Присоединяйтесь к нам ЗАВТРА с @OC ... rbrownpa NaN 1 [] pylocus 1.0.1: Пакет локализации https: // t .… pypi_updates2 NaN 2 [] humilis-push-processor 0.0.10: Humilis push ev ... pypi_updates2 NaN 3 ['Python', 'python', 'postgresql'] #Python Digest вышел! https: //t.co/LEmyR3yDMh ... Horstwilmes Zürich 4 [NeuralNetworks, Python, KDN] RT @kdnuggets: Руководство для начинающих по #NeuralNet ... гиодегаз Л'Акуила, ИТАЛИЯ
Какие самые распространенные хэштеги связаны с нашим ключевым словом
"python"? Поскольку все данные в нашем DataFrame представлены в виде
строк, включая скобки в hashtags
, чтобы получить список хэштегов, нам
нужно перейти от списка строк к списку списков, к списку хэштегов. Затем
мы будем использовать Counter
для подсчета записей хэштегов в нашем
списке и распечатать отсортированный список из 20 наиболее
распространенных хэштегов.
from collections import Counter
import ast
tweets = pd.read_csv("saved_tweets.csv")
# Extract hashtags and put them in a list
list_hashtag_strings = [entry for entry in tweets.hashtags]
list_hashtag_lists = ast.literal_eval(','.join(list_hashtag_strings))
hashtag_list = [ht.lower() for list_ in list_hashtag_lists for ht in list_]
# Count most common hashtags
counter_hashtags = Counter(hashtag_list)
counter_hashtags.most_common(20)
[('python', 1337),
('datascience', 218),
('bigdata', 140),
('machinelearning', 128),
('deeplearning', 107),
('django', 93),
('java', 76),
('ai', 76),
('coding', 68),
('100daysofcode', 65),
('javascript', 64),
('iot', 58),
('rstats', 52),
('business', 52),
('tech', 48),
('ruby', 45),
('programming', 43),
('cybersecurity', 43),
('angularjs', 41),
('pythonbot_', 41)]
Затем мы можем использовать местоположение пользователя, чтобы ответить
-
в каких регионах мира больше всего твитов о «питоне»? На этом этапе мы будем использовать
geocode
метод geopy библиотеки , которая возвращает координаты заданного входного местоположения. Чтобы визуализировать тепловую карту мира твитов, мы воспользуемся библиотекой gmplot. Напоминание: наши небольшие данные не являются реальным представителем мира.from geopy.geocoders import Nominatim import gmplot
geolocator = Nominatim()
Go through all tweets and add locations to ‘coordinates’ dictionary
coordinates = {’latitude’: [], ’longitude’: []} for count, user_loc in enumerate(tweets.location): try: location = geolocator.geocode(user_loc)
If coordinates are found for location
if location: coordinates[’latitude’].append(location.latitude) coordinates[’longitude’].append(location.longitude)
If too many connection requests
except: pass
Instantiate and center a GoogleMapPlotter object to show our map
gmap = gmplot.GoogleMapPlotter(30, 0, 3)
Insert points on the map passing a list of latitudes and longitudes
gmap.heatmap(coordinates[’latitude’], coordinates[’longitude’], radius=20)
Save the map to html file
gmap.draw(“python_heatmap.html”)
Приведенный выше код создал тепловую карту на следующем рисунке, показывающую более высокую активность в твитах типа "питон" в США, Великобритании, Нигерии и Индии. Обратной стороной описанного подхода является то, что мы не проводили никакой очистки данных; оказалось, что множество твитов, сгенерированных машиной, поступают из одного места или из нескольких мест, порождающих один и тот же твит. Конечно, эти образцы следует отбросить, чтобы получить более реалистичную картину географического распределения людей, твитирующих «питон». Второе улучшение - это просто сбор большего количества данных за более длительные и непрерывные периоды.
{.ezlazyload .img-responsive}
Ресурсы
Хотите узнать больше об использовании Python для доступа к Twitter API? Попробуйте пройти курс вроде Byte-Sized-Chunks: Twitter Sentiment Analysis в Python,{.udemy-link} чтобы глубже погрузиться в использование Twitter API для проектов по науке о данных с Python.
Выводы
В этом сообщении блога мы представили довольно скромную часть API Twitter. В целом Twitter - очень мощный инструмент для понимания общественного мнения, проведения исследований и анализа рынка, и поэтому его API-интерфейсы - отличный способ для предприятий создавать автоматизированные инструменты для получения информации, связанной с их объемом работы. Не только компании, но и частные лица также могут использовать API для создания творческих приложений.
Мы также перечислили несколько наиболее популярных оболочек Python, но важно отметить, что разные оболочки реализуют разные возможности API-интерфейсов Twitter. Поэтому следует выбирать оболочку Python в соответствии с ее назначением. В двух примерах, которые мы показали с API поиска и потоковой передачи, кратко описан процесс сбора твитов и некоторые возможные идеи, которые они могут извлечь. Смело создавайте сами!
Рекомендации
- « Наука о данных с нуля{.amazon-link} » Джоэла Груса (книга)
- Twitter API - документация
- библиотека
geopy
- веб-страница Pypi - библиотека
gmplot
- проект GitHub