2016-04-05 6 views
3

Wenn ich das AdWords-API abfragen search volume data and trends through their TargetingIdeaSelector zu bekommen die Python client library die zurückgegebenen Daten wie folgt aussieht mit:Welches Datenformat wird vom AdWords API TargetingIdeaPage-Dienst zurückgegeben?

(TargetingIdeaPage){ 
     totalNumEntries = 1 
     entries[] = 
      (TargetingIdea){ 
      data[] = 
       (Type_AttributeMapEntry){ 
        key = "KEYWORD_TEXT" 
        value = 
         (StringAttribute){ 
         Attribute.Type = "StringAttribute" 
         value = "keyword phrase" 
         } 
       }, 
       (Type_AttributeMapEntry){ 
        key = "TARGETED_MONTHLY_SEARCHES" 
        value = 
         (MonthlySearchVolumeAttribute){ 
         Attribute.Type = "MonthlySearchVolumeAttribute" 
         value[] = 
          (MonthlySearchVolume){ 
           year = 2016 
           month = 2 
           count = 2900 
          }, 
          ... 
          (MonthlySearchVolume){ 
           year = 2015 
           month = 3 
           count = 2900 
          }, 
         } 
       }, 
      }, 
    } 

Diese nicht JSON ist und scheint nur eine schmutzige Python-Liste zu sein. Was ist der einfachste Weg, die monatlichen Daten in einen Pandas-Datenrahmen mit einer solchen Struktur zu glätten?

Keyword   | Year | Month | Count 
keyword phrase 2016  2  10 

Antwort

3

Die Ausgabe ist ein sudsobject. Ich fand, dass dieser Code den Trick macht:

import suds.sudsobject as sudsobject 
import pandas as pd 
a = [sudsobject.asdict(x) for x in output] 
df = pd.DataFrame(a) 
+0

Entschuldigung für meine verspätete Antwort! Danke für die Erklärung! Viel einfacherer Code, um dies zu erledigen! – JohnSG

0

Hier ist der komplette Code, den ich die TargetingIdeaSelector Abfrage verwendet werden, um mit request STATS, und die Methode, die ich verwendet, um die Daten in eine nutzbare Datenrahmen zu analysieren; Beachten Sie den Abschnitt, der "Parse results to pandas dateframe" startet, da dies die Ausgabe in der obigen Frage übernimmt und in einen Datenrahmen konvertiert. Wahrscheinlich nicht der schnellste oder beste, aber es funktioniert! Getestet mit Python 2.7.

"""This code pulls trends for a set of keywords, and parses into a dataframe. 

The LoadFromStorage method is pulling credentials and properties from a 
"googleads.yaml" file. By default, it looks for this file in your home 
directory. For more information, see the "Caching authentication information" 
section of our README. 

""" 

from googleads import adwords 
import pandas as pd 


adwords_client = adwords.AdWordsClient.LoadFromStorage() 

PAGE_SIZE = 10 

# Initialize appropriate service. 
targeting_idea_service = adwords_client.GetService(
    'TargetingIdeaService', version='v201601') 

# Construct selector object and retrieve related keywords. 
offset = 0 
stats_selector = { 
    'searchParameters': [ 
     { 
      'xsi_type': 'RelatedToQuerySearchParameter', 
      'queries': ['donald trump', 'bernie sanders'] 
     }, 
     { 
     # Language setting (optional). 
     # The ID can be found in the documentation: 
     # https://developers.google.com/adwords/api/docs/appendix/languagecodes 
      'xsi_type': 'LanguageSearchParameter', 
      'languages': [{'id': '1000'}], 
     }, 
     { 
      # Location setting 
      'xsi_type': 'LocationSearchParameter', 
      'locations': [{'id': '1027363'}] # Burlington,Vermont 
     } 
    ], 
    'ideaType': 'KEYWORD', 
    'requestType': 'STATS', 
    'requestedAttributeTypes': ['KEYWORD_TEXT', 'TARGETED_MONTHLY_SEARCHES'], 
    'paging': { 
     'startIndex': str(offset), 
     'numberResults': str(PAGE_SIZE) 
    } 
} 

stats_page = targeting_idea_service.get(stats_selector) 


########################################################################## 
# Parse results to pandas dataframe 


stats_pd = pd.DataFrame() 

if 'entries' in stats_page: 
    for stats_result in stats_page['entries']: 
     stats_attributes = {} 
     for stats_attribute in stats_result['data']: 
      #print (stats_attribute) 
      if stats_attribute['key'] == 'KEYWORD_TEXT': 
       kt = stats_attribute['value']['value'] 
      else: 
       for i, val in enumerate(stats_attribute['value'][1]):     
        data = {'keyword': kt, 
          'year': val['year'], 
          'month': val['month'], 
          'count': val['count']} 
        data = pd.DataFrame(data, index = [i])     
        stats_pd = stats_pd.append(data, ignore_index=True) 


print(stats_pd) 
+0

Verwendet dieser Code Credentials, die über einen Testaccount generiert werden? Wenn ja, sind die Ergebnisse sinnvoll? Anderswo habe ich gelesen, dass Testkonten "Dummy" -Daten produzieren. Danke Chris –

+0

Ich benutze ein echtes Konto, und die Daten sind sicherlich sinnvoll. Ich kann nicht sagen, was passiert, wenn Sie ein Testkonto verwenden. Allerdings geht es mir darum, dass Sie ein "echtes" Konto verwenden müssen, da unklar ist, wie die Kontoeinstellungen die zurückgegebenen Ergebnisse beeinflussen können (oder auch nicht). – JohnSG

+0

Danke. Ich verstehe, dass die Testkonten Dummy-Ergebnisse zurückgeben, da Google den Zugriff auf die realen Daten einschränkt, um Missbrauch/Verstöße gegen die TOS etc. zu verhindern. –

Verwandte Themen