資源簡介
對其Excel數據進行關聯規則分析之前需要對數據進行預處理:將表頭去掉,并保存你所需要的數據,導入你所需要分析的Excel地址和‘Sheet1’,所得出的數據,即是你所需要的結果。

代碼片段和文件信息
import?xlrd
import?numpy?as?np
doc?=?open(‘result.txt‘?‘w‘)
#?打開Excel表格
wk?=?xlrd.open_workbook(‘C:\\Users\\Admin\\Desktop\\sales_fact_1997(樣本).xlsx‘)
worksheet?=?wk.sheet_names()
sf?=?wk.sheet_by_name(u‘Sheet1‘)
#?導入數據?建立事務型列表?例如【【1,2】【1,2,2】【4,1,4】【1,2,5】】
num_rows?=?sf.nrows
A?=?[]
finalList?=?[]
A.append(sf.cell_value(0?0))
for?i?in?range(1?num_rows):
????if?sf.cell_value(i?1)?==?sf.cell_value(i?-?1?1):
????????A.append(sf.cell_value(i?0?))
????else:
????????finalList.append(A)
????????A?=?[sf.cell_value(i?0)]
finalList.append(A)
#?運用Aprior算法來進行關聯規則分析
def?loadDataSet():
????return?finalList
def?createC1(dataSet):
????C1?=?[]
????for?transaction?in?dataSet:
????????for?item?in?transaction:
????????????if?[item]?not?in?C1:
????????????????C1.append([item])
????C1.sort()
????return?[frozenset(var)?for?var?in?C1]
def?scanD(D?Ck?minSupport):
????ssCnt?=?{}
????for?tid?in?D:??#?對于每一條transaction
????????for?can?in?Ck:??#?對于每一個候選項集can,檢查是否是transaction的一部分?#?即該候選can是否得到transaction的支持
????????????if?can.issubset(tid):
????????????????ssCnt[can]?=?ssCnt.get(can?0)?+?1
????numItems?=?float(len(D))
????retList?=?[]
????supportData?=?{}
????for?key?in?ssCnt:
????????support?=?ssCnt[key]?/?numItems??#?每個項集的支持度
????????if?support?>=?minSupport:??#?將滿足最小支持度的項集,加入retList
????????????retList.insert(0?key)
????????supportData[key]?=?support??#?匯總支持度數據
????return?retList?supportData
def?aprioriGen(Lk?k):??#?Aprior?算法
????retList?=?[]
????lenLk?=?len(Lk)
????for?i?in?range(lenLk):
????????for?j?in?range(i?+?1?lenLk):
????????????L1?=?list(Lk[i])[:?k?-?2];
????????????L2?=?list(Lk[j])[:?k?-?2];
????????????L1.sort();
????????????L2.sort()
????????????if?L1?==?L2:
????????????????retList.append(Lk[i]?|?Lk[j])
????return?retList
def?apriori(dataSet?minSupport):
????C1?=?createC1(dataSet)??#?構建初始候選項集C1
????D?=?[set(var)?for?var?in?dataSet]
????L1?suppData?=?scanD(D?C1?minSupport)??#?構建初始的頻繁項集,即所有項集只有一個元素
????L?=?[L1]??#?最初的L1中的每個項集含有一個元素,新生成的
????k?=?2??#?項集應該含有2個元素,所以?k=2
????while?len(L[k?-?2])?>?0:
????????Ck?=?aprioriGen(L[k?-?2]?k)
????????Lk?supK?=?scanD(D?Ck?minSupport)
????????suppData.update(supK)??#?將新的項集的支持度數據加入原來的總支持度字典中
????????L.append(Lk)??#?將符合最小支持度要求的項集加入L
????????k?+=?1??#?新生成的項集中的元素個數應不斷增加
????return?L?suppData??#?返回所有滿足條件的頻繁項集的列表,和所有候選項集的支持度信息
def?calcConf(freqSet?H?supportData?brl?minConf):??#?規則生成與評價
????prunedH?=?[]
????for?conseq?in?H:
????????conf?=?supportData[freqSet]?/?supportData[freqSet?-?conseq]
????????if?conf?>=?minConf:
????????????print(freqSet?-?conseq?‘-->‘?conseq?‘conf:‘?conf)
????????????brl.append((freqSet?-?conseq?conseq?conf))
????????????prunedH.append(conseq)
????return?prunedH
def?rulesFromConseq(freqSet?H?supportData?brl?minConf):
????m?=?len(H[0])
????if?len(freqSet)?>?m?+?1:??#?查看頻繁項集是否足夠大,以到于移除大小為?m的子集,否則繼續生成m+1大小的頻繁項集
????????Hmp1?=?aprioriGen(H?m?+?1)
????????Hmp1?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????23814??2018-10-26?11:40??sales_fact_1997(樣本).xlsx
?????文件???????5350??2018-10-26?19:24??hWork.py
?????文件??????18832??2018-10-26?19:50??關聯規則.docx
-----------?---------??----------?-----??----
????????????????47996????????????????????3
- 上一篇:回音抑制的分析總結以及方法
- 下一篇:SPSS數據分析172915
評論
共有 條評論