-1

Googleマップのapiから返されるdictファイルの種類を処理するための支援が必要です。どのようにGoogle Mapsの出力マトリックスのAPIから出力を処理するPythonで使用する場合は?

現在、私は処理できない結果データ(開始アドレス、終了アドレス、移動時間、距離など)の結果を私に伝えています。私は単純に開始アドレスと終了アドレスを抽出することができますが、バルクデータは抽出が困難であることが証明されており、その構造のためだと思います。

私が持っているコードのサンプルは以下の通りです。

import googlemaps 
import csv 
import pandas as pd 
postcodes = pd.read_csv("SW.csv", sep=',', usecols=['postcode'], squeeze=True) 
infile1 = open('SW.csv', 'r') 
reader1 = csv.reader(infile1) 
Location1 = postcodes[0:10] 
Location2 = 'SW1A 2HQ' 
my_distance = gmaps.distance_matrix(Location1, Location2, mode='bicycling', language=None, avoid=None, units='metric', 
             departure_time='2475925955', arrival_time=None, 
             transit_routing_preference=None) 
print(my_distance) 

次の出力を生成します。

{ 'origin_addresses':[ 'Cossarミューズ、ブリクストン、ロンドンSW2 2TR、UK' 'ブッシュネルRdを、ロンドンSW17 8QP、UK'、 'Maltings P1の、フラム、ロンドンSW6 2BX、英国ロンドン、SW3 1BJ、英国、英国、英国、英国、英国、英国、英国、英国、英国、英国、Brixton、Brixton、SW2 1HZ、 英国、 'Randall Cl、ロンドンSW11 英国 '、' Sloane St、London SW1X 9SF、 UK '、' Binfield Rd、London SW4 6TA、英国 ']、' rows ':[{' elements ': [{' duration ':{' text ' ''、 'value': '' '' '' '' '' '' '' '' '' '' ' : [{'期間':{'テキスト':'31分''、 '値':1850}、 'ステータス': 'OK'、 '距離':{'テキスト': '9.2 km'、 '値':9176}}}}、{'要素': [{'distance':{'text': '7.0 km'、 'value':7038} '期間':{'テキスト':'27分 '、'値 ':1620}、'ステータス ' {'text':'16分 '、'値 ':953}、'ステータス ':' OK '、 ' distance ':{' text ' {'duration':{'text':'15 mins '、' value ':899}、' status ':' 4.0 km、 'value':4038}}}}、{'elements': OK '、 '距離 ':{'テキスト ':' 3.4 km '、'値 ':3366}}}}、{'要素 ': [{'継続時間:{'テキスト':'21分 ' 'value':1260}、 'status': 'OK'、 '距離':{'text': '5.3km'、 'value':5265}}}、{'elements': [{'duration ':{' text ':'28 mins'、 'value':1682}、 'status': 'OK'、 'distance':{'text': '7.5 km'、 'value':7502}}}、{'elements': [{'duration':{'text':'23 mins '、' value ' {'duration':{1368}、 'status': 'OK'、 '距離':{'text': '5.9 km'、 'value':5876}}}}、{'elements': [ 'text': '3.3 km'、 'value':3341}}}}、{'text':'14 '、' value ':839}、' status ':' OK '、 ''distance':{'text': '4.3 km'; 'element': [{'継続時間:{'テキスト ':'16分'、 '値':982}、 'ステータス' '値':4294}}]}]、 'destination_addresses':[ 'ホース・ガーズRdを、ロンドンSW1A 2HQ、英国']、 のステータス ': 'OK'}

私はその後、USIています次のコードを抽出してください。

origin = my_distance['origin_addresses'] 
dest = my_distance['destination_addresses'] 
dist = my_distance['rows'] 

私は、df_from_listなど多くの人がdistデータを試して処理しようとしました。最終目標は、各行に原点アドレスを持つ行列を作成することです。宛先アドレスは列を構成し、距離と時間はこれらの列内のデータ変数になります。これに似た

何か

 |   DEST 1  |  DEST 2   | 
     | TIME |  DIST |  TIME |  DIST | 
START 1 |  X |  Y |  Z  |  T | 
START 2 |  A |  B |  C  |  T | 

誰かが私には上に示したものと同様のアーキテクチャに(上図)my_distance出力を処理することができますしてください。

ありがとうございます!

答えて

1

これは基本的に開始アドレスと宛先アドレスで辞書を作成します。 宛先アドレスには値のタプルのリストがあります。タプルの第1の要素は持続時間であり、第2の距離は などである。 (45, 7.0)#45=45min and 7.0 = 7km。次に、pandas.DataFrame.from_dict()のデータフレームを作成します。

import pandas as pd 

dct = {d_adresses:[] for d_adresses in data['destination_addresses']} 
dct['starts'] = [] 
for i in range(len(data['origin_addresses'])): 
    duration=int(data['rows'][i]['elements'][0]['duration']['text'].split(' ')[0]) 
    distance=float(data['rows'][i]['elements'][0]['distance']['text'].split(' ')[0]) 

    for key in dct: 
     if key != 'starts': 
      dct[key].append((duration, distance)) 

    dct['starts'].append(data['origin_addresses'][i]) 
df = pd.DataFrame.from_dict(dct) 
df.set_index('starts', inplace=True) 
関連する問題