Freebase上のすべての米国の郡とそのgoelocation(経度+緯度)を照会しようとしています。クエリが機能する場合があることに気付きましたが、他の試行では次のように返されます:<"リクエスト時にHttpError503...が"バックエンドエラー">を返しました。
クエリ結果の制限を変更しようとしましたが、クエリが失敗する制限が異なることがわかりました。「limit」:2900の場合に機能する場合もあれば、「limit」:1200の場合に上記のエラーを返す場合もあります。
これまでに書いたコードは次のとおりです。
itertoolsからisliceをインポートします
apiclientインポートディスカバリーから
apiclientインポートモデルから
jsonをインポートする
CREDENTIALSからFREEBASE_KEYをインポートします
パンダからインポートDataFrame、シリーズ
DEVELOPER_KEY = FREEBASE_KEY
model.JsonModel.alt_param = ""
freebase = Discovery.build('freebase'、'v1'、developerKey = DEVELOPER_KEY)
query_json = "" "
[{
"id":null、
「名前」:null、
"/ location / us_county / fips_6_4_code":[]、
"/ location / location / geolocation":{
「緯度」:null、
「経度」:null
}、
「制限」:3050
}] "" "。replace(" \ n "、" ")
query = json.loads(query_json)
応答=json.loads(freebase.mqlread(query = json.dumps(query))。execute())
結果=list()
islice(response ['result']、None)の結果の場合:
results.append({'id':result ['id']、
'名前':結果['名前']、
'latitude':float(result ['/ location / location / geolocation'] ['latitude'])、
'longitude':float(result ['/ location / location / geolocation'] ['longitude'])、
'fips':result ['/ location / us_county / fips_6_4_code']、
})
状態=DataFrame(results)
plt.scatter(states ["longitude"]、states ["latitude"])
割り当ての問題ではないようです。他の人は、Freebaseメーリングリストで同様の問題を指摘しています。http://lists.freebase.com/pipermail/freebase-discuss/2011-December/007710.html しかし、これは別の種類のデータなので、それらのソリューションは私が取り組んでいるものには適用できないようです。
[編集]カーソルを使用してデータを反復処理しましたが、正常に機能します。これが私が使用した最終的なコードです:
itertoolsからisliceをインポートします
apiclientインポートディスカバリーから
apiclientインポートモデルから
jsonをインポートする
CREDENTIALSからFREEBASE_KEYをインポートします
パンダからインポートDataFrame、シリーズ
DEVELOPER_KEY = FREEBASE_KEY
model.JsonModel.alt_param = ""
freebase = Discovery.build('freebase'、'v1'、developerKey = DEVELOPER_KEY)
クエリ=[{
"id":なし、
「名前」:なし、
"タイプ": "/ location / us_county"、
"/ location / location / geolocation":{
「緯度」:なし、
「経度」:なし
}
}]
結果=[]
カウント=0
def do_query(cursor = ""):
応答=json.loads(freebase.mqlread(query = json.dumps(query)、cursor = cursor).execute())
islice(response ['result']、None)の結果の場合:
results.append({'id':result ['id']、
'名前':結果['名前']、
'latitude':result ['/ location / location / geolocation'] ['latitude']、
'longitude':result ['/ location / location / geolocation'] ['longitude']、
})
response.get( "cursor")を返します
カーソル=do_query()
while(カーソル):
カーソル=do_query(cursor)
#このループが何回繰り返されたかを確認します。
#print count
count + = 1
#結果をパンダのDataFrameに接続してプロットします。
状態=DataFrame(results)
plt.scatter(states ["longitude"]、states ["latitude"])