該教程為入門教程,為博主學習資料探勘的學習路徑步驟。教程為入門教程,從最簡單的開始。使用的程式語言為python3.8.1,使用jupyternotebook作為開發環境(使不使用jupyternotebook都沒有關係)。
在學習本教程之前,你需要:
什麼是資料探勘, 相信點選進入這篇部落格的人都應該知道了吧。通俗的說就是挖掘資料所蘊含的含義,尋找資料之間的關係。
下面將以最簡單的親和性分析來開始吧。
在美國的零售業有著這樣乙個傳奇故事,沃爾瑪百貨將他們的紙尿褲和啤酒併排擺在一起銷售,結果紙尿褲和啤酒的銷量雙雙增長!什麼是親和性分析呢?親和性分析根據樣本個體之間的關係,確定它們關係的親疏。舉乙個簡單的應用:顧客去超市買了乙個蘋果,那麼他會不會很大的可能性去買香蕉呢?
首先,我們得有乙個資料集:
這個是乙個很簡單的商品交易資料集,簡單到它只有100條資料,儘管資料比較少,but我們用來學習一下還是可以的。
資料集的含義:
如果看一行的話,每一行如(0,1,0,0,1)可以代表每一條交易包含的商品,0代表沒有購買,1代表購買。每一列代表一種商品。
那麼我們需要找出他的什麼資料含義規則呢?「如果乙個顧客購買了商品a,則他很可能購買商品b」。找到這種規則很簡單,找出交易資料中同時購買a商品和b商品的記錄,然後與總的交易數量相比較即可。
規則有優劣,這裡有兩種衡量標準,支援度
和置信度
。(如果商品交易資料)
使用的庫如下:
資料集在這裡:data
首先我們需要載入資料集,資料的檔名為affinity_dataset.txt
:
import numpy as np
data_filename = "affinity_dataset.txt"
datas = np.loadtxt(data_filename)
# 列的屬性
features = ["麵包", "牛奶", "黃油", "蘋果", "香蕉蕉"]
資料集我們已經載入完畢,為了得到商品a和商品b的資料,在python中也就是(商品a,商品b)元組,我們需要進行遍歷,然後將資料儲存下來。
現在讓我們來計算置信度。我們使用valid_rules
字典來儲存商品a和商品b同時存在的記錄,使用invalid_rules
來儲存當商品a存在時,但是商品b不存在的記錄。
valid_rules = defaultdict(int)
invalid_rules = defaultdict(int)
我們使用defaultdict來建立字典而不是使用常用的方式是因為:
這樣的好處是即使在沒有這個key的時候,它也會返回預設的值0。
我們定義乙個方法,目的是為了統計a,b之間的關係。
# a 和 b之間的聯絡,返回購買a商品的數量
defconnect
(indexa, indexb):
buy_a_num = 0
for sample in datas:
if sample[indexa] == 0:
continue
buy_a_num += 1
if(sample[indexb] == 1):
valid_rules[(indexa, indexb)] += 1
else:
invalid_rules[(indexa, indexb)] += 1
return buy_a_num
方法,我們就可以獲得需要的資料,現在我們可以計算置信度了。
def
get_confidence
(): confidence = defaultdict(float)
for premise, feature in valid_rules.keys():
rule = (premise, feature)
confidence[rule] = valid_rules[rule] / (valid_rules[rule]+invalid_rules[rule])
print("購買後同時的置信度為:".format(features[rule[0]],features[rule[1]],confidence[rule]))
return confidence
當然支援度怎麼算,這個就太簡單了,就是valid_rules
裡面的value除以資料總量即可,就不展示了。
執行**,使用for迴圈將所有的關係都找出來,然後計算置信度:
if __name__ == "__main__":
for i in range(len(features)):
for j in range(len(features)):
if(i == j):
continue
connect(i,j)
confidence = get_confidence()
最後結果如下所示:
同樣我們可以對置信度進行排序,字典的items()函式返回包含字典所有元素的列表。itemgetter(1)表示以字典各元素的值(這裡為置信度)作為排序依據,reverse=true表示降序排列。
from operator import itemgetter
sort_dict = sorted(confidence.items(),key=itemgetter(1),reverse=true)
for index in range(5):
rule = sort_dict[index][0]
print("購買後同時的置信度為:".format(features[rule[0]],features[rule[1]],confidence[rule]))
結果如下圖所示:
資料探勘入門系列 資料探勘基礎
伴隨著資訊化系統建設的發展,各行各業的中大型企業都儲存了大量的業務資料。很多的企業想要通過對這些資料的分析,來發現新的商機以及從這些資料中找到提高盈利的方法。大部分的企業,都是憑藉管理人員的自身個人經驗來開展這項工作。如果有一套系統,能夠自動地或者半自動地發現相關的知識和解決方案,這樣將會有效地提高...
資料探勘系列筆記(1) 親和性分析
親和性分析是根據樣本個體 物體 之間的相似度,確定它們關係的親疏。在資料探勘中有大量的應用場景,比如顧客更願意同時購買哪些物品。親和性有多種測量方法。例如,統計兩件商品一起 的頻率,或者統計顧客購買了商品1 後再買商品2的比率。最常用的用來進行親和性分析的兩個重要概念是 支援度 support 和置...
資料探勘入門系列 Python快速入門
本次入門系列將使用python作為開發語言。要使用python語言,我們先來搭建python開發平台。我們將基於python 2.7版本 以及python的開發發行版本anaconda版本來開發。anaconda指的是乙個開源的python發行版本,其包含了conda python等180多個科學包...