- Import der Daten mittels Pandas
- Analyse der Daten
- Die Suchbegriffe durchsuchen
- Häufigkeit der Amazon Suchbegriffe
- Saisonale Suchbegriffe
Amazon stellt in ARApremium bzw. Brand Analytics Suchbegriff-Berichte zur Verfügung, um das Suchverhalten der Kunden zu analysieren.
Wir wollten wissen, welche Begriffe übergreifend am häufigsten gesucht werden. Da man mit Excel hier schnell an seine Grenzen kommt, haben wir ein Jupyter Notebook gebaut, mit der diese Analyse mit wenigen Zeilen Code zu schaffen ist.
Import der Daten mittels Pandas
Zu Beginn muss man die Daten als CSV Datei herunterladen, um diese später in seinem Notebook einbinden zu können.
Das Notebook sieht dann so aus:
# Pandas importieren
from __future__ import print_function
import pandas as pd
import glob
pd.__version__
# Alle Dateien in ein Array laden
all_files = glob.glob("/verzeichnis-zu-den-dateien/Amazon*.csv")
# Einlesen aller CSV Dateien, die sich in dem Array all_files befinden
# Das Leerzeichen in "Suchfrequenz-Rang " ist wichtig!
df = pd.concat((pd.read_csv(file, decimal=",", thousands=".", usecols=["Suchbegriff", "Suchfrequenz-Rang "], engine="python", error_bad_lines=True, encoding='utf-8', skiprows=1, sep=",") for file in all_files))
# Aggregieren der Daten
df4 = df.groupby('Suchbegriff')['Suchfrequenz-Rang '].agg(['mean','count','std']).sort_values(by=['mean'])
# Konvertieren der Spalten count und mean zu ganzen Zahlen
df4 = df4.astype({"count": int, "mean": int})
# Speichern als CSV Datei
df4.to_csv( "Average-Rank-SearchtermsWithCount.csv", encoding='utf-8-sig')
Analyse der Daten
Je nachdem wie viele Dateien man auf diese Weise kombiniert hat, bekommt man dann eine Datei mit > 1 Millionen Keywords und sieht für jedes Keyword, welchen Rang dieses im Durchschnitt hatte und wie häufig es in allen Dateien vorkam.
Im folgenden Beispiel haben wir 24 dieser Berichte analysiert und hatten am Ende ca. 1,2 Millionen Keywords in der Tabelle. Hier die ersten 50.
Suchbegriff | mean | count | std |
---|---|---|---|
bluetooth kopfhörer | 5 | 25 | 4 |
nintendo switch | 6 | 25 | 4 |
kopfhörer | 10 | 25 | 5 |
airpods | 13 | 25 | 14 |
smartwatch | 14 | 25 | 19 |
ps4 spiele | 16 | 25 | 7 |
harry potter | 18 | 25 | 13 |
lego | 19 | 25 | 9 |
laptop | 20 | 25 | 9 |
nintendo switch spiele | 26 | 25 | 12 |
staubsauger | 27 | 25 | 17 |
alexa | 29 | 25 | 16 |
paw patrol | 29 | 25 | 11 |
tablet | 33 | 25 | 13 |
star wars | 34 | 25 | 26 |
wasserkocher | 35 | 25 | 20 |
bibi und tina | 37 | 25 | 27 |
ps4 | 43 | 25 | 18 |
rucksack damen | 47 | 25 | 65 |
ps4 controller | 47 | 25 | 17 |
usb stick | 48 | 25 | 30 |
powerbank | 49 | 25 | 95 |
schlüsselanhänger | 52 | 25 | 35 |
kaffeevollautomat | 56 | 25 | 45 |
lego technik | 56 | 25 | 41 |
sodastream | 60 | 25 | 32 |
marvel | 60 | 25 | 36 |
smartphone | 62 | 25 | 36 |
kaffeemaschine | 63 | 25 | 28 |
pokemon | 65 | 25 | 21 |
bluetooth lautsprecher | 66 | 25 | 40 |
playmobil | 68 | 25 | 40 |
handy | 72 | 25 | 27 |
schreibtisch | 73 | 25 | 36 |
waschmaschine | 75 | 25 | 39 |
iphone xr hülle | 75 | 25 | 55 |
iphone | 78 | 25 | 26 |
barbie | 82 | 25 | 33 |
bilderrahmen | 84 | 25 | 26 |
fernseher | 87 | 25 | 47 |
gaming pc | 91 | 25 | 30 |
trinkflasche | 91 | 25 | 109 |
bibi blocksberg | 94 | 25 | 97 |
teppich | 97 | 25 | 51 |
switch spiele | 97 | 25 | 44 |
greys anatomy | 97 | 25 | 58 |
ipad | 98 | 25 | 53 |
led strip | 99 | 25 | 61 |
shisha | 101 | 25 | 62 |
gaming stuhl | 102 | 25 | 42 |
Die Suchbegriffe durchsuchen
Diese Liste kann man jetzt z.B. bei der Listing-Optimierung nutzen, um Keywords relativ zueinander einzuschätzen. Wird also "Portmonee" oder "Brieftasche" häufiger gesucht?
Mit folgendem Befehl lassen sich die Suchbegriffe durchsuchen. In diesem Beispiel suchen wir nach allen Suchbegriffen, in denen das Wort "gardena" vorkommt:
df4[df4.index.str.contains('gardena')].head(20)
Suchbegriff | mean | count | std |
---|---|---|---|
gardena | 3486 | 25 | 3150.23 |
gardena schlauch | 21621 | 25 | 16836.7 |
gardena schlauchtrommel | 22738 | 25 | 15791.4 |
gardena mähroboter | 24934 | 25 | 12274.6 |
gardena kupplung | 27462 | 25 | 30896.6 |
gardena bewässerungssystem | 31994 | 25 | 29484.3 |
gardena gartenschere | 33705 | 25 | 16405 |
gardena schlauchverbinder | 60854 | 25 | 46403.2 |
gardena schlauchwagen | 61507 | 25 | 47797.7 |
mähroboter gardena | 61612 | 25 | 34583.8 |
gardena aquazoom | 62400 | 9 | 50114.7 |
gardena bewaesserung | 69071 | 1 | nan |
gardena spritze | 74307 | 25 | 53239.9 |
gardena stiel | 74973 | 25 | 40259 |
gardena combisystem | 82716 | 25 | 70433.5 |
gardena rechen | 83709 | 25 | 76207.2 |
gardena bewässerungscomputer | 84796 | 25 | 73591.6 |
gardena zeitschaltuhr | 86014 | 9 | 77920 |
gardena sileno | 86639 | 25 | 45248.6 |
gartenschere gardena | 87025 | 25 | 47870.6 |
Noch mächtiger wird die Suche, wenn man eine sog. "Regular Expression" (RegEx) zur Suche nutzt. Hier gibt man nicht einen konkreten Text vor, sondern ein sog. Suchmuster. Dies erlaubt es uns, z.B. nach unterschiedlichen Schreibweisen zu suchen. Der folgende Befehlt findet unterschiedliche Schreibweisen des Wortes "Yogamatte":
df4[df4.index.str.contains('[yj]oga.?matte')].head(20)
Suchbegriff | mean | count | std |
---|---|---|---|
yogamatte | 338 | 25 | 161.047 |
yoga matte | 2389 | 25 | 820.243 |
yogamatte rutschfest | 9922 | 25 | 3469.39 |
jogamatte | 10261 | 25 | 3377.84 |
yogamatte kork | 23530 | 25 | 11257.2 |
yogamatte naturkautschuk | 27743 | 25 | 5939.38 |
jade yogamatte | 46817 | 25 | 12736.8 |
yogamatten | 56715 | 25 | 22945.4 |
lotuscrafts yogamatte | 63328 | 25 | 19403.3 |
manduka yogamatte | 63653 | 25 | 18263.3 |
yogistar yogamatte | 68112 | 25 | 13675 |
yoga matte rutschfest | 70326 | 1 | nan |
yogamatte tasche | 80785 | 25 | 13150.2 |
reise yogamatte | 83995 | 25 | 31255.2 |
joga matten | 89362 | 25 | 24908.6 |
yogamatte schurwolle | 89549 | 24 | 49844.2 |
yogamatte reebok | 107861 | 1 | nan |
liforme yogamatte | 110131 | 25 | 20752.5 |
reebok yogamatte | 110363 | 1 | nan |
yoga matte rutschfest dünn | 112945 | 24 | 59256.9 |
Das Suchmuster [yj]oga.?matte'
ist dabei wie folgt zu interpretieren:
[yj]
= y oder j
.?
= mit oder ohne Leerzeichen
Wir können jetzt auch unsere Frage von zu Beginn beantworten. Wenn jemand ein neues Portemonnaie sucht, welche Schreibweise wird am häufigsten gesucht?
df4[df4.index.str.contains('brieftasche|port.*monee|port.*monnaie', regex=True)].head(20)
Suchbegriff | mean | count | std |
---|---|---|---|
portemonnaie damen | 354 | 25 | 236.108 |
portmonee damen | 2444 | 25 | 635.93 |
portemonnaie herren | 2482 | 25 | 2759.01 |
portmonee herren | 3163 | 25 | 925.913 |
portemonnaie damen klein | 7463 | 25 | 2688.67 |
herren portemonnaie | 7927 | 25 | 2787.5 |
portemonnaie | 8195 | 25 | 3790.73 |
damen portemonnaie | 9238 | 25 | 3595.85 |
brieftasche herren | 10500 | 25 | 3545.77 |
portmonee | 15116 | 25 | 5390.57 |
portemonnaie damen gross | 16263 | 25 | 3797.22 |
karten portemonnaie | 16668 | 25 | 3642.58 |
brieftasche | 20851 | 25 | 9823.33 |
portmonee damen klein | 22647 | 25 | 7458.06 |
brieftasche damen | 26560 | 25 | 7834.45 |
portemonnaie damen leder | 26611 | 25 | 10856.4 |
tommy hilfiger portemonnaie herren | 27305 | 25 | 8887.91 |
kellnerportemonnaie | 27889 | 25 | 17295.4 |
damen portemonnaie groß | 34549 | 25 | 9542.01 |
mini portemonnaie herren | 42244 | 25 | 21701.3 |
Häufigkeit der Amazon Suchbegriffe
Interessant ist auch eine Analyse nach Häufigkeit:
Hier sieht man, dass es viele sog. "one-hit-wonder" in den Daten gibt, also Suchbegriffe, die nur einmal in einer der Dateien auftauchen.
Schauen wir uns die ersten 20 mal an:
Suchbegriff | mean | count | std |
---|---|---|---|
cyber monday fashion sale | 163 | 1 | nan |
lazy leaf | 182 | 1 | nan |
amazon on | 290 | 1 | nan |
schneepflug ferngesteuert | 550 | 1 | nan |
led kerzen luminicious | 647 | 1 | nan |
lazy leaf blumentopf | 810 | 1 | nan |
toilettenpapier, 3 lagig, 200 blatt | 873 | 1 | nan |
1-cent produkte | 950 | 1 | nan |
desinfektionsmittel amazon | 976 | 1 | nan |
bunions | 1004 | 1 | nan |
wuya iphone kabel | 1029 | 1 | nan |
wuya lightning kabel | 1161 | 1 | nan |
wuya iphone ladekabel | 1180 | 1 | nan |
cb lash | 1378 | 1 | nan |
pursources urea 40% foot cream 4 oz - best callus remover - moisturizes | 1436 | 1 | nan |
dream pairs stiefel | 1440 | 1 | nan |
iphone 6s zertifiziert | 1668 | 1 | nan |
glitzer käfer hugo holunderblüte | 1681 | 1 | nan |
toilettepapier | 1803 | 1 | nan |
Da diese Analyse zur Zeit des Corona-Virus entstanden ist, ist es nicht verwunderlich, dass hier auch Suchanfragen wie "toilettenpapier, 3 lagig, 200 blatt" auftauchen.
Saisonale Suchbegriffe
Die dritte oben gezeigte Spalte "std" zeigt die Standardabweichung. Je höher diese Zahl ist, desto stärker schwankt der Artikel über die Zeit. Oder in anderen Worten, die Nachfrage ist sehr unterschiedlich je nach Zeitraum.
Mit folgendem Befehl erhalten wir die 50 Suchbegriffe, die in allen CSV-Dateien enthalten waren und die größte Standardabweichung haben:
# Zeige die Top 50 Suchbegriffe, die sehr saisonal sind
df4.loc[df4['count'] > 24].sort_values(by=['std'], ascending=False).round().head(50)
Suchbegriff | mean | count | std |
---|---|---|---|
gartenmöbel rattan | 139184 | 25 | 167159 |
pool pumpe | 177659 | 25 | 164494 |
bachlaufpumpe | 190223 | 25 | 163726 |
rattan gartenmöbel | 120092 | 25 | 161254 |
dirndl mädchen | 184818 | 25 | 156153 |
superfit sandalen junge | 156790 | 25 | 154468 |
gasgrill 2 brenner | 210552 | 25 | 147982 |
rasiermesser set herren | 211716 | 25 | 147492 |
gartentisch ausziehbar | 107347 | 25 | 146850 |
gardena sprinklersystem | 125091 | 25 | 146624 |
bodyglide | 220597 | 25 | 145493 |
staudenhalter | 155833 | 25 | 145325 |
kinderhelm 2 jahre mädchen | 241608 | 25 | 144926 |
fahrrad trikot herren | 204151 | 25 | 144730 |
flash forward | 186989 | 25 | 144543 |
dulcolax dragees | 178226 | 25 | 144403 |
pflanzkübel holz | 126201 | 25 | 144161 |
gartentisch rund | 143377 | 25 | 144013 |
olaplex 4 und 5 | 198256 | 25 | 143025 |
mückenstift | 189198 | 25 | 142321 |
pfostenkappen 9x9 | 155811 | 25 | 142319 |
abwassertank wohnwagen | 180296 | 25 | 142278 |
sneaker schuhe damen | 134467 | 25 | 141915 |
traillaufschuhe herren | 167606 | 25 | 141755 |
aqua kem blue | 190651 | 25 | 141391 |
puma schuhe kinder | 145302 | 25 | 141385 |
merjungfrauen flossen für kinder | 110633 | 25 | 141235 |
zelt 6 person | 161706 | 25 | 141204 |
stihl motorsense | 174402 | 25 | 141132 |
sandkiste | 121378 | 25 | 141089 |
fahrrad flickzeug set | 156014 | 25 | 141009 |
pantoletten damen mit absatz | 176384 | 25 | 140303 |
wandbrunnen | 202081 | 25 | 140287 |
bauchtasche damen adidas | 171269 | 25 | 139889 |
maurerwinkel | 190492 | 25 | 139651 |
glasbehälter mit deckel set | 179705 | 25 | 139060 |
malcom mittendrin | 207466 | 25 | 138776 |
pool rund | 160478 | 25 | 138643 |
fatboy hängematte | 172437 | 25 | 138641 |
sprunggelenk bandage | 160259 | 25 | 138526 |
eisensulfat | 201231 | 25 | 138178 |
now apocalypse | 265801 | 25 | 138165 |
schutzblech 26 zoll | 199997 | 25 | 138128 |
bella and the bulldogs staffel 1 | 152086 | 25 | 138059 |
gartenschlauch gardena | 169311 | 25 | 137692 |
inliner rollen | 210078 | 25 | 137606 |
fliegenhaube pferde | 220070 | 25 | 136842 |
windschutz gaskocher | 168331 | 25 | 136827 |
ralph lauren herren t shirt | 149395 | 25 | 136783 |
gymondo | 168555 | 25 | 136419 |
Nicht überraschend finden sich hier viele Artikel für den Garten (Sommer).
Dieser Artikel kann nur einen Überblick geben, was alles mit Jupyter Notebooks möglich ist. Einen weitere Artikel zu diesem Thema haben wir auf unserm Agentur-Blog veröffentlich. Hier geht es um die Analyse von Amazon Daten mit Hilfe von Jupyter Notebooks.
Weitere Artikel, die Ihnen erklären, wie Sie unter anderem mit Pandas arbeiten: