![附件3“尋找關(guān)聯(lián)次數(shù)最多的商品”問(wèn)題之算法實(shí)現(xiàn)分析報(bào)告_第1頁(yè)](http://file4.renrendoc.com/view/0bc5fb5036378617a36d4f910d842bcd/0bc5fb5036378617a36d4f910d842bcd1.gif)
![附件3“尋找關(guān)聯(lián)次數(shù)最多的商品”問(wèn)題之算法實(shí)現(xiàn)分析報(bào)告_第2頁(yè)](http://file4.renrendoc.com/view/0bc5fb5036378617a36d4f910d842bcd/0bc5fb5036378617a36d4f910d842bcd2.gif)
![附件3“尋找關(guān)聯(lián)次數(shù)最多的商品”問(wèn)題之算法實(shí)現(xiàn)分析報(bào)告_第3頁(yè)](http://file4.renrendoc.com/view/0bc5fb5036378617a36d4f910d842bcd/0bc5fb5036378617a36d4f910d842bcd3.gif)
![附件3“尋找關(guān)聯(lián)次數(shù)最多的商品”問(wèn)題之算法實(shí)現(xiàn)分析報(bào)告_第4頁(yè)](http://file4.renrendoc.com/view/0bc5fb5036378617a36d4f910d842bcd/0bc5fb5036378617a36d4f910d842bcd4.gif)
![附件3“尋找關(guān)聯(lián)次數(shù)最多的商品”問(wèn)題之算法實(shí)現(xiàn)分析報(bào)告_第5頁(yè)](http://file4.renrendoc.com/view/0bc5fb5036378617a36d4f910d842bcd/0bc5fb5036378617a36d4f910d842bcd5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
**學(xué)校“尋找關(guān)聯(lián)次數(shù)最多的商品”問(wèn)題之算法實(shí)現(xiàn)分析報(bào)告姓名: 班級(jí):學(xué)號(hào): 指導(dǎo)老師: 日期:~項(xiàng)目目標(biāo)通過(guò)項(xiàng)目設(shè)計(jì),初步掌握數(shù)據(jù)采集、數(shù)據(jù)整理和數(shù)據(jù)預(yù)處理的方法,領(lǐng)悟數(shù)據(jù)的價(jià)值、數(shù)據(jù)計(jì)算的意義。學(xué)會(huì)使用Python語(yǔ)言編寫(xiě)程序,解決實(shí)際問(wèn)題,掌握程序調(diào)試與運(yùn)行的方法。通過(guò)小組合作完成項(xiàng)目活動(dòng),提升團(tuán)隊(duì)協(xié)作、與人溝通分享的能力。2項(xiàng)目準(zhǔn)備階段2.1背景人們通過(guò)研究發(fā)現(xiàn),將某些不同商品(比如休閑食品和飲料)陳列在一起銷(xiāo)售,能使相關(guān)商品的銷(xiāo)售量增長(zhǎng)20%~30%。為了尋找這些能相互促進(jìn)銷(xiāo)量的商品,就需要進(jìn)行商品的關(guān)聯(lián)分析?!爸С侄取笔欠从成唐逢P(guān)聯(lián)性的一個(gè)重要度量值,為了統(tǒng)計(jì)相關(guān)商品的支持度,需要先統(tǒng)計(jì)相關(guān)商品的關(guān)聯(lián)次數(shù)。關(guān)聯(lián)次數(shù)指的是不同商品同時(shí)出現(xiàn)在同一個(gè)購(gòu)物籃中的次數(shù)。表1購(gòu)物籃中的關(guān)聯(lián)商品購(gòu)物籃購(gòu)物流水號(hào)商品購(gòu)物籃1201609270027x1,x2,x3,x4,x5,x6購(gòu)物籃2201609270028x1,x4,x7,x8,x9購(gòu)物籃3201609270029x2,x5,x6,x7,x9如表1所示,商品x1和x4的關(guān)聯(lián)次數(shù)是2(這兩個(gè)不同商品在購(gòu)物籃1和購(gòu)物籃2中同時(shí)出現(xiàn));商品x2,x5,和x6的關(guān)聯(lián)次數(shù)是2(這三個(gè)不同商品在購(gòu)物籃1和購(gòu)物籃3中同時(shí)出現(xiàn));商品x5和x6的關(guān)聯(lián)次數(shù)是2(這兩個(gè)不同商品在購(gòu)物籃1和購(gòu)物籃3中同時(shí)出現(xiàn))。我們需要根據(jù)超市某個(gè)時(shí)期內(nèi)的流水記錄,找出超市內(nèi)關(guān)聯(lián)次數(shù)最多的一對(duì)或多對(duì)商品,通過(guò)商品的關(guān)聯(lián)分析來(lái)改進(jìn)商品的陳列,從而方便顧客購(gòu)物。2.2項(xiàng)目?jī)?nèi)容我們通過(guò)聯(lián)系超市相關(guān)負(fù)責(zé)人,承諾幫助他們進(jìn)行商品的關(guān)聯(lián)分析,以便為他們的營(yíng)銷(xiāo)策略提供重要參考,獲得了大量超市流水賬數(shù)據(jù),為了便于存儲(chǔ)和處理商品信息,我們按照1-n的順序重新編輯了貨號(hào),并把數(shù)據(jù)存儲(chǔ)在Excel電子表格中(如下圖所示)。程序基本要求:(1)從Excel電子表格中讀取貨號(hào)和流水號(hào);(2)將流水號(hào)相同的商品存儲(chǔ)到同一列表中;(3)統(tǒng)計(jì)各商品關(guān)聯(lián)次數(shù);(4)找出關(guān)聯(lián)次數(shù)最多一對(duì)或多對(duì)的商品。2.3程序總體功能程序總體流程圖如下圖所示:程序包含了3個(gè)主要部分:讀取和預(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ì)過(guò)程 根據(jù)程序設(shè)計(jì)的模塊化思想,我們將程序進(jìn)行功能的模塊化。因?yàn)楸卷?xiàng)目功能比較單一,代碼相對(duì)簡(jiǎn)單,再加上Python提供了豐富的內(nèi)置函數(shù),所以我們沒(méi)有自定義函數(shù),而是直接在主函數(shù)中按順序?qū)崿F(xiàn)了各環(huán)節(jié)功能。以下是我們的程序設(shè)計(jì)過(guò)程:3.1 讀取超市流水賬我們引用了第三方庫(kù)openpyxl從Excel電子表格中讀取超市流水賬數(shù)據(jù)。Openpyxl是一個(gè)專(zhuān)門(mén)用來(lái)處理xlsx文件的庫(kù),它非常簡(jiǎn)單實(shí)用,只需調(diào)用一些簡(jiǎn)單的函數(shù)就能輕松的實(shí)現(xiàn)xlsx文件的讀寫(xiě)和數(shù)據(jù)處理。我們使用語(yǔ)句fromopenpyxlimportload_workbook引入庫(kù),然后打開(kāi)"超市流水賬.xlsx"文件,讀取“流水賬”工作表,并把貨號(hào)和流水號(hào)提取出來(lái),分別存儲(chǔ)到列表a和b中。wb=load_workbook("超市流水賬.xlsx")ws=wb['流水賬']a=list(map(lambdax:x.value,ws['A']))#提取貨號(hào)b=list(map(lambdax:x.value,ws['F']))#提取流水號(hào)3.2 初始化商品關(guān)聯(lián)次數(shù)我們?cè)O(shè)貨號(hào)的最大值為n,則貨號(hào)取值范圍[1,n],因?yàn)楹竺娴挠?jì)算是以貨號(hào)值為下標(biāo),舍棄了下標(biāo)為0的元素,故需要設(shè)置大小為(n+1)*(n+1)的二維數(shù)組incidence_times,并初始化所有數(shù)組元素均為0。n=max(a[1:])#各商品的貨號(hào)取值范圍[1,n]#存儲(chǔ)各商品關(guān)聯(lián)次數(shù)的二維數(shù)組incidence_times=[[0foriinrange(n+1)]forjinrange(n+1)]3.3 存儲(chǔ)流水號(hào)相同的商品為了便于統(tǒng)計(jì)各商品的關(guān)聯(lián)次數(shù),我們建立一個(gè)字典serial_number,該字典以流水號(hào)為鍵,以流水號(hào)相同的商品列表為值。serial_number={}#以流水號(hào)為鍵,存儲(chǔ)相同流水號(hào)的商品#將流水號(hào)相同的商品存儲(chǔ)到同一列表中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ù) 遍歷所有購(gòu)物籃,為每個(gè)購(gòu)物籃內(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和對(duì)應(yīng)的商品貨號(hào)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)橛锌赡艽嬖诙鄬?duì)關(guān)聯(lián)次數(shù)最多的商品,所以我們需要再次二維數(shù)組incidence_times,找出關(guān)聯(lián)次數(shù)等于max_num的所有商品對(duì)。#輸出一對(duì)或多對(duì)關(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.程序測(cè)試4.1 輸出各流水號(hào)中的貨號(hào)信息(此處只截取了部分流水號(hào)信息)4.2 輸出一對(duì)或多對(duì)關(guān)聯(lián)次數(shù)最多的商品5.程序改進(jìn)5.1 改進(jìn)尋找和輸出關(guān)聯(lián)次數(shù)最多的商品的代碼在第1版的程序中,我們通過(guò)遍歷二維數(shù)組的方式,采用二重循環(huán),尋找并輸出了關(guān)聯(lián)次數(shù)最多的商品。這是常規(guī)做法,但是沒(méi)有利用Python語(yǔ)言強(qiáng)大內(nèi)置函數(shù)和列表生成式的功能,代碼不夠簡(jiǎn)潔。在第2版中,我們充分利用了Python的內(nèi)置函數(shù)max()和列表生成式功能,可以快速簡(jiǎn)潔地實(shí)現(xiàn)相同功能。#尋找關(guān)聯(lián)次數(shù)最多的商品max_num=max([max(i)foriinincidence_times])#有可能存在多對(duì)關(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 增加查詢(xún)關(guān)聯(lián)次數(shù)為任意值的商品對(duì)功能考慮到超市為了更好地制定營(yíng)銷(xiāo)策略,可能想知道關(guān)聯(lián)次數(shù)為任意值的商品對(duì)功能,我們?cè)黾恿艘粋€(gè)查詢(xún)關(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('請(qǐng)輸入商品的關(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('請(qǐng)輸入商品的關(guān)聯(lián)次數(shù),結(jié)束程序輸入0:'))6.總結(jié)經(jīng)過(guò)這一周的項(xiàng)目挑戰(zhàn),我們對(duì)Python程序設(shè)計(jì)的知識(shí)有了更深的理解,特別是對(duì)程序設(shè)計(jì)的基本步驟以及思想有了更具體、深刻的體會(huì)。通過(guò)一次次的解決難題,使我們不僅鞏固了理論知識(shí),還培養(yǎng)了我們靈活運(yùn)用知識(shí)、解決實(shí)際問(wèn)題的能力。其次,這個(gè)項(xiàng)目是我們小組團(tuán)隊(duì)協(xié)作完成的,在項(xiàng)目挑戰(zhàn)過(guò)程中,我們團(tuán)隊(duì)成員相互激勵(lì),相互幫助,共同面對(duì)困難和挑戰(zhàn),極大地激發(fā)了我們的創(chuàng)新意識(shí)和團(tuán)隊(duì)協(xié)作能力。在這次的項(xiàng)目挑戰(zhàn)中,我們也體會(huì)到了程序設(shè)計(jì)的辛苦。首先是采集數(shù)據(jù)的困難,那么多的數(shù)據(jù)要輸入到Excel電子表格,還要進(jìn)行數(shù)據(jù)的預(yù)處理,耗費(fèi)了我們很多的時(shí)間。其次就是編寫(xiě)程序,這么長(zhǎng)的一段代碼,敲寫(xiě)時(shí)難免會(huì)犯錯(cuò),往往一個(gè)字母敲錯(cuò)或者縮進(jìn)錯(cuò)誤,就需要用上幾分鐘的時(shí)間來(lái)查找。由于我們的實(shí)踐經(jīng)驗(yàn)還很淺薄,程序在測(cè)試時(shí)也出現(xiàn)了幾個(gè)bug或者某些功能無(wú)法實(shí)現(xiàn),我們只能重新返回到對(duì)應(yīng)的代碼段,通過(guò)查詢(xún)書(shū)本和網(wǎng)絡(luò)來(lái)一一排除錯(cuò)誤。當(dāng)程序終于能正常運(yùn)行,獲得正確的結(jié)果時(shí),那種成就感是無(wú)以言表的。但我們小組并沒(méi)有滿(mǎn)足于只獲得正確的結(jié)果,我們精益求精,繼續(xù)改善代碼,優(yōu)化算法,想到了很多改進(jìn)的思路。特別是當(dāng)我們?cè)黾恿瞬樵?xún)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 生活用紙?jiān)O(shè)計(jì)新趨勢(shì)創(chuàng)新驅(qū)動(dòng)的消費(fèi)者體驗(yàn)升級(jí)
- 生態(tài)保護(hù)與零碳公園規(guī)劃的融合實(shí)踐
- 現(xiàn)代服務(wù)業(yè)的綠色發(fā)展路徑探索
- 2024年五年級(jí)英語(yǔ)下冊(cè) Unit 7 Chinese festivals第6課時(shí)說(shuō)課稿 譯林牛津版
- 2024年秋七年級(jí)歷史上冊(cè) 第14課 溝通中外文明的“絲綢之路”說(shuō)課稿 新人教版
- Unit 3 My friends Read and write(說(shuō)課稿)-2024-2025學(xué)年人教PEP版英語(yǔ)四年級(jí)上冊(cè)
- 3 我不拖拉 第一課時(shí)(說(shuō)課稿)2023-2024學(xué)年統(tǒng)編版道德與法治一年級(jí)下冊(cè)
- 2024年四年級(jí)英語(yǔ)上冊(cè) Module 1 Unit 2 It's at the station說(shuō)課稿 外研版(三起)
- 2024年四年級(jí)英語(yǔ)下冊(cè) Unit 11 Do you have a ticket第2課時(shí)說(shuō)課稿 湘少版
- 2024-2025學(xué)年新教材高中語(yǔ)文 第六單元 14.2 變形記(節(jié)選)(2)說(shuō)課稿 部編版必修下冊(cè)
- 健康管理-理論知識(shí)復(fù)習(xí)測(cè)試卷含答案
- 成人腦室外引流護(hù)理-中華護(hù)理學(xué)會(huì)團(tuán)體 標(biāo)準(zhǔn)
- JGJ106-建筑基樁檢測(cè)技術(shù)規(guī)范
- 高技能公共實(shí)訓(xùn)基地建設(shè)方案
- 市第一人民醫(yī)院“十四五”發(fā)展規(guī)劃(2020-2025)
- 2024年湖北孝達(dá)交通投資有限公司招聘筆試沖刺題(帶答案解析)
- 四年級(jí)上冊(cè)豎式計(jì)算100題及答案
- 小學(xué)英語(yǔ)跨學(xué)科案例設(shè)計(jì)
- 初中作業(yè)設(shè)計(jì)教師培訓(xùn)
- JTGT F20-2015 公路路面基層施工技術(shù)細(xì)則
- 高考滿(mǎn)分作文常見(jiàn)結(jié)構(gòu)
評(píng)論
0/150
提交評(píng)論