SODA API Filtering
Я пытаюсь отфильтровать открытую базу данных ny gov с помощью SODA API. Я следую документам о том, как фильтровать, но он возвращает пустой фрейм данных.
# noinspection PyUnresolvedReferences
import numpy as np
# noinspection PyUnresolvedReferences
import pandas as pd
# noinspection PyUnresolvedReferences
from sodapy import Socrata
clientNYgov = Socrata('data.ny.gov', None)
Здесь я пытаюсь найти результаты только в Нью-Йорке.
databaseM = clientNYgov.get('yg7h-zjbf.csv?business_city=NEW+YORK')
dfDatabaseM = pd.DataFrame.from_records(databaseM)
dfDatabaseM.to_csv('Manhattan Agents.csv')
print(dfDatabaseM)
Но вот пустой вывод:
0 1 ... 9 10
0 business_address_1 business_address_2 ... license_number license_type
[1 rows x 11 columns]
Process finished with exit code 0
Пожалуйста, дайте мне знать, если есть проблема с тем, как я фильтрую, не совсем уверен, что здесь происходит не так. Большое спасибо заранее!
2 ответа
Socrata использует конечную точку json для экспорта файлов через API. Он находится в верхнем правом углу набора данных при выборе API. Для этого решения я использую только запросы на получение данных. Модуль Soda удобен в использовании, но работает так же, как запрос.
import pandas as pd
import requests
data=requests.get('http://data.ny.gov/resource/yg7h-zjbf.json?$limit=50000&business_city=NEW YORK').json()
df=pd.DataFrame.from_records(data)
df
Есть два подхода к этому с помощью фильтров.
Способ 1
Это можно сделать с помощью
Socrata()
передавая фильтры с помощью SQL в
query
ключевое слово в
get()
метод экземпляра
Socrata
клиент. Вам понадобится токен приложения . Если вы не используете токен, ваши запросы будут регулироваться . Чтобы избежать удушения, зарегистрируйте учетную запись socrata и создайте свой токен приложения.
query = f"""SELECT * WHERE business_city="NEW YORK" LIMIT 50000"""
client = Socrata("data.ny.gov", <YOUR-APP-TOKEN-HERE>)
results = client.get("yg7h-zjbf", query=query)
df_socrata = pd.DataFrame.from_records(results)
Способ 2
Использование конечной точки JSON (то же, что и ответ @Joseph Gattuso )
data = requests.get(
"http://data.ny.gov/resource/yg7h-zjbf.json?$limit=50000&business_city=NEW YORK"
).json()
df = pd.DataFrame.from_records(data)
Сравнение результатов. Убедитесь, что оба метода возвращают одинаковый результат.
assert df_socrata.equals(df)