Aggregieren und analysieren Sie Produktpreise mit der Rakuten Product Search API [Python]

Einführung

Dies ist eine Fortsetzung von Letztes Mal. Diese Zeit wird die letzte sein. Nachdem wir die Preisanalyse der von Rakuten Ichiba erhaltenen Produktdaten vorverarbeitet haben, werden wir endlich eine einfache Analyse versuchen.

――Was ist der Marktpreis für Gemüse (diesmal Make-in), das bei Rakuten Ichiba verkauft wird? ――Wie viel ist die angemessene Menge pro kg?

Ich möchte rudimentäre Analysefähigkeiten einsetzen, um solche Dinge herauszustellen.

Politik

Ziel ist es, "für die Preiserhebung beim Verkauf landwirtschaftlicher Produkte" neu zu organisieren. Der Zweck dieser Zeit war es, einige Gründe dafür zu erhalten, "wie viel Preis für den Verkauf angemessen ist", indem die Preise für landwirtschaftliche Erzeugnisse in kg summiert oder grafisch dargestellt werden. .. Zu diesem Zweck möchte ich es als einen der Gründe verwenden, indem ich zuerst den Marktpreis in Rakuten Ichiba untersuche, der leicht zu untersuchen scheint.

Folgen Sie den unteren Schritten.

(1) Versuchen Sie zu summieren

Lassen Sie uns zunächst die zusammenfassende Statistik (Durchschnittswert, Medianwert usw.) des Produktpreises für jede Menge zusammenfassen und eine Tabelle erstellen. Mit anderen Worten, der erste Schritt in dieser Analyse besteht darin, den Produktpreis für jedes Gewicht (1 kg, 2 kg ...) mit bestimmten numerischen Werten zu erfassen.

(2) Überprüfen Sie die Verteilung (Visualisierung)

Zeichnen wir anhand der Daten für jede Menge ein Histogramm oder ein Streudiagramm, um zu sehen, wie die Anzahl der Mengen und die Anzahl der Produkte sowie die Beziehung zwischen der Anzahl der Mengen und dem Produktpreis aussehen werden. Wenn Sie sich auf den mittleren Produktpreis konzentrieren und ihn visualisieren, wird außerdem die folgende Analyse von (3) durchgeführt.

(3) Erhalten Sie Parameter durch lineare Approximation

Betrachten wir die Beziehung zwischen der Menge und dem Medianpreis als lineare Funktion (gerade Linie) und finden Sie die Parameter der Formel. Wenn man sich auf den Medianpreis jeder Menge konzentriert und ihn früher visualisiert, wird spekuliert, dass die Menge und der Produktpreis wahrscheinlich eine lineare Funktionsbeziehung haben (direkt in der Grafik). Wenn dies tatsächlich angewendet wird, kann davon ausgegangen werden, dass der Produktpreis durch Addition der "Menge pro kg" zum "Grundbetrag der Versandgebühr, der Boxgebühr, der Arbeitsgebühr usw." bestimmt wird. Durch Ermitteln der Parameter des relationalen Ausdrucks berechnen wir die "Grundmenge" und die "Menge pro kg".

Aggregation und Analyse

Bereiten Sie die Daten vor, bevor Sie mit der Aggregation beginnen. Lesen Sie die verarbeiteten Daten, die am Ende von Letztes Mal gespeichert wurden, aus der CSV-Datei und fügen Sie sie in den DataFrame ein.

df = pd.read_csv('20200914_rakuten_mayqueen_2.csv')

(1) Versuchen Sie zu summieren

Wenn Sie fertig sind, schauen wir uns zunächst die zusammenfassende Statistik der Produktpreise nach Menge an. Verwenden Sie die Funktion groupby (), um eine Tabelle pro Menge zu erstellen. Verwenden Sie außerdem die Methode "description ()", um Statistiken anzuzeigen.

#Überprüfen Sie die Statistiken für jede Menge nach Gruppe nach
df_by_kg = df.groupby('Menge').describe()['Produktpreis']
df_by_kg

image

Wenn Sie sich die Spalte "count" dieser Tabelle ansehen, sehen Sie, dass es Zeilen mit nur einem oder zwei Daten und Zeilen mit einer großen Anzahl von Daten gibt. Sie können beispielsweise feststellen, dass die Anzahl der Fälle, in denen "Kartoffeln mit 1 kg oder 2 kg verkauft werden", in erster Linie gering ist und die Anzahl der Fälle, in denen "Kartoffeln mit 5 kg oder 10 kg verkauft werden", groß ist. Da der Standard der Box fast festgelegt ist, handelt es sich um eine vernünftige Zahl von der tatsächlichen Site, aber ich konnte sie anhand dieser Daten bestätigen.

