Лучший способ загрузить большие наборы данных в Python? - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь использовать Socrata API для загрузки этого набора данных по 311 вызовам в Нью-Йорке C с 2010 года. Набор данных содержит 22 миллиона строк. Я никогда раньше не работал с API, и не уверен, что лучше всего загрузить этот набор данных. Я написал фрагмент кода ниже, чтобы получить данные в виде кусков по 2000 строк, но, согласно моим расчетам, это займет 10 000 минут. , так как каждый кусок 2000 занимает одну минуту.

data_url = 'data.cityofnewyork.us'
dataset = 'erm2-nwe9'
app_token = app_token
client = Socrata(data_url, app_token)
client.timeout = 6000

record_count = client.get(dataset, select='COUNT(*)')

start = 0
chunk_size = 2000
results = []
while True:
    print(start)
    results.extend(client.get(dataset, limit=chunk_size))
    start = start+chunk_size
    if (start > int(record_count[0]['COUNT'])):
        break

df=pd.DataFrame(results)

Мне не нужны все данные; Я мог бы просто использовать данные за 2015 год, хотя я не уверен, как это указать в запросе. Столбец «Данные» имеет формат «2020-04-27T01: 59: 21.000». Как я могу go получить набор данных на период после 2015 года, если получение всего набора данных нецелесообразно? В целом, 22 миллиона записей считаются слишком большими для запроса? И вообще, лучше ли разбивать запрос на куски или пытаться получить набор данных за один go, используя get_all ()?

1 Ответ

0 голосов
/ 29 апреля 2020

Есть несколько вариантов. Во-первых, вы можете захотеть взглянуть на библиотеку «sodapy» , которая поддерживает более простую загрузку с порталов данных Socrata. Он имеет некоторые встроенные средства обработки для больших наборов данных, а именно: paging .

Во-вторых, вы можете использовать API для фильтрации данных, включая даты * 1008. *. Существует множество примеров, включая этот ответ , которые помогут вам начать работу с запросом. Вы можете комбинировать это с "sodapy".

...