版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
**學(xué)?!皩ふ谊P(guān)聯(lián)次數(shù)最多的商品”問題之算法實(shí)現(xiàn)分析報(bào)告姓名: 班級:學(xué)號: 指導(dǎo)老師: 日期:~項(xiàng)目目標(biāo)通過項(xiàng)目設(shè)計(jì),初步掌握數(shù)據(jù)采集、數(shù)據(jù)整理和數(shù)據(jù)預(yù)處理的方法,領(lǐng)悟數(shù)據(jù)的價(jià)值、數(shù)據(jù)計(jì)算的意義。學(xué)會使用Python語言編寫程序,解決實(shí)際問題,掌握程序調(diào)試與運(yùn)行的方法。通過小組合作完成項(xiàng)目活動,提升團(tuán)隊(duì)協(xié)作、與人溝通分享的能力。2項(xiàng)目準(zhǔn)備階段2.1背景人們通過研究發(fā)現(xiàn),將某些不同商品(比如休閑食品和飲料)陳列在一起銷售,能使相關(guān)商品的銷售量增長20%~30%。為了尋找這些能相互促進(jìn)銷量的商品,就需要進(jìn)行商品的關(guān)聯(lián)分析?!爸С侄取笔欠从成唐逢P(guān)聯(lián)性的一個重要度量值,為了統(tǒng)計(jì)相關(guān)商品的支持度,需要先統(tǒng)計(jì)相關(guān)商品的關(guān)聯(lián)次數(shù)。關(guān)聯(lián)次數(shù)指的是不同商品同時(shí)出現(xiàn)在同一個購物籃中的次數(shù)。表1購物籃中的關(guān)聯(lián)商品購物籃購物流水號商品購物籃1201609270027x1,x2,x3,x4,x5,x6購物籃2201609270028x1,x4,x7,x8,x9購物籃3201609270029x2,x5,x6,x7,x9如表1所示,商品x1和x4的關(guān)聯(lián)次數(shù)是2(這兩個不同商品在購物籃1和購物籃2中同時(shí)出現(xiàn));商品x2,x5,和x6的關(guān)聯(lián)次數(shù)是2(這三個不同商品在購物籃1和購物籃3中同時(shí)出現(xiàn));商品x5和x6的關(guān)聯(lián)次數(shù)是2(這兩個不同商品在購物籃1和購物籃3中同時(shí)出現(xiàn))。我們需要根據(jù)超市某個時(shí)期內(nèi)的流水記錄,找出超市內(nèi)關(guān)聯(lián)次數(shù)最多的一對或多對商品,通過商品的關(guān)聯(lián)分析來改進(jìn)商品的陳列,從而方便顧客購物。2.2項(xiàng)目內(nèi)容我們通過聯(lián)系超市相關(guān)負(fù)責(zé)人,承諾幫助他們進(jìn)行商品的關(guān)聯(lián)分析,以便為他們的營銷策略提供重要參考,獲得了大量超市流水賬數(shù)據(jù),為了便于存儲和處理商品信息,我們按照1-n的順序重新編輯了貨號,并把數(shù)據(jù)存儲在Excel電子表格中(如下圖所示)。程序基本要求:(1)從Excel電子表格中讀取貨號和流水號;(2)將流水號相同的商品存儲到同一列表中;(3)統(tǒng)計(jì)各商品關(guān)聯(lián)次數(shù);(4)找出關(guān)聯(lián)次數(shù)最多一對或多對的商品。2.3程序總體功能程序總體流程圖如下圖所示:程序包含了3個主要部分:讀取和預(yù)處理數(shù)據(jù),統(tǒng)計(jì)商品的關(guān)聯(lián)次數(shù),尋找最大的關(guān)聯(lián)次數(shù)。相應(yīng)的具體實(shí)現(xiàn)代碼,在之后的篇幅中詳細(xì)介紹。3 程序設(shè)計(jì)過程 根據(jù)程序設(shè)計(jì)的模塊化思想,我們將程序進(jìn)行功能的模塊化。因?yàn)楸卷?xiàng)目功能比較單一,代碼相對簡單,再加上Python提供了豐富的內(nèi)置函數(shù),所以我們沒有自定義函數(shù),而是直接在主函數(shù)中按順序?qū)崿F(xiàn)了各環(huán)節(jié)功能。以下是我們的程序設(shè)計(jì)過程:3.1 讀取超市流水賬我們引用了第三方庫openpyxl從Excel電子表格中讀取超市流水賬數(shù)據(jù)。Openpyxl是一個專門用來處理xlsx文件的庫,它非常簡單實(shí)用,只需調(diào)用一些簡單的函數(shù)就能輕松的實(shí)現(xiàn)xlsx文件的讀寫和數(shù)據(jù)處理。我們使用語句fromopenpyxlimportload_workbook引入庫,然后打開"超市流水賬.xlsx"文件,讀取“流水賬”工作表,并把貨號和流水號提取出來,分別存儲到列表a和b中。wb=load_workbook("超市流水賬.xlsx")ws=wb['流水賬']a=list(map(lambdax:x.value,ws['A']))#提取貨號b=list(map(lambdax:x.value,ws['F']))#提取流水號3.2 初始化商品關(guān)聯(lián)次數(shù)我們設(shè)貨號的最大值為n,則貨號取值范圍[1,n],因?yàn)楹竺娴挠?jì)算是以貨號值為下標(biāo),舍棄了下標(biāo)為0的元素,故需要設(shè)置大小為(n+1)*(n+1)的二維數(shù)組incidence_times,并初始化所有數(shù)組元素均為0。n=max(a[1:])#各商品的貨號取值范圍[1,n]#存儲各商品關(guān)聯(lián)次數(shù)的二維數(shù)組incidence_times=[[0foriinrange(n+1)]forjinrange(n+1)]3.3 存儲流水號相同的商品為了便于統(tǒng)計(jì)各商品的關(guān)聯(lián)次數(shù),我們建立一個字典serial_number,該字典以流水號為鍵,以流水號相同的商品列表為值。serial_number={}#以流水號為鍵,存儲相同流水號的商品#將流水號相同的商品存儲到同一列表中fori,numinenumerate(a[1:]):ifb[i]inserial_number:serial_number[b[i]].append(num)else:serial_number[b[i]]=[num]3.4 統(tǒng)計(jì)各商品關(guān)聯(lián)次數(shù) 遍歷所有購物籃,為每個購物籃內(nèi)的商品建立關(guān)聯(lián),并使其關(guān)聯(lián)次數(shù)增1,這樣就可以統(tǒng)計(jì)出所有商品之間的關(guān)聯(lián)次數(shù)。#統(tǒng)計(jì)各商品關(guān)聯(lián)次數(shù)forkey,vinserial_number.items():print(f'{key}:{v}')foriinrange(len(v)-1):forjinrange(i+1,len(v)):incidence_times[v[i]][v[j]]+=1incidence_times[v[j]][v[i]]+=13.5 尋找關(guān)聯(lián)次數(shù)最多的商品采用枚舉算法,遍歷二維數(shù)組incidence_times,找出關(guān)聯(lián)次數(shù)最多的商品,輸出其關(guān)聯(lián)次數(shù)max_num和對應(yīng)的商品貨號sp1和sp2。#尋找關(guān)聯(lián)次數(shù)最多的商品max_num,sp1,sp2=0,0,0foriinrange(1,n):forjinrange(i+1,n+1):ifincidence_times[i][j]>=max_num:max_num,sp1,sp2=incidence_times[i][j],i,j3.6 輸出關(guān)聯(lián)次數(shù)最多的商品 因?yàn)橛锌赡艽嬖诙鄬﹃P(guān)聯(lián)次數(shù)最多的商品,所以我們需要再次二維數(shù)組incidence_times,找出關(guān)聯(lián)次數(shù)等于max_num的所有商品對。#輸出一對或多對關(guān)聯(lián)次數(shù)最多的商品foriinrange(1,n):forjinrange(i+1,n+1):ifincidence_times[i][j]==max_num:print(f'關(guān)聯(lián)次數(shù)最多的商品是{i}和{j},最大關(guān)聯(lián)次數(shù)為{max_num}')4.程序測試4.1 輸出各流水號中的貨號信息(此處只截取了部分流水號信息)4.2 輸出一對或多對關(guān)聯(lián)次數(shù)最多的商品5.程序改進(jìn)5.1 改進(jìn)尋找和輸出關(guān)聯(lián)次數(shù)最多的商品的代碼在第1版的程序中,我們通過遍歷二維數(shù)組的方式,采用二重循環(huán),尋找并輸出了關(guān)聯(lián)次數(shù)最多的商品。這是常規(guī)做法,但是沒有利用Python語言強(qiáng)大內(nèi)置函數(shù)和列表生成式的功能,代碼不夠簡潔。在第2版中,我們充分利用了Python的內(nèi)置函數(shù)max()和列表生成式功能,可以快速簡潔地實(shí)現(xiàn)相同功能。#尋找關(guān)聯(lián)次數(shù)最多的商品max_num=max([max(i)foriinincidence_times])#有可能存在多對關(guān)聯(lián)次數(shù)最多的商品sp=[(i,j)foriinrange(1,n)forjinrange(i+1,n+1)ifincidence_times[i][j]==max_num]fori,jinsp:print(f'關(guān)聯(lián)次數(shù)最多的商品是{i}和{j},最大關(guān)聯(lián)次數(shù)為{max_num}')5.2 增加查詢關(guān)聯(lián)次數(shù)為任意值的商品對功能考慮到超市為了更好地制定營銷策略,可能想知道關(guān)聯(lián)次數(shù)為任意值的商品對功能,我們增加了一個查詢關(guān)聯(lián)次數(shù)的功能。#尋找關(guān)聯(lián)次數(shù)最多的商品max_num=max([max(i)foriinincidence_times])print(f'最大關(guān)聯(lián)次數(shù)為{max_num}')#輸出關(guān)聯(lián)次數(shù)為num的商品num=int(input('請輸入商品的關(guān)聯(lián)次數(shù),結(jié)束程序輸入0:'))whilenum>0:sp=[(i,j,incidence_times[i][j])foriinrange(1,n)forjinrange(i+1,n+1)ifincidence_times[i][j]==num]fori,j,numinsp:print(f'商品{i}和{j}的關(guān)聯(lián)次數(shù)為{num}')num=int(input('請輸入商品的關(guān)聯(lián)次數(shù),結(jié)束程序輸入0:'))6.總結(jié)經(jīng)過這一周的項(xiàng)目挑戰(zhàn),我們對Python程序設(shè)計(jì)的知識有了更深的理解,特別是對程序設(shè)計(jì)的基本步驟以及思想有了更具體、深刻的體會。通過一次次的解決難題,使我們不僅鞏固了理論知識,還培養(yǎng)了我們靈活運(yùn)用知識、解決實(shí)際問題的能力。其次,這個項(xiàng)目是我們小組團(tuán)隊(duì)協(xié)作完成的,在項(xiàng)目挑戰(zhàn)過程中,我們團(tuán)隊(duì)成員相互激勵,相互幫助,共同面對困難和挑戰(zhàn),極大地激發(fā)了我們的創(chuàng)新意識和團(tuán)隊(duì)協(xié)作能力。在這次的項(xiàng)目挑戰(zhàn)中,我們也體會到了程序設(shè)計(jì)的辛苦。首先是采集數(shù)據(jù)的困難,那么多的數(shù)據(jù)要輸入到Excel電子表格,還要進(jìn)行數(shù)據(jù)的預(yù)處理,耗費(fèi)了我們很多的時(shí)間。其次就是編寫程序,這么長的一段代碼,敲寫時(shí)難免會犯錯,往往一個字母敲錯或者縮進(jìn)錯誤,就需要用上幾分鐘的時(shí)間來查找。由于我們的實(shí)踐經(jīng)驗(yàn)還很淺薄,程序在測試時(shí)也出現(xiàn)了幾個bug或者某些功能無法實(shí)現(xiàn),我們只能重新返回到對應(yīng)的代碼段,通過查詢書本和網(wǎng)絡(luò)來一一排除錯誤。當(dāng)程序終于能正常運(yùn)行,獲得正確的結(jié)果時(shí),那種成就感是無以言表的。但我們小組并沒有滿足于只獲得正確的結(jié)果,我們精益求精,繼續(xù)改善代碼,優(yōu)化算法,想到了很多改進(jìn)的思路。特別是當(dāng)我們增加了查詢
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版旅游服務(wù)貨款擔(dān)保合同范本3篇
- 2025年食堂食品安全監(jiān)督服務(wù)合同3篇
- 2025版二零二五苗木種植與城市綠化工程合作合同3篇
- 2025年高科技產(chǎn)品外貿(mào)經(jīng)銷代理合同范本3篇
- 2025年食堂蔬菜定制化種植合作合同3篇
- 云母制品在醫(yī)療器械中的應(yīng)用探索考核試卷
- 二零二五年度木門安裝與室內(nèi)智能家居系統(tǒng)集成合同4篇
- 2025版學(xué)校宿管員招聘、培訓(xùn)與薪酬合同3篇
- 2025版國務(wù)院辦公廳事業(yè)單位教師聘用合同細(xì)則3篇
- 2025年倉庫貨物存儲及保管合同
- GB/T 45120-2024道路車輛48 V供電電壓電氣要求及試驗(yàn)
- 春節(jié)文化常識單選題100道及答案
- 12123交管學(xué)法減分考試題及答案
- 24年追覓在線測評28題及答案
- 魚菜共生課件
- 《陸上風(fēng)電場工程概算定額》NBT 31010-2019
- 初中物理八年級下冊《動能和勢能》教學(xué)課件
- 高考滿分作文常見結(jié)構(gòu)
- 心肌梗死診療指南
- 原油脫硫技術(shù)
- GB/T 2518-2019連續(xù)熱鍍鋅和鋅合金鍍層鋼板及鋼帶
評論
0/150
提交評論