Extrahieren Sie nur die erforderlichen Zeilen aus dieser Tabelle. Dieses Mal werden wir nur die Zeilen mit einer großen Anzahl von Fällen verwenden. Sie können die Anzahl der verbleibenden Zeilen direkt angeben. In Anbetracht der Möglichkeit, das Skript später wiederzuverwenden, extrahieren wir hier 5 oder mehr Zeilen (3 kg, 5 kg, 10 kg, 20 kg sind anwendbar). ich werde versuchen

#Extrahieren Sie nur die erforderlichen Zeilen (lassen Sie nur die mit 5 oder mehr Fällen)
df_by_kg = df_by_kg.loc[df_by_weight[('Produktpreis', 'count')]>5, :]
df_by_kg

image

Lassen Sie von hier aus nur die Spalten, die Sie benötigen. Dieses Mal habe ich beschlossen, "Anzahl der Fälle", "Durchschnittswert" Mittelwert "," Minimalwert "Min", "Medianwert" 50% "und" Maximalwert "Max" als zu vergleichende Spalten zu belassen.

#Extrahieren Sie nur die erforderlichen Zeilen
df_by_kg = df_by_kg.loc[:,  [ 'count', 'mean', 'min', '50%', 'max']]
df_by_kg

image

Sie haben jetzt eine saubere Tabellentabelle. Betrachten wir anhand dieser Tabelle den Produktpreis von "Kartoffel 10 kg" als Beispiel. Die Statistiken sind

Es war so ein Betrag (Versand und Steuern inbegriffen). Es scheint, dass auf den Durchschnittswert oder den Medianwert Bezug genommen werden sollte, um ein Gefühl für den Marktpreis zu bekommen, aber da der Bereich zwischen dem Minimalwert und dem Maximalwert groß ist, wird angenommen, dass die Gesamtvariation groß ist. Daher möchte ich den ** Medianwert ** anstelle des Durchschnittswerts als Referenzwert betrachten (diese Variation wird im nächsten Punkt visualisiert).

Übrigens ist das billigste ungewöhnlich billig. Als ich neugierig war, schien es, dass ultrakleine Bälle als sogenannte "übersetzte Produkte" verkauft wurden. Im Gegenteil, mit Blick auf den höchsten Preis war es kein spezielles Luxusmarkenprodukt, sondern ein Produkt in einem Bereich, aber von Juni bis Anfang August 2020 war der Marktpreis für Kartoffeln landesweit ungewöhnlich hoch. Daher habe ich mich gefragt, ob es zu einem solchen Preis gelistet ist (nur eine Vermutung).

(2) Überprüfen Sie die Verteilung (Visualisierung)

Als nächstes möchte ich die Daten genauer betrachten, indem ich ein Diagramm basierend auf den Daten zeichne und es visualisiere.

Lassen Sie uns zuerst das "Diaphragma" anzeigen. Hier werden die Anzahl der Einträge (kg) und die Häufigkeit (wie viele Daten verfügbar sind) dargestellt.

Verwenden Sie zum Anzeigen des Histogramms die Funktion "hist ()" der Bibliothek "matplotlib". Geben Sie DataFram (df) vor der Aggregation als Daten an. Durch Angabe von "Bins" als Option wird die Breite des Bandes des Histogramms geändert. Hier wird die Anzahl der Fälle in Schritten von 1 von 1 bis 30 angezeigt.

import matplotlib.pyplot as plt

#Histogramm (Beziehung zwischen der Anzahl der Einträge und der Anzahl der Fälle)
plt.hist(df['Menge'], bins=np.arange(1, 30))
plt.xlabel('Quantity(kg)')
plt.ylabel('Count')
plt.grid(True)
plt.show()

image

Wie Sie den früheren numerischen Werten entnehmen können, gibt es einen Unterschied in der Anzahl der Fälle in Abhängigkeit von der Anzahl der kg. Sie können sehen, dass es viele Produkte pro 5 kg und 10 kg gibt und 3 kg und 20 kg relativ verfügbar sind.

Als nächstes zeigen wir das "Streudiagramm" an. Verwenden Sie zum Anzeigen des Streudiagramms die Funktion dispers () von matplotlib. Versuchen Sie erneut, das DataFram (df) vor der Aggregation anzugeben.

#Streudiagramm (Verhältnis zwischen Menge und Produktpreis)
plt.scatter(df['Menge'], df['Produktpreis'])
plt.xlabel('Quantity(kg)')
plt.ylabel('Pirce(yen)')
plt.grid(True)
plt.show()

image

Die Punkte zeigen, wie viele kg Produkte verkauft werden, aber Sie können deutlich sehen, dass die zuvor erwähnte "Preisschwankung" bei der Summe groß ist. In diesem Zustand gibt es viele Variationen und es scheint, dass es nicht als Grundlage für die Bestimmung des Preises verwendet werden kann.

