資源簡介 (共40張PPT)項目挑戰(zhàn):學校微課平臺推薦推薦算法項目情境1PROJECT CONTEXT一、項目情境學校新建了一個微課平臺,準備增加微課平臺的推薦功能。請設計相應的推薦算法,當用戶點播了某微課后,平臺會依據(jù)一定規(guī)則推薦相關的微課。項目分析2PROJECT ANALYSIS二、項目分析1.推薦算法的選擇推薦算法基于關聯(lián)規(guī)則推薦基于知識推薦基于協(xié)同推薦基于內(nèi)容推薦基于深度學習推薦基于上下文推薦基于組合推薦基于效用推薦二、項目分析【探究】根據(jù)課前查閱的資料,結合項目選擇一種推薦算法,并說出選擇這種推薦算法的理由及其具體實施過程。1.推薦算法的選擇二、項目分析案例:基于內(nèi)容的推薦算法候選物品特征相似度計算推薦列表生成用戶歷史數(shù)據(jù)物品特征向量用戶偏好向量物品特征提取用戶畫像學習二、項目分析案例:基于內(nèi)容的推薦算法待選微課數(shù)據(jù)同科目播放量最大的微課前三項微課列表用戶點播數(shù)據(jù)微課特征信息所點微課特征物品特征提取用戶畫像學習二、項目分析2.項目的實施流程【思考】結合項目任務描述,說一說項目具體的實施流程。請結合已有的一定量的微課點播數(shù)據(jù),為微課平臺設計推薦算法。當用戶點播了某個微課后,平臺會依據(jù)一定規(guī)則推薦相關的微課。項目任務二、項目分析數(shù)據(jù)獲取數(shù)據(jù)查詢數(shù)據(jù)推薦數(shù)據(jù)呈現(xiàn)組織數(shù)據(jù)處理數(shù)據(jù)推薦算法2.項目的實施流程項目實踐3PROJECT PRACTICE三、項目實踐微課名稱微課類型主講教師課程評價開課時間學習時長……1.數(shù)據(jù)的組織與存儲三、項目實踐數(shù)組鏈表數(shù)據(jù)存儲數(shù)據(jù)查詢數(shù)據(jù)推薦1.數(shù)據(jù)的組織與存儲索引訪問便捷存儲空間固定插入、刪除便捷占用空間不固定【思考】結合項目實施過程與所選推薦算法,可以采用哪種結構存儲和組織數(shù)據(jù)?三、項目實踐1.數(shù)據(jù)的組織與存儲微課點播數(shù)據(jù).csv課程編號課程科目課程類型課程名稱點播序號【已知】課程序號在S001-S150范圍內(nèi),共48504條數(shù)據(jù)三、項目實踐2. 抽象與建模【探究】在算法實現(xiàn)過程中,需要用到哪些變量,其結構形式是怎樣的?與其他變量間又有什么聯(lián)系?存儲內(nèi)容 變量名 類型 格式 與其他變量的關系三、項目實踐2. 抽象與建模列表模擬一維數(shù)組形式:[課程編號,課程科目,課程類型,課程名稱]line=['S145', '信息技術', '職業(yè)技能', '電子相冊制作'](1)點播文件數(shù)據(jù)格式案例變量名line變量關系獲取csv文件信息文件行數(shù)據(jù)line讀取每一行數(shù)據(jù)三、項目實踐2. 抽象與建模列表模擬二維數(shù)組形式:[[課程編號,課程科目,課程類型,課程名稱,點播次數(shù)],……]courses=[['S145', '信息技術', '職業(yè)技能', '電子相冊制作', 567],['S126', '通識', '興趣特長', '圍棋入門', 366], ……](2)存儲總課程信息courses格式案例變量名變量關系遍歷每一行數(shù)據(jù)如果在總課程中該課程點播次數(shù)+1如果不在總課程中新建該課程,點播次數(shù)為0三、項目實踐2. 抽象與建模字符串m_course=“S012”(3)用戶查詢的課程編號m_course格式案例變量名變量關系遍歷總課程數(shù)據(jù)如果在總課程中輸出該課程的相關信息如果不在總課程中輸出“無法查找到該課程”三、項目實踐2. 抽象與建模列表模擬一維數(shù)組形式:[點播次數(shù)最多的索引,點播次數(shù)第2的索引,點播次數(shù)第3的索引]maxi=[4,2,1](4)點播次數(shù)最多的三項同科目數(shù)據(jù)maxi格式案例變量名變量關系遍歷總課程同科目且播放次數(shù)最多保存索引到maxi[0]并更改maxi[1:3]播放次數(shù)第2多保存索引到maxi[1]并更改maxi[2]播放次數(shù)第3多保存索引到maxi[2]三、項目實踐3.算法設計1.請結合項目實施過程以及已設定的變量,合理設計算法并選擇一種方式呈現(xiàn)。【探究】2.嘗試一題多解,選擇最優(yōu)算法描述過程。三、項目實踐3.算法設計數(shù)據(jù)獲取數(shù)據(jù)查詢數(shù)據(jù)推薦數(shù)據(jù)呈現(xiàn)組織數(shù)據(jù)處理數(shù)據(jù)推薦算法統(tǒng)計課程信息及點播次數(shù)并存儲到總課程中讀取csv文件中每一條數(shù)據(jù)開始i=0;course=[]i讀取csv文件Yi=i+1line=該課程信息數(shù)據(jù)courses中該課程點播數(shù)+1j=0jj=j+1Yline==courses[j][:4]?YNN在courses中添加該課程N三、項目實踐3.算法設計數(shù)據(jù)獲取數(shù)據(jù)查詢數(shù)據(jù)推薦數(shù)據(jù)呈現(xiàn)組織數(shù)據(jù)處理數(shù)據(jù)推薦算法三、項目實踐3.算法設計數(shù)據(jù)獲取數(shù)據(jù)查詢數(shù)據(jù)推薦數(shù)據(jù)呈現(xiàn)組織數(shù)據(jù)處理數(shù)據(jù)推薦算法統(tǒng)計課程信息及點播次數(shù)并存儲到總課程中讀取csv文件中每一條數(shù)據(jù)按照編號大小輸出課程信息開始三、項目實踐3.算法設計數(shù)據(jù)獲取數(shù)據(jù)查詢數(shù)據(jù)推薦數(shù)據(jù)呈現(xiàn)組織數(shù)據(jù)處理數(shù)據(jù)推薦算法【思考1】可以采用怎樣的方式使得課程按照編號從小到大輸出?方法一:根據(jù)課程編號進行排序處理(冒泡排序、選擇排序、快速排序等),再按照排序后的順序輸出。方法二:依次從當前課程列表中選出編號最小的課程輸出后刪除該課程,以此類推,直至課程全部輸出。方法三:由于課程編號已知,可從頭開始遍歷課程列表,編號為S001的先輸出,再輸出S002的課程,以此類推。三、項目實踐3.算法設計數(shù)據(jù)獲取數(shù)據(jù)查詢數(shù)據(jù)推薦數(shù)據(jù)呈現(xiàn)組織數(shù)據(jù)處理數(shù)據(jù)推薦算法已知課程序號在S001-S150范圍內(nèi)i=0ii=i+1Yint(courses[i][0][1:])==c Nc=1c<=len(courses)?輸出courses[i]c=c+1YNNY三、項目實踐3.算法設計數(shù)據(jù)獲取數(shù)據(jù)查詢數(shù)據(jù)推薦數(shù)據(jù)呈現(xiàn)組織數(shù)據(jù)處理數(shù)據(jù)推薦算法統(tǒng)計課程信息及點播次數(shù)并存儲到總課程中查詢所點播課程的各項數(shù)據(jù)讀取csv文件中每一條數(shù)據(jù)按照編號大小輸出課程信息獲取用戶輸入點播的課程編號開始顯示所點播的課程三、項目實踐3.算法設計數(shù)據(jù)獲取數(shù)據(jù)查詢數(shù)據(jù)推薦數(shù)據(jù)呈現(xiàn)組織數(shù)據(jù)處理數(shù)據(jù)推薦算法點播的課程編號m_coursei=0iNYm_course==courses[i][0]?de_course=courses[i]輸出de_coursei=i+1YN三、項目實踐3.算法設計數(shù)據(jù)獲取數(shù)據(jù)查詢數(shù)據(jù)推薦數(shù)據(jù)呈現(xiàn)組織數(shù)據(jù)處理數(shù)據(jù)推薦算法統(tǒng)計課程信息及點播次數(shù)并存儲到總課程中查詢所點播課程的各項數(shù)據(jù)根據(jù)用戶已點的課程科目查找推薦課程讀取csv文件中每一條數(shù)據(jù)按照編號大小輸出課程信息獲取用戶輸入點播的課程編號開始結束顯示所點播的課程按照播放次數(shù)高低輸出推薦課程三、項目實踐3.算法設計數(shù)據(jù)獲取數(shù)據(jù)查詢數(shù)據(jù)推薦數(shù)據(jù)呈現(xiàn)組織數(shù)據(jù)處理數(shù)據(jù)推薦算法【思考2】可以采用怎樣的方式找出同科目且播放次數(shù)最大的三項數(shù)據(jù)?方法一:先篩選出同項目課程,再按照課程編號進行排序處理,再按照排序后的順序輸出。(如果前期以排序,只需判斷是否同科目)方法二:依次從當前課程列表中選出同項目且播放次數(shù)最大的課程,輸出后刪除該課程,以此類推,直至課程全部輸出。方法三:設置存儲最大三項同科目課程索引值的變量,從頭開始遍歷課程列表,每一項都與該變量進行對比,并存儲到相應位置。三、項目實踐3.算法設計數(shù)據(jù)獲取數(shù)據(jù)查詢數(shù)據(jù)推薦數(shù)據(jù)呈現(xiàn)組織數(shù)據(jù)處理數(shù)據(jù)推薦算法三、項目實踐4.編程實現(xiàn)【合作探究】結合算法流程,完成算法代碼的編寫并上機調(diào)試。三、項目實踐4.編程實現(xiàn)#讀取數(shù)據(jù),統(tǒng)計課程及其點播次數(shù)ofile=open("微課點播數(shù)據(jù).csv","r")lines=ofile.read().split("\n")courses=[]for i in range(1,len(lines)):line=lines[i].split(",")[1:]for j in range(len(courses)):if line ==courses[j][:4]:courses[j][4]+=1breakelse:courses.append(linex+[0])#新建該課程,點播次數(shù)置0#如果總課程中已有該課程,點播次數(shù)+1#[“課程編號”,“課程科目","課程類型","課程名稱","點播次數(shù)"]#讀入點播記錄文件三、項目實踐4.編程實現(xiàn)#按照編號依次呈現(xiàn)課程信息c=1while c <=len(courses):for i in range(len(courses)):if int(courses[i][0][1:])==c:print(courses[i])c=c+1break#按照c的大小依次輸出S001-S150的課程信息三、項目實踐4.編程實現(xiàn)#獲取用戶點播內(nèi)容并查詢顯示m_course=input("請輸入要點播的課程號(S001-S150):")for i in range(len(course)):if m_course==course[i][0]:de_course=course[i]print("您點播的課程為:",de_course)breakelse:print("未找到該課程")三、項目實踐4.編程實現(xiàn)#按照本科目點播最多次數(shù)進行推薦courses.append(["編號","科目","類型","名稱",0])n=len(courses);maxi=[n-1,n-1,n-1]for i in range(n-2):if courses[i][1]==de_course[1] and courses[i][3]!=de_course[3]:if courses[i][4]>courses[maxi[0]][4]:maxi[1:]=maxi[0:2]; maxi[0]=ielif courses[i][4]>courses[maxi[1]][4]:maxi[2]=maxi[1]; maxi[1]=ielif courses[i][4]>courses[maxi[2]][4]:maxi[2]=ifor i in range(3):print(courses[maxi[i]])#如果比當前記載的最大的課程點播數(shù)更高#如果點播數(shù)小于索引1但大于索引2#如果點播數(shù)小于索引1和索引2但大于索引3#同科目且不等三、項目實踐數(shù)據(jù)獲取數(shù)據(jù)查詢數(shù)據(jù)推薦數(shù)據(jù)呈現(xiàn)組織數(shù)據(jù)處理數(shù)據(jù)推薦算法項目總結4PROJECT SUMMARY四、項目總結依據(jù)實情選擇算法010203合理組織數(shù)據(jù)。提升算法的時間效率與空間效率判斷推薦算法的合理性與可行性結合數(shù)據(jù)規(guī)模、數(shù)據(jù)的操作需求優(yōu)化思維方式四、項目總結部分微課的詳細點播記錄如下,從中該如何基于用戶點播數(shù)據(jù)進行微課推薦?拓展思考 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