项目挑战: 学校微课平台推荐功能设计 课件(40张PPT)

文档属性

名称 项目挑战: 学校微课平台推荐功能设计 课件(40张PPT)
格式 pptx
文件大小 2.9MB
资源类型 教案
版本资源 浙教版(2019)
科目 信息技术(信息科技)
更新时间 2024-05-08 19:17:23

图片预览

文档简介

(共40张PPT)
项目挑战:学校微课平台推荐
推荐算法
项目情境
1
PROJECT CONTEXT
一、项目情境
学校新建了一个微课平台,准备增加微课平台的推荐功能。请设计相应的推荐算法,当用户点播了某微课后,平台会依据一定规则推荐相关的微课。
项目分析
2
PROJECT ANALYSIS
二、项目分析
1.推荐算法的选择
推荐算法
基于关联规则推荐
基于知识推荐
基于协同推荐
基于内容推荐
基于深度学习推荐
基于上下文推荐
基于组合推荐
基于效用推荐
二、项目分析
【探究】根据课前查阅的资料,结合项目选择一种推荐算法,并说出选择这种推荐算法的理由及其具体实施过程。
1.推荐算法的选择
二、项目分析
案例:基于内容的推荐算法
候选物品特征
相似度计算
推荐列表生成
用户历史数据
物品特征向量
用户偏好向量
物品特征提取
用户画像学习
二、项目分析
案例:基于内容的推荐算法
待选微课数据
同科目播放量最大的微课
前三项微课列表
用户点播数据
微课特征信息
所点微课特征
物品特征提取
用户画像学习
二、项目分析
2.项目的实施流程
【思考】结合项目任务描述,说一说项目具体的实施流程。
请结合已有的一定量的微课点播数据,为微课平台设计推荐算法。当用户点播了某个微课后,平台会依据一定规则推荐相关的微课。
项目任务
二、项目分析
数据获取
数据查询
数据推荐
数据呈现
组织数据
处理数据
推荐算法
2.项目的实施流程
项目实践
3
PROJECT PRACTICE
三、项目实践
微课名称
微课类型
主讲教师
课程评价
开课时间
学习时长
……
1.数据的组织与存储
三、项目实践
数组
链表
数据存储
数据查询
数据推荐
1.数据的组织与存储
索引访问便捷
存储空间固定
插入、删除便捷
占用空间不固定
【思考】结合项目实施过程与所选推荐算法,可以采用哪种结构存储和组织数据?
三、项目实践
1.数据的组织与存储
微课点播数据.csv
课程编号
课程科目
课程类型
课程名称
点播序号
【已知】课程序号在S001-S150范围内,共48504条数据
三、项目实践
2. 抽象与建模
【探究】在算法实现过程中,需要用到哪些变量,其结构形式是怎样的?与其他变量间又有什么联系?
存储内容 变量名 类型 格式 与其他变量的关系
三、项目实践
2. 抽象与建模
列表模拟一维数组
形式:[课程编号,课程科目,课程类型,课程名称]
line=['S145', '信息技术', '职业技能', '电子相册制作']
(1)点播文件数据
格式
案例
变量名
line
变量关系
获取csv文件信息
文件行数据line
读取每一行数据
三、项目实践
2. 抽象与建模
列表模拟二维数组
形式:[[课程编号,课程科目,课程类型,课程名称,点播次数],……]
courses=[['S145', '信息技术', '职业技能', '电子相册制作', 567],
['S126', '通识', '兴趣特长', '围棋入门', 366], ……]
(2)存储总课程信息
courses
格式
案例
变量名
变量关系
遍历每一行数据
如果在总课程中
该课程点播次数+1
如果不在总课程中
新建该课程,点播次数为0
三、项目实践
2. 抽象与建模
字符串
m_course=“S012”
(3)用户查询的课程编号
m_course
格式
案例
变量名
变量关系
遍历总课程数据
如果在总课程中
输出该课程的相关信息
如果不在总课程中
输出“无法查找到该课程”
三、项目实践
2. 抽象与建模
列表模拟一维数组
形式:[点播次数最多的索引,点播次数第2的索引,点播次数第3的索引]
maxi=[4,2,1]
(4)点播次数最多的三项同科目数据
maxi
格式
案例
变量名
变量关系
遍历总课程
同科目且
播放次数最多
保存索引到maxi[0]并更改maxi[1:3]
播放次数第2多
保存索引到maxi[1]并更改maxi[2]
播放次数第3多
保存索引到maxi[2]
三、项目实践
3.算法设计
1.请结合项目实施过程以及已设定的变量,合理设计算法并选择一种方式呈现。
【探究】
2.尝试一题多解,选择最优算法描述过程。
三、项目实践
3.算法设计
数据获取
数据查询
数据推荐
数据呈现
组织数据
处理数据
推荐算法
统计课程信息及点播次数并存储到总课程中
读取csv文件中每一条数据
开始
i=0;course=[]
i读取csv文件
Y
i=i+1
line=该课程信息数据
courses中该课程点播数+1
j=0
jj=j+1
Y
line==courses[j][:4]?
Y
N
N
在courses中添加该课程
N
三、项目实践
3.算法设计
数据获取
数据查询
数据推荐
数据呈现
组织数据
处理数据
推荐算法
三、项目实践
3.算法设计
数据获取
数据查询
数据推荐
数据呈现
组织数据
处理数据
推荐算法
统计课程信息及点播次数并存储到总课程中
读取csv文件中每一条数据
按照编号大小输出课程信息
开始
三、项目实践
3.算法设计
数据获取
数据查询
数据推荐
数据呈现
组织数据
处理数据
推荐算法
【思考1】可以采用怎样的方式使得课程按照编号从小到大输出?
方法一:根据课程编号进行排序处理(冒泡排序、选择排序、快速排序等),再按照排序后的顺序输出。
方法二:依次从当前课程列表中选出编号最小的课程输出后删除该课程,以此类推,直至课程全部输出。
方法三:由于课程编号已知,可从头开始遍历课程列表,编号为S001的先输出,再输出S002的课程,以此类推。
三、项目实践
3.算法设计
数据获取
数据查询
数据推荐
数据呈现
组织数据
处理数据
推荐算法
已知课程序号在S001-S150范围内
i=0
ii=i+1
Y
int(courses[i][0][1:])==c
N
c=1
c<=len(courses)?
输出courses[i]
c=c+1
Y
N
N
Y
三、项目实践
3.算法设计
数据获取
数据查询
数据推荐
数据呈现
组织数据
处理数据
推荐算法
统计课程信息及点播次数并存储到总课程中
查询所点播课程的各项数据
读取csv文件中每一条数据
按照编号大小输出课程信息
获取用户输入点播的课程编号
开始
显示所点播的课程
三、项目实践
3.算法设计
数据获取
数据查询
数据推荐
数据呈现
组织数据
处理数据
推荐算法
点播的课程编号m_course
i=0
iN
Y
m_course==courses[i][0]?
de_course=courses[i]
输出de_course
i=i+1
Y
N
三、项目实践
3.算法设计
数据获取
数据查询
数据推荐
数据呈现
组织数据
处理数据
推荐算法
统计课程信息及点播次数并存储到总课程中
查询所点播课程的各项数据
根据用户已点的课程科目查找推荐课程
读取csv文件中每一条数据
按照编号大小输出课程信息
获取用户输入点播的课程编号
开始
结束
显示所点播的课程
按照播放次数高低输出推荐课程
三、项目实践
3.算法设计
数据获取
数据查询
数据推荐
数据呈现
组织数据
处理数据
推荐算法
【思考2】可以采用怎样的方式找出同科目且播放次数最大的三项数据?
方法一:先筛选出同项目课程,再按照课程编号进行排序处理,再按照排序后的顺序输出。(如果前期以排序,只需判断是否同科目)
方法二:依次从当前课程列表中选出同项目且播放次数最大的课程,输出后删除该课程,以此类推,直至课程全部输出。
方法三:设置存储最大三项同科目课程索引值的变量,从头开始遍历课程列表,每一项都与该变量进行对比,并存储到相应位置。
三、项目实践
3.算法设计
数据获取
数据查询
数据推荐
数据呈现
组织数据
处理数据
推荐算法
三、项目实践
4.编程实现
【合作探究】结合算法流程,完成算法代码的编写并上机调试。
三、项目实践
4.编程实现
#读取数据,统计课程及其点播次数
ofile=open("微课点播数据.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]+=1
break
else:
courses.append(linex+[0])
#新建该课程,点播次数置0
#如果总课程中已有该课程,点播次数+1
#[“课程编号”,“课程科目","课程类型","课程名称","点播次数"]
#读入点播记录文件
三、项目实践
4.编程实现
#按照编号依次呈现课程信息
c=1
while c <=len(courses):
for i in range(len(courses)):
if int(courses[i][0][1:])==c:
print(courses[i])
c=c+1
break
#按照c的大小依次输出S001-S150的课程信息
三、项目实践
4.编程实现
#获取用户点播内容并查询显示
m_course=input("请输入要点播的课程号(S001-S150):")
for i in range(len(course)):
if m_course==course[i][0]:
de_course=course[i]
print("您点播的课程为:",de_course)
break
else:
print("未找到该课程")
三、项目实践
4.编程实现
#按照本科目点播最多次数进行推荐
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]=i
elif courses[i][4]>courses[maxi[1]][4]:
maxi[2]=maxi[1]; maxi[1]=i
elif courses[i][4]>courses[maxi[2]][4]:
maxi[2]=i
for i in range(3):
print(courses[maxi[i]])
#如果比当前记载的最大的课程点播数更高
#如果点播数小于索引1但大于索引2
#如果点播数小于索引1和索引2但大于索引3
#同科目且不等
三、项目实践
数据获取
数据查询
数据推荐
数据呈现
组织数据
处理数据
推荐算法
项目总结
4
PROJECT SUMMARY
四、项目总结
依据实情选择算法
01
02
03
合理组织数据。
提升算法的时间效率与空间效率
判断推荐算法的合理性与可行性
结合数据规模、数据的操作需求
优化思维方式
四、项目总结
部分微课的详细点播记录如下,从中该如何基于用户点播数据进行微课推荐?
拓展思考