Dieses Mal werde ich ein Diagramm zeichnen, das sich auf den "Medianwert" des Produktpreises konzentriert. Im Gegensatz zum obigen Streudiagramm ist in der Grafik ein Punkt dargestellt, der der Medianwert des entsprechenden Produktpreises für jede Menge ist. Hier wird die Abbildung nach der Aggregation mit dem Datenrahmen (df_by_kg) dargestellt.

#Plotpunkte (Verhältnis zwischen Menge und Produktpreis (Median))
plt.plot(df_by_kg.index, df_by_kg['50%'], 'o')
plt.xlabel('Quantity(kg)')
plt.ylabel('Pirce(yen)')
plt.grid(True)
plt.show()

image

Die eingezeichneten Punkte scheinen auf einer schönen geraden Linie zu liegen. Es scheint, dass wir die Beziehung zwischen der Stückzahl und dem Produktpreis erfassen können.

Die numerischen Werte (dh die Medianwerte) an jedem Punkt sind wie folgt.

image

Bei der Festlegung der Verkaufsmenge für Gemüse scheint es möglich zu sein, durch Festlegung dieser Menge einen angemessenen Preis mit geringer Abweichung vom Marktpreis für Online-Verkäufe festzulegen.     Auf diese Weise ist es einfacher, intuitiv zu verstehen, wenn Sie die numerischen Werte visualisieren und sehen. Auch wenn es visualisiert wird, gibt es viele Variationen, wenn ich das Ganze vage betrachte, und ich war mir nicht sicher, wie ich es betrachten soll, aber wenn ich mich auf eine Statistik namens "Medianwert" konzentriere, sehe ich Regelmäßigkeit. Ich war in der Lage.

(3) Erhalten Sie Parameter durch lineare Approximation

Lassen Sie uns etwas tiefer in die Ergebnisse eintauchen. Es wird angenommen, dass der Medianwert des Produktpreises für die zuvor aufgetragene Anzahl von kg nahe an der Beziehung der linearen Funktion liegt (Punkte sind in der Grafik fast in einer geraden Linie ausgerichtet). Versuchen wir daher "lineare Approximation". Durch Auffinden der Parameter (Neigung und Schnitt) der ungefähren Geradengleichung scheint der Produktpreis im Detail zu sehen zu sein. Mit anderen Worten entspricht die "Menge pro kg" dem Steigungswert dieser geraden Linie, und der "Grundbetrag der Versandgebühr, der Boxgebühr, der Arbeitsgebühr usw." entspricht dem Abschnitt dieser geraden Linie.

Verwenden Sie die Numpy-Funktion zur linearen Approximation.

#Lineare Näherung
linear = np.polyfit(df_by_kg.index, df_by_kg['50%'], 1) #Lineare Approximation zum Finden von Schnitt und Steigung
func = np.poly1d(linear) #Machen Sie eine lineare Gleichung aus dem Abschnitt und der Steigung
x = df_by_kg.index
y = func(x)

#Lineare ungefähre Diagrammanzeige
plt.plot(x, y)

#Zeigen Sie das Streudiagramm zusammen an
plt.plot(df_by_kg.index, df_by_kg['50%'], 'o')
plt.xlabel('kg')
plt.ylabel('yen')

image

Auf diese Weise können Sie sehen, dass die eingezeichneten Punkte ungefähr auf einer geraden Linie liegen. Und diese "lineare" Variable enthält die Parameter dieses linearen Ausdrucks.

print('Lineare Parameter[Neigung,Sektion] = ', linear)
# ->Lineare Parameter[Neigung,Sektion] =  [ 142.94797688 2071.99421965]

Mit anderen Worten

Wenn Sie diese Zahl beispielsweise verwenden, um ein 4-kg-Produkt herzustellen, können Sie berechnen, dass es besser ist, es auf etwa 2072 Yen + 4 kg bei 143 Yen = 2.644 Yen einzustellen.

Es war interessant, dass der mittlere Produktpreis so schön an die Gleichung der linearen Funktion angenähert werden konnte. Ich denke, die Anzahl der diesmal verwendeten Daten war zu gering, um sie zu analysieren, aber ich konnte immer noch einen numerischen Wert erhalten, der intuitiv überzeugend war.

abschließend

Selbst mit einer grundlegenden Analyse wie dieser konnten wir gültige Zahlen erhalten, die verwendet werden konnten. Ich denke, dass Entscheidungen auf der Grundlage solcher Analyseergebnisse der Schlüssel zur Nutzung der Datenanalyse bei der Arbeit sind. Und ich denke, es ist wichtig, es nicht einmal zu beenden, sondern einen Zyklus genauerer und überzeugenderer Analysen und Entscheidungen zu durchlaufen, indem Versuche und Fehler wiederholt werden.

Ein wichtiger Punkt ist, dass die Gültigkeit der Analyseergebnisse etwas genauer überprüft werden muss. Zum Beispiel müssen wir die Anzahl der Daten erhöhen und den Inhalt der Daten überprüfen. In diesem Beispiel dachte ich, wenn wir nach Sorten unterteilen, könnten wir mehr personenbezogene Daten produzieren.

Nach der Analyse der Daten treten wir in die Entscheidungsphase der tatsächlichen Preisgestaltung ein, dies erfordert jedoch eine andere Perspektive. Zumindest die folgenden Dinge müssen in mir verfestigt werden.

――Wie stellen Sie den Wert des Produkts ein? Ob es billiger oder höher als der Marktpreis eingestellt werden soll. ――Wer ist das Ziel? Dieses Mal haben wir mit Rakuten Ichiba-Daten analysiert, aber es kann notwendig sein, in einem Markt zu analysieren, der näher am Ziel liegt.

Es wäre schön, wenn ich Entscheidungen etwas schneller treffen könnte, aber es ist schwierig.

Vorerst möchte ich diese Nummer verwenden, um in naher Zukunft eine Ausgabe zu produzieren!

Nun, ich habe dreimal über Datenanalyse geschrieben, aber dieses Mal werde ich hier aufhören. Da es sich um eine explorative Analyse handelt, die auf dem erlernten Wissen basiert, kann es eine falsche Denkweise oder eine intelligentere Schreibweise geben. Ich würde mich sehr freuen, wenn Sie so weit lesen und kommentieren, wenn Sie irgendwelche Bedenken haben!

Recommended Posts

Aggregieren und analysieren Sie Produktpreise mit der Rakuten Product Search API [Python]
Sammeln Sie Produktinformationen und Prozessdaten mit der Rakuten-Produktsuch-API [Python].
Ausgabe von Produktinformationen an csv mithilfe der Rakuten-Produktsuch-API [Python]
Aggregieren Sie Git-Protokolle mit Git Python und analysieren Sie Assoziationen mit Orange
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
Suchen Sie Twitter mit Python
Senden und empfangen Sie Google Mail über die Google Mail-API mit Python
Crawlen mit Python und Twitter API 1-Einfache Suchfunktion
Verwenden Sie die Such-API der National Parliament Library in Python
Prognostizieren Sie das Geschlecht anhand des Namens mithilfe der Gender-API und von Pykakasi in Python
[Python] Suche nach Tiefenpriorität und Suche nach Breitenpriorität
Holen Sie sich den Produktnamen und den niedrigsten Preis mit der Amazon Product Advertising API
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
Crawlen mit Python und Twitter API 2-Implementierung der Benutzersuchfunktion
[Python] Sprechen mit OpenJTalk und Talk API (bis zur Sprachausgabe)
Ich habe Chatbot mit der LINE Messaging API und Python (2) ~ Server ~ erstellt
Speichern, Wiederherstellen und Abfragen der Suche von Python-Klasseninstanzen mit mongodb
Datenerfassung mit Python Googlemap API
Authentifizierung mit Tweepy-User-Authentifizierung und Anwendungsauthentifizierung (Python)
[Python3] Google übersetzt Google Übersetzung ohne Verwendung von API
Versuchen Sie es mit der Pleasant-API (Python / FastAPI).
Zusammenarbeit zwischen Python-Modul und API
Clustering und Visualisierung mit Python und CytoScape
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
Suche nach Tiefenpriorität mit Stack in Python
Python 2-Minuten-Suche und ihre Ableitungen
Entwicklung und Bereitstellung der REST-API in Python mit Falcon Web Framework
Mausbedienung mit Windows-API in Python
Hinweise zur Verwendung von cChardet und python3-chardet in Python 3.3.1.
Automatische Erfassung von Aktienkursen mit Python
Homebrew Python Teil 3 - Das Produktsuchprogramm von Amazon
Versuchen Sie es mit der Wunderlist-API in Python
Von Python bis zur Verwendung von MeCab (und CaboCha)
Kaufen und verkaufen Sie virtuelle Währungen mit der Zaif-API
Versuchen Sie, die Kraken-API mit Python zu verwenden
Verwenden von Python und MeCab mit Azure Databricks
Suchen und spielen Sie YouTube-Videos mit Python
Tweet mit der Twitter-API in Python
Überprüfen Sie die Aktienkurse mit Slackbot mit Python
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Bit vollständige Suche und direkte Produktmenge
Bildersammlung mit der benutzerdefinierten Such-API von Google
Ich verwende Tox und Python 3.3 mit Travis-CI
Erstellen einer Google-Tabelle mit der Python / Google Data-API