Sammeln Sie Produktinformationen und Prozessdaten mit der Rakuten-Produktsuch-API [Python].

Einführung

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 ...).

Politik

(1) Produktinformationen abrufen

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.

(2) Datenverarbeitungsverfahren

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.

(1) Skript zum Erfassen von Produktinformationen

1. Importieren Sie die erforderlichen Bibliotheken und bereiten Sie die Eingabeparameter vor

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
}

2. Erstellen Sie einen Diktattyp, der nur die erforderlichen Produktinformationen enthält

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.

3. Erstellen Sie einen DataFrame

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.

4. CSV-Ausgabe

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')

(2) Datenverarbeitungs- / Aggregationsskript

1. Lesen Sie 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')

2. Extrahieren Sie nur die erforderlichen Daten

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.

3. Extrahieren Sie das Gewicht aus dem Produktnamen, um eine neue Spalte zu erstellen

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.

image

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.

abschließend

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

Sammeln Sie Produktinformationen und Prozessdaten mit der Rakuten-Produktsuch-API [Python].
Ausgabe von Produktinformationen an csv mithilfe der Rakuten-Produktsuch-API [Python]
Aggregieren und analysieren Sie Produktpreise mit der Rakuten Product Search API [Python]
Datenerfassung mit Python Googlemap API
Sammeln wir automatisch Unternehmensinformationen (XBRL-Daten) mithilfe der EDINET-API (4/10).
[Python] Ich habe versucht, mithilfe der YouTube-Daten-API verschiedene Informationen abzurufen!
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Sammeln Sie Daten mit Scrapy und füllen Sie mongoDB
Erstellen einer Google-Tabelle mit der Python / Google Data-API
[Python] Holen Sie sich alle Kommentare mit Youtube Data Api
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
Holen Sie sich LEAD-Daten mit der REST-API von Marketo in Python
Datenbereinigung mit Python
[Python] Abrufen von Insight-Daten mithilfe der Google My Business-API
Senden und empfangen Sie Google Mail über die Google Mail-API mit Python
Crawlen mit Python und Twitter API 1-Einfache Suchfunktion
Verarbeiten Sie CSV-Daten mit Python (Zählverarbeitung mit Pandas)
Suchen Sie Twitter mit Python
Sprachtranskriptionsverfahren mit Python und Google Cloud Speech API
Verwenden Sie die Such-API der National Parliament Library in Python
[Python] Mit der API von Qiita erhalten Sie Benutzer- und Artikelinformationen
Ich habe versucht, Videos mit der Youtube Data API (Anfänger) zu suchen.
Visualisieren Sie die Pflanzenaktivität aus dem Weltraum mithilfe von Satellitendaten und Python
Erhalten Sie Daten mithilfe der API des Ministeriums für innere Angelegenheiten und Kommunikation
Sammeln Sie eine große Anzahl von Bildern mit der Bildsuch-API von Bing
Sammeln Sie Tweets mit tweepy in Python und speichern Sie sie in MongoDB
Prognostizieren Sie das Geschlecht anhand des Namens mithilfe der Gender-API und von Pykakasi in Python
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
[Go language] Sammeln und speichern Sie Vtuber-Bilder mithilfe der Twitter-API
Holen Sie sich den Produktnamen und den niedrigsten Preis mit der Amazon Product Advertising API
[Python] Zufällige Datenextraktion / -kombination aus DataFrame mit Random und Pandas
Ich habe Chatbot mit LINE Messaging API und Python erstellt
Spielen Sie mit der YouTube Data API v3 mit dem Google API Python Client
Suchalgorithmus mit word2vec [Python]
[Python] Suche nach Tiefenpriorität und Suche nach Breitenpriorität
Datenanalyse mit Python-Pandas
Automatisierung einer Recherche zu geografischen Informationen wie dem Speichernetzwerk mithilfe von Python und Web-API
Verarbeiten Sie das Ausführungsergebnis von Splunk mit Python und speichern Sie es in einer Datei
[Python] LINE-Benachrichtigung über die neuesten Informationen mithilfe der automatischen Suche von Twitter
Basiskarteninformationen mithilfe der Python-Geotiff-Konvertierung numerischer Höhendaten
Crawlen mit Python und Twitter API 2-Implementierung der Benutzersuchfunktion
[Python] Sprechen mit OpenJTalk und Talk API (bis zur Sprachausgabe)
[Python] Ich habe eine REST-API mit AWS API Gateway und Lambda geschrieben.
Ich habe Chatbot mit der LINE Messaging API und Python (2) ~ Server ~ erstellt
Speichern, Wiederherstellen und Abfragen der Suche von Python-Klasseninstanzen mit mongodb
Abrufen von Salesforce-Daten mithilfe der REST-API
Authentifizierung mit Tweepy-User-Authentifizierung und Anwendungsauthentifizierung (Python)
[Python3] Google übersetzt Google Übersetzung ohne Verwendung von API
Zusammenarbeit zwischen Python-Modul und API
Abrufen von Amazon-Daten mit Keep API # 1 Abrufen von Daten
Hashing von Daten in R und Python
Clustering und Visualisierung mit Python und CytoScape
Datenerfassungsnotiz mit der Backlog-API
Gesamtleistung in Python (mit Funktools)
Versuchen Sie es mit der Aktions-API von Python argparse
Führen Sie Ansible über Python mithilfe der API aus
Verarbeiten Sie Pubmed .xml-Daten mit Python
Backtrace mit DWARF-Informationen und Pyelftools