Автор оригинала: Anthony Carnevale.
Работа с данными JSON; втягивание их и чтение-это то, с чем я значительно боролся, когда начинал кодировать. Эта статья предназначена для тех, кто сталкивается с этой проблемой или просто хочет иметь другую точку зрения.
Недавно мне было предложено создать анализ настроений из данных Twitter; поэтому я создал эту конечную точку api, и ее можно использовать для этого примера.
Для доступа к этим данным нам нужны библиотеки json и request или мы можем использовать встроенный метод pandas read_json (). Мы не будем использовать метод pd.read_json (), потому что это хорошая практика и полезно знать, что происходит при использовании данных вне панд, например, в js. Переход от Python к Javascript изучение того, как работать с объектами json более подробно, значительно облегчит сбор js. На практике очевидно, что было бы более разумно просто использовать метод read_json, а затем передать соответствующий параметр “orient”. https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_json.html
import json, requests response = requests.get("http://www.sportsbookanalysis.com/restapi/tweets/?format=json") print(response)
Этот <Ответ [200]> был одним из моих первых “gothas”, потому что я вижу это, однако это просто дает нам код статуса 200, который хорошо видеть в нашем случае. Однако для доступа к фактическим данным нам нужен файл .json()
response = requests.get("http://www.sportsbookanalysis.com/restapi/tweets/?format=json").json() # Dont print this as its fairly large
Отсюда мы можем видеть, что происходит с данными. Это может быть удар или промах, но первое, что я пытаюсь сделать, это просто распечатать ключи данных. Если это не удается, это означает, что данные находятся в списке, поэтому мы можем использовать индексацию
print(response.keys()) #AttributeError: 'list' object has no attribute 'keys' print(len(response)) print(response[1250]) #output {'id': 42750, 'team': 'NYG', 'sport': 'NFL', 'tw_time': '2019-07-27T11:00:26Z', #'tweet': "Giants' Saquon Barkley rips Daniel Jones critics: You don't know football #nyg #giants #NFL https://t.co/5T6oz6sRc3", #'score': -0.296, 'followers': 3688} print(response[1250].keys()) #dict_keys(['id', 'team', 'sport', 'tw_time', 'tweet', 'score', 'followers']) #and finally we can do soemthing like for i in response[1250].keys(): print("{}:{}".format(i,response[1250][i])) #output id:42750 #team:NYG #sport:NFL #tw_time:2019-07-27T11:00:26Z #tweet:Giants' Saquon Barkley rips Daniel Jones critics: You don't know football #nyg #giants #NFL https://t.co/5T6oz6sRc3 #score:-0.296 #followers:3688
Идя еще дальше, мы можем извлечь все данные команды и оценки в отдельные списки, а затем назначить их пустым фреймам данных.
team = [] score = [] timeposted = [] for x in response: team.append(x['team']) score.append(x['score']) timeposted.append(x['tw_time']) df = pd.DataFrame() # create empty dataframe df['score'] = score df['team'] = team df['timeposted'] = timeposted ###add new columns based off lists print(df.head())