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"])