Pandas實例 - 怎樣計算每個學生成績最相似的10個學生
本文來自粉絲的一個需求,怎樣計算每個學生成績相近的10個學生?
需求

他的Excel表格是這個樣子:

包含每個學生的姓名,以及多個科目的成績。
怎么用Pandas實現(xiàn)呢?
解題思路
Pandas解題思路:
1、使用笛卡爾積的方式,得到 每個學生 和 另外所有學生的 關(guān)聯(lián)行
每個學生都要與其他所有行進行交叉關(guān)聯(lián),比如有100個學生,那應該得到100*100 = 1W行結(jié)果
2、對于關(guān)聯(lián)行,使用df.apply(function)的方法,計算兩兩相似度;
本步驟是為了計算每個學生和其他學生的 相似度
3、使用groupby + top n的方式,計算每個學生成績最相近的10個學生
步驟0:讀取數(shù)據(jù)

大家注意,這里的原始數(shù)據(jù)是60行;
步驟1:實現(xiàn)笛卡爾積
即實現(xiàn)每個學生與其他所有學生的關(guān)聯(lián)。這里的技巧,是先添加一個一模一樣的數(shù)字列,用此作為關(guān)聯(lián)列進行merge即可

我們看到,這里的結(jié)果行數(shù)是3600,也就實現(xiàn)了60個學生的兩兩交叉。
步驟2:實現(xiàn)每個學生的相似度計算

大家注意這里的用法,df.apply,可以按行回調(diào)一個函數(shù)進行處理

這里我多加了一步,把每個學生自己和自己關(guān)聯(lián)的行去掉。
步驟3:計算每個學生最相近的10個學生
其實就是實現(xiàn)group by + top n的效果

看下結(jié)果Excel文件
結(jié)果有3列,每個學生,以及他最相似的學生列表以及相似度值

視頻講解
代碼地址:
https://github.com/peiss/ant-learn-pandas
打開github后,第46集
如果本文對你有幫助,感謝點贊和再看^_^
評論
圖片
表情
