Visualisierung von häufig zusammen gekauften Artikeln
10
Ich habe einen Datensatz in folgender Struktur in eine CSV-Datei eingefügt:
BananaWaterRiceRiceWaterBreadBananaJuice
Jede Zeile zeigt eine Sammlung von Artikeln an, die zusammen gekauft wurden. Zum Beispiel zeigt die erste Zeile , dass die Elemente Banana, Water, und Ricezusammen gekauft wurden.
Ich möchte eine Visualisierung wie die folgende erstellen:
Dies ist im Grunde ein Rasterdiagramm, aber ich benötige ein Tool (möglicherweise Python oder R), das die Eingabestruktur lesen und ein Diagramm wie das obige als Ausgabe erstellen kann.
Ich denke, was Sie wahrscheinlich wollen, ist eine diskrete Version einer Heatmap. Zum Beispiel siehe unten. Die roten Farben zeigen die am häufigsten zusammen gekauften an, während grüne Zellen niemals zusammen gekauft werden.
Dies ist eigentlich ziemlich einfach mit Pandas DataFrames und matplotlib zusammenzustellen.
import numpy as np
from pandas importDataFrameimport matplotlib
matplotlib.use('agg')# Write figure to disk instead of displaying (for Windows Subsystem for Linux)import matplotlib.pyplot as plt
##### Get data into a data frame####
data =[['Banana','Water','Rice'],['Rice','Water'],['Bread','Banana','Juice'],]# Convert the input into a 2D dictionary
freqMap ={}for line in data:for item in line:ifnot item in freqMap:
freqMap[item]={}for other_item in line:ifnot other_item in freqMap:
freqMap[other_item]={}
freqMap[item][other_item]= freqMap[item].get(other_item,0)+1
freqMap[other_item][item]= freqMap[other_item].get(item,0)+1
df =DataFrame(freqMap).T.fillna(0)print(df)###### Create the plot#####
plt.pcolormesh(df, edgecolors='black')
plt.yticks(np.arange(0.5, len(df.index),1), df.index)
plt.xticks(np.arange(0.5, len(df.columns),1), df.columns)
plt.savefig('plot.png')
Vielen Dank :) Kann ich das mit Spark Mllib erstellen?
João_testeSW
@ João_testeSW Das kannst du wahrscheinlich, aber ich bin mit Spark nicht vertraut.
Apnorton
Haben Sie eine IDE für die Ausführung dieses Codes empfohlen?
João_testeSW
@ João_testeSW Wenn Sie dies in einer Datei als "somescript.py" speichern, können Sie es mit "python3 somescript.py" auf dem Terminal ausführen. Keine IDE erforderlich, aber wenn Sie es in eine Python-fähige IDE laden, sollte es ausgeführt werden.
Apnorton
danke;) Ich werde sehen, ob ich es in Pyspark verwenden kann, wenn ja, dann kann ich den Beitrag mit der Lösung bearbeiten;)
João_testeSW
3
Für Rkönnen Sie Bibliothek verwenden ArulesViz. Es gibt eine schöne Dokumentation und auf Seite 12 finden Sie ein Beispiel für die Erstellung dieser Art von Visualisierung.
Sie können dies in Python mit der Seaborn-Visualisierungsbibliothek tun (die auf Matplotlib basiert).
data =[['Banana','Water','Rice'],['Rice','Water'],['Bread','Banana','Juice'],]# Pull out combinationsfrom itertools import combinations
data_pairs =[]for d in data:
data_pairs +=[list(sorted(x))+[1]for x in combinations(d,2)]# Add reverse as well (this will mirror the heatmap)
data_pairs +=[list(sorted(x))[::-1]+[1]for x in combinations(d,2)]# Shape into dataframeimport pandas as pd
df = pd.DataFrame(data_pairs)
df_zeros = pd.DataFrame([list(x)+[0]for x in combinations(df[[0,1]].values.flatten(),2)])
df = pd.concat((df, df_zeros))
df = df.groupby([0,1])[2].sum().reset_index().pivot(0,1,2).fillna(0)import seaborn as sns
from matplotlib.pyplot import plt
sns.heatmap(df, cmap='YlGnBu')
plt.show()
Der endgültige Datenrahmen dfsieht folgendermaßen aus:
Für
R
können Sie Bibliothek verwendenArulesViz
. Es gibt eine schöne Dokumentation und auf Seite 12 finden Sie ein Beispiel für die Erstellung dieser Art von Visualisierung.Der Code dafür ist so einfach:
quelle
Mit Wolfram Language in Mathematica .
Holen Sie sich paarweise Zählungen.
Holen Sie sich Indizes für benannte Zecken.
Plotten Sie mit
MatrixPlot
usingSparseArray
. Könnte auch verwendenArrayPlot
.Beachten Sie, dass es ein oberes Dreieck ist.
Hoffe das hilft.
quelle
Sie können dies in Python mit der Seaborn-Visualisierungsbibliothek tun (die auf Matplotlib basiert).
Der endgültige Datenrahmen
df
sieht folgendermaßen aus:und die resultierende Visualisierung ist:
quelle