Es schien nicht mit to_dict zu funktionieren, also habe ich es selbst versucht. Der Grund war, dass ich Kaufdaten durch Co-Filterung verarbeiten wollte, jedoch mit einem Datenrahmen Es schien nicht zu funktionieren. Außerdem möchte ich die Empfehlungslogik wie bei der kollektiven Intelligenzprogrammierung ausprobieren. Ich wollte die Daten im vorliegenden Datenrahmen verwenden, indem ich sie irgendwie konvertierte.
# coding: utf-8
import pandas as pd
from collections import defaultdict
df = pd.DataFrame({'id':['a','a','b','b','c',], 'shouhin':['x', 'y', 'y','z', 'x']})
Angenommen, Sie haben die folgenden Daten
id shouhin
0 a x
1 a y
2 b y
3 b z
4 c x
Der Zweck besteht darin, dies in ein Wörterbuch wie das folgende zu ändern.
{'a': ['y', 'x'], 'b': ['y', 'z'], 'c': ['x']}
Erstellen Sie zunächst ein Wörterbuch mit defaultdict. Rufen Sie dann jede Zeile mit df.values ab und erstellen Sie ein Wörterbuch mit verschachtelten Elementen. (df.values gibt numpy.array zurück)
tempdic = defaultdict(dict)
for d in df.values:
tempdic[d[0]][d[1]] = 1.0 #Jeder Wert ist akzeptabel
Dann können Sie Folgendes tun.
dic = {k: tempdic[k].keys() for k in tempdic}
Wenn man sich das Dic ansieht, ist es wie erwartet
{'a': ['y', 'x'], 'c': ['x'], 'b': ['y', 'z']}
Wenn Sie set verwenden, erhalten Sie gängige Produkte und es ist einfach, den Jaccard-Koeffizienten zu berechnen.
{'y'}```
Auch wenn Sie den ersten Teil nicht auf df.values setzen, können Sie die Elemente jeder Zeile mit df.iloc [Zeilennummer] schleifen und abrufen.
Es ist möglich, aber in diesem Fall ist die Geschwindigkeit viel langsamer.
Beim Kauf von Daten denke ich, dass die Datenmenge ziemlich groß ist, daher ist es schwierig, wenn sie hier langsam ist.
Ich denke auch, dass es eine Möglichkeit gibt, alles auf einmal mit while und if zu erledigen, aber dies gibt auch der Geschwindigkeit Priorität.
Ich versuche, eine solche Methode nicht anzuwenden.