自2010年以来,我一直在尝试使用Socrata API在纽约311次调用中下载此数据集。数据集有2200万行。我以前从未使用过API,也不确定下载此数据集的最佳方式-我在下面编写了一段代码,以获取2000行的数据块,但根据我的计算,这将需要10000分钟,因为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”。如果获取整个数据集是不合理的,我如何获取2015年后的数据集?总的来说,2200万条记录是否被认为是太大的请求?一般来说,使用get_all()将请求分成块,或者尝试一次性获取数据集,这是最佳做法吗
有几个选择。首先,您可能想看看"sodapy" library,它支持从Socrata数据门户更轻松地下载。它内置了一些用于较大数据集的后端处理,即paging
其次,您可以利用API来过滤数据,包括dates。有很多例子,包括this answer,可以帮助您开始查询。你也可以把它和“苏打水”结合起来
相关问题 更多 >
编程相关推荐