Letztes Mal verwendete "Rakuten-Produktsuch-API", um 30 Daten (1 Seite) zu extrahieren und in einer CSV-Datei zu speichern. Es war.
Dieses Mal haben wir, um mehr praktische Daten für die Analyse und den Zusammenhang mit der Entscheidungsfindung zu sammeln, zuerst das vorherige Skript entwickelt, um die Anzahl der zu erfassenden Daten zu erhöhen, und dann die Produktdaten als vorläufigen Schritt für die Aggregation und Analyse verwendet. Wir verarbeiten Daten sogar so, dass sie nach Gewicht klassifiziert werden können (5 kg, 10 kg ...).
Der Ablauf ist der gleiche wie beim letzten Mal, aber diesmal wird hier die Anzahl der Erfassungen und NG-Wörter angegeben. Diese werden entsprechend dem Zweck der Datenerfassung sowie der Menge und dem Inhalt der erforderlichen Informationen angepasst.
In meinem Fall habe ich ein Wort angegeben, das nicht meinen Erwartungen entspricht und wahrscheinlich den Produktpreis beeinflusst. Hier sind "ökologischer Anbau / biologisch / pestizidreduziert / pestizidfrei", "Set / Sortiment" und "Steuerzahlung in der Heimatstadt" ausgeschlossen. Es hat keine tiefe Bedeutung, die Anzahl der Akquisitionen auf 300 zu setzen, aber als ich nach Produkten mit diesem Schlüsselwort / NG-Wort suchte, betrug die Anzahl der Treffer etwa 320, also habe ich eine gute Anzahl gewählt.
Ursprünglich wäre es genauer, die Menge durch die Gemüsesorte zu teilen, aber diesmal habe ich beschlossen, dies nicht zu tun. Dies liegt daran, dass die Anzahl der Daten abnimmt, wenn sie zu stark unterteilt werden.
Dies ist fast das gleiche wie beim letzten Mal, aber nur die Teile "page" und "NGKeyword" und "postageFlag" der Eingabeparameter, die Anforderungen mit der API senden, werden geändert.
Die maximale Anzahl von Daten, die mit einer einzelnen Anforderung von der Rakuten-Produktsuch-API erfasst werden können, beträgt 30 (der Wert des Eingabeparameters "Treffer"). Wenn Sie die Anzahl der Seiten "2" in "Seite" angeben, können Sie die 31. und nachfolgende Daten erhalten. Es wird angenommen, dass der Wert dieser "Seite" durch die "for" -Anweisung geändert wird.
Zusätzlich gibt der Eingabeparameter "postageFlag" an, ob der Produktpreis den Versand beinhaltet (1 beinhaltet den Versand oder den kostenlosen Versand).
import requests
import numpy as np
import pandas as pd
REQUEST_URL = "https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706"
APP_ID="<Geben Sie die Rakuten-API-ID ein>"
#Eingabeparameter
serch_keyword = 'Make-in'
ng_keyword = 'Steuerzahlung in der Heimatstadt Bio-Pestizid-reduziertes Set ohne Pestizide'
page = 1
serch_params={
"format" : "json",
"keyword" : serch_keyword,
"NGKeyword":ng_keyword,
"applicationId" : [APP_ID],
"availability" : 0,
"hits" : 30,
"page" : page,
"sort" : "standard",
"postageFlag" : 1
}
Verwenden Sie die Anweisung "for", um Produktinformationen für Seiten abzurufen, die mehrere Seiten umfassen.
Das Extrahieren nur der erforderlichen Elemente aus den Produktinformationen, das Speichern in dem Diktat mit dem Namen "tmp_item" und das Speichern in der Liste mit dem Namen "item_list" ist der gleiche Ablauf wie beim letzten Mal.
#Erhalten Sie Produktinformationen in einer Liste
item_list = [] #Produktinformationen vom Typ Wörterbuch, die von 30 Artikeln tmp erfasst wurden_10 Seiten des Artikels
max_page = 10
for page in range(1, max_page+1):
serch_params['page'] = page
#Senden Sie eine Anfrage an die API und erhalten Sie das Ergebnis der Produktdaten
response = requests.get(REQUEST_URL, serch_params)
result = response.json()
#Erstellen Sie ein Diktat, das die erforderlichen Informationen aus dem Ergebnis extrahiert
item_key = ['itemName', 'itemPrice', 'itemCaption', 'shopName', 'shopUrl', 'itemUrl']
for i in range(0, len(result['Items'])):
tmp_item = {}
item = result['Items'][i]['Item']
for key, value in item.items():
if key in item_key:
tmp_item[key] = value
item_list.append(tmp_item.copy())
Selbst wenn ich ein Keyword mit weniger als 10 Seiten Produkte eingegeben habe, konnte ich es ohne besonderen Fehler abrufen. Es scheint, dass die Anzahl der Seiten größer als die tatsächliche Anzahl der Produkte eingestellt werden kann (die Obergrenze von "Seite" liegt laut API-Referenz bei 100). Die Verarbeitung nimmt jedoch viel Zeit in Anspruch, und in seltenen Fällen tritt in meiner Umgebung ein Fehler auf. Daher halte ich es für besser, ihn auf das erforderliche Minimum zu beschränken.
Wie beim letzten Mal wird auch hier ein Pandas DataFrame aus der Liste erstellt, in dem das Diktat der Produktinformationen gespeichert ist. Ich habe es ein wenig geändert, so dass der Index bei 1 statt bei 0 beginnt.
#Datenrahmenerstellung
df = pd.DataFrame(item_list)
df = df.reindex(columns=['itemName', 'itemPrice', 'itemCaption', 'itemUrl', 'shopName', 'shopUrl'])
df.columns = ['Produktname', 'Produktpreis', 'Produktbeschreibung', 'Produkt-URL', 'Speichername', 'URL speichern']
df.index = df.index + 1 #Neu indizieren von 1
Überprüfen Sie die Anzahl der Erfassungen mit "df.count ()" und die ersten 5 Daten mit "df.head ()". Es scheint in Ordnung zu sein, wenn es erwartungsgemäß 300 Daten enthält.
Es ist mühsam, dieses Skript jedes Mal auszuführen, um die Daten abzurufen. Daher werde ich csv ausgeben, damit ich es verwenden kann, wenn ich es verwenden möchte.
df.to_csv('20200914_rakuten_mayqueen.csv')
Nachdem wir die Anzahl der Daten erhöht haben, verarbeiten wir die Daten in eine für die Analyse geeignete Form. Sie können so weitermachen, wie es ist, aber sobald Sie die CSV-Füllung geladen haben, fahren Sie fort.
df = pd.read_csv('20200914_rakuten_mayqueen.csv')
Ich werde diesen DataFrame verarbeiten, aber als ich den Inhalt der Daten mit einer Tabelle kurz betrachtete, wurde er zunächst mit anderen zusätzlichen Daten als Gemüse gemischt, die nicht zum Zweck dieser Preisumfrage passten. Da wir diesmal Gewichtsdaten benötigen, werden wir versuchen, "nur Produktdaten mit Gewicht im Produktnamen zu belassen".
Verwenden Sie in Pandas "str.contains ()", um Zeilen mit der angegebenen Zeichenfolge zu extrahieren (teilweise abzugleichen) und als Bool-Werte zurückzugeben.
#Belassen Sie nur Produktdaten mit "kg" im Produktnamen
kg_flg = df['Produktname'].str.contains('kg')
df = df[kg_flg]
kg_flg
ist eine Reihe von Bool-Werten, und die Zeilen, die" kg "enthalten, sind True, und die Zeilen, die kein" kg "enthalten, sind False. Die Zeile True ist die Daten, die Sie behalten möchten.
Wenn Sie dies verwenden und auf "df [kg_flg]" setzen, können Sie einen DataFrame extrahieren, der nur True-Zeilen enthält.
Als ich die Anzahl der Fälle mit "df.count ()" überprüfte, verringerte sie sich auf 116 Fälle. Wenn Sie mehr Daten sichern möchten, muss dieser Bereich anscheinend etwas genauer überprüft werden.
Dies lässt nur die Zeile mit kg im Produktnamen, aber ich möchte dieses Gewicht in eine andere Spalte schneiden. Der Produktname sollte das Gewicht in Form von "Nummer + kg" enthalten. Nehmen Sie diese Nummer heraus und erstellen Sie eine neue Spalte mit dem Namen "Menge".
Verwenden wir hier einen regulären Ausdruck (ich werde die ausführliche Erklärung weglassen, aber Sie können "Zahl + kg" mit "([0-9] +) kg" ausdrücken). Geben Sie diesen regulären Ausdruck im Argument von Pandas 'str.extract () an. Diese Methode gibt einen regulären Ausdruck als Argument an und extrahiert die erste übereinstimmende Zeichenfolge, um eine neue Spalte zu erstellen. Dies ist eine bequeme Methode, die perfekt für das ist, was Sie diesmal tun möchten.
#Schneiden Sie das Gewicht aus dem Produktnamen in eine andere Spalte aus
df['Menge'] = df['Produktname'].str.extract('([0-9]+)kg')
df =df.reindex(columns=['Produktname', 'Menge', 'Produktpreis', 'Produktbeschreibung', 'Produkt-URL', 'Speichername', 'URL speichern'])
df.to_csv('20200914_rakuten_mayqueen_2.csv')
Tauschen Sie die Spalten aus, um die Anzeige zu erleichtern, und geben Sie am Ende csv aus. Ich konnte einen solchen DataFrame erstellen.
Im Bild habe ich nach der Umrechnung der Menge in den numerischen Typ für die nachfolgende Analyse auch den kg-Stückpreis hinzugefügt, der der Produktpreis geteilt durch die Menge ist. Die Zahlen sind jedoch sehr unterschiedlich, so dass ich beim nächsten Mal etwas tiefer graben werde.
Nächstes Mal versuchen Sie, Statistiken wie den Durchschnittswert der Produktpreise durch Aggregation der Daten zu berechnen, und versuchen Sie, sie zu visualisieren und linear an den kg-Stückpreis anzunähern Ich werde versuchen, eine einfache Analyse durchzuführen, die zur Entscheidungsfindung zu führen scheint.
Recommended Posts