(Dies ist nur ein Witz)
Das diesjährige Thema für PyCon lautet "Jeder ist anders, jeder ist gut".
Wählen wir also eine Vorlesung, die alle Elemente enthält. Verwenden Sie das Problem der kollektiven Abdeckung in der Kombinationsoptimierung (http://qiita.com/Tsutomu-KKE@github/items/bfbf4c185ed7004b5721).
Die Nationalität des Sprechers, das Niveau der Vorlesung, das Feld der Vorlesung usw. werden zufällig festgelegt. Die Punktzahl ist zum Beispiel die Anzahl der "Likes".
python
import numpy as np, pandas as pd
np.random.seed(1)
n = 20
a = pd.DataFrame({
'Land': np.random.choice('アメリカ イギリス インド フランス ロシア 中Land'.split(), n),
'Niveau': np.random.choice('Anfänger Mittelmässiger Fortgeschrittener'.split(), n),
'Feld': np.random.choice('Datenanalyseoptimierung Maschinelles Lernen Dokument Web'.split(), n),
'Ergebnis': np.random.randint(1, 10, n),
})
print(a)
Niveau | Feld | Land | Ergebnis |
---|---|---|---|
0 | Anfänger | Web | China |
1 | Fortgeschrittene | Optimierung | Frankreich |
2 | Anfänger | Datenanalyse | Russland |
... | ... | ... | ... |
19 | Anfänger | Datenanalyse | Frankreich |
Verwenden Sie ortoolpy.set_covering. Da es sich um eine Minimierung handelt, haben wir die Umkehrung der Punktzahl gewichtet.
python
from ortoolpy import set_covering
n = sum(b.nunique() for b in [a.Niveau, a.Feld, a.Land]) #Insgesamt eindeutige Anzahl
res = set_covering(n, [(1/r.Ergebnis, r[:3].tolist()) for _, r in a.iterrows()])
print(a.ix[res])
Niveau | Feld | Land | Ergebnis |
---|---|---|---|
5 | Fortgeschrittene | Maschinelles Lernen | Frankreich |
8 | Mittlere | Dokument | Amerika |
10 | Anfänger | Optimierung | Russland |
13 | Mittlere | Datenanalyse | England |
14 | Mittlere | Optimierung | Indien |
16 | Fortgeschrittene | Web | China |
Sie können sehen, dass alle Elemente angezeigt wurden.
das ist alles
Recommended Posts