基于内容的课程推荐系统

2023-10-27

引言

基于Coursera课程数据集,将课程名称向量化,计算与目标课程标题向量最相似的课程向量,实现基于内容的课程推荐。

代码实现

准备实验环境与数据

import numpy as np 
import pandas as pd
from statistics import harmonic_mean
from langdetect import detect
from sklearn.feature_extraction.text import TfidfVectorizer, TfidfTransformer, CountVectorizer
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import f1_score
from sklearn.metrics.pairwise import cosine_similarity
import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

输出:/kaggle/input/coursera-course-dataset/coursea_data.csv

展示原始数据
df = pd.read_csv('/kaggle/input/coursera-course-dataset/coursea_data.csv')
df.drop(['Unnamed: 0', 'course_organization'], axis=1, inplace=True)
df
course_title course_Certificate_type course_rating course_difficulty course_students_enrolled
0 (ISC)² Systems Security Certified Practitioner… SPECIALIZATION 4.7 Beginner 5.3k
1 A Crash Course in Causality: Inferring Causal… COURSE 4.7 Intermediate 17k
2 A Crash Course in Data Science COURSE 4.5 Mixed 130k
3 A Law Student’s Toolkit COURSE 4.7 Mixed 91k
4 A Life of Happiness and Fulfillment COURSE 4.8 Mixed 320k
将注册人数属性转换为数值类型
df = df[df.course_students_enrolled.str.endswith('k')]
df['course_students_enrolled'] = df['course_students_enrolled'].apply(lambda enrolled : eval(enrolled[:-1]) * 1000)
df
course_title course_Certificate_type course_rating course_difficulty course_students_enrolled
0 (ISC)² Systems Security Certified Practitioner… SPECIALIZATION 4.7 Beginner 5300.0
1 A Crash Course in Causality: Inferring Causal… COURSE 4.7 Intermediate 17000.0
2 A Crash Course in Data Science COURSE 4.5 Mixed 130000.0
3 A Law Student’s Toolkit COURSE 4.7 Mixed 91000.0
4 A Life of Happiness and Fulfillment COURSE 4.8 Mixed 320000.0
数据归一化
minmax_scaler = MinMaxScaler()
scaled_ratings = minmax_scaler.fit_transform(df[['course_rating','course_students_enrolled']])
df['course_rating'] = scaled_ratings[:,0]
df['course_students_enrolled'] = scaled_ratings[:,1]
df['overall_rating'] = df[['course_rating','course_students_enrolled']].apply(lambda row : harmonic_mean(row), axis=1)
df
course_title course_Certificate_type course_rating course_difficulty course_students_enrolled overall_rating
0 (ISC)² Systems Security Certified Practitioner… SPECIALIZATION 0.823529 Beginner 0.004587 0.009122
1 A Crash Course in Causality: Inferring Causal… COURSE 0.823529 Intermediate 0.018709 0.036586
2 A Crash Course in Data Science COURSE 0.705882 Mixed 0.155100 0.254319
3 A Law Student’s Toolkit COURSE 0.823529 Mixed 0.108027 0.190999
4 A Life of Happiness and Fulfillment COURSE 0.882353 Mixed 0.384430 0.535534

产生推荐结果

df = df[df.course_title.apply(lambda title : detect(title) == 'en')]
vectorizer = TfidfVectorizer(stop_words='english')
vectors = vectorizer.fit_transform(df.course_title)
def recommend_by_course_title (title, recomm_count=10) : 
    title_vector = vectorizer.transform([title])
    cosine_sim = cosine_similarity(vectors, title_vector)
    idx = np.argsort(np.array(cosine_sim[:,0]))[-recomm_count:]
    sdf = df.iloc[idx].sort_values(by='overall_rating', ascending=False)
    return sdf
recommend_by_course_title('A Crash Course in Data Science')
course_title course_Certificate_type course_rating course_difficulty course_students_enrolled overall_rating
487 Introduction to Data Science in Python COURSE 0.705882 Intermediate 0.468920 0.563503
486 Introduction to Data Science SPECIALIZATION 0.764706 Beginner 0.372360 0.500843
864 What is Data Science? COURSE 0.823529 Beginner 0.312010 0.452559
54 Applied Data Science SPECIALIZATION 0.764706 Beginner 0.263730 0.392199
711 SQL for Data Science COURSE 0.764706 Beginner 0.191310 0.306053
2 A Crash Course in Data Science COURSE 0.705882 Mixed 0.155100 0.254319
825 Tools for Data Science COURSE 0.764706 Beginner 0.143030 0.240986
171 Crash Course on Python COURSE 0.882353 Beginner 0.095957 0.173089
1 A Crash Course in Causality: Inferring Causal… COURSE 0.823529 Intermediate 0.018709 0.036586
594 Mathematics for Data Science SPECIALIZATION 0.705882 Beginner 0.012674 0.024900
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于内容的课程推荐系统 的相关文章

随机推荐

  • 使用xmanager 远程操作linux

    随着互联网的高速发展以及Linux企业应用的成熟 Linux被广泛应用于服务器领域 如何实现Linux的远程管理成为网络管理员的首要任务 我们经常见到的几种最为常用的windows下远程管理Linux服务器的方法 基本上都是利用Secure
  • NPM使用技巧

    NPM使用技巧 前言 技巧 全局模块位置 PowerShell报错 安装模块冲突 NPM介绍 NPM命令 使用方法 基本命令 模块命令 查看模块 运行命令 镜像管理 常用模块 rimraf yarn 前言 本文包含NodeJS中NPM包管理
  • ADO.NET的五个主要对象

    文章目录 Connection Command DataAdapter DataSet DataReader ADO NET中的五个主要对象 Connection Command DataAdapter DataSet DataReader
  • vue+express+websocket+mongodb在线群聊工具

    vue express websocket mongodb在线群聊工具 目录 vue express websocket mongodb在线群聊工具 1 项目概述 2 项目运行 3 项目代码细节 3 1 后端 3 1 1 nodejs连接数
  • (五)逻辑架构

    逻辑架构 1 逻辑架构剖析 1 1 服务器处理客户端请求 1 2 Connectors 1 3 第1层 连接层 1 4 第2层 服务层 1 5 第3层 引擎层 1 6 存储层 1 7 小结 2 SQL执行流程 2 1 MySQL 中的 SQ
  • 我们应该如何使用webstorm呢

    WebStorm2020安装教程 软件名称 WebStorm2020 软件语言 简体中文 软件大小 269 28MB 安装环境 Win10 Win8 Win7 64位下载链接 百度网盘地址 提取码 damd WebStorm是一款JavaS
  • Unity核心6——Animation

    一 动画窗口 通过 Window gt Animation gt Animation 打开 Animation 窗口 Animation窗口主要用于在 Unity 内部创建和修改动画 所有在场景中的对象都可以通过 Animation 窗口为
  • Latex的一些操作

    ps 最近投个论文 需要Latex排版 于是简单使用一下 记录一些基本步骤 以防备用 一 下载与安装工具 texlive的下载与安装 参见这个网友写的 https blog csdn net weixin 39892850 article
  • DeepJavaLibrary(DJL)框架的使用:在java上使用AlphaPose完成实时多人姿态估计任务

    首先 这里是完整的项目代码 目录 实现环境 实现原理 DJL框架能帮我们做什么 Alphapose 实现步骤 一 导出alphapose模型 导出yolov5 导出单人姿态估计网络 二 实现Translator 使用YoloTranslat
  • Java类的加载机制

    一 类的生命周期 1 加载的生命周期 类从被加载到虚拟机内存中开始 到卸载出内存为止 它的整个生命周期包括 加载 Loading 验证 Verification 准备 Preparation 解析 Resolution 初始化 Intial
  • URP源码学习(七)一些细节和理解

    RT理解 RT是什么 用在哪 首先rt是一张特殊贴图 这张贴图对应的是GPU上的FrameBuffer 一般用到的是颜色和深度 从这张图取数据用于计算 或是直接对这张图进行修改 以得到想要的效果 FrameBuffer就是gpu里渲染结果的
  • 【论文阅读-NeurIPS-2019】Coda: An End-to-End Neural Program Decompiler

    Coda An End to End Neural Program Decompiler Conference NeurIPS 2019 这篇文章提出了一个新的反编译框架Coda 分为code sketch generation 和 err
  • Appium连接手机时报权限错误 requires:android.permission.WRITE_SECURE_SETTINGS

    报错信息 java lang SecurityException Permission denial writing to settings requires android permission WRITE SECURE SETTINGS
  • ubuntu server 22.04 静态ip设置

    ubuntu server 22 04 静态ip设置 我一般配置ip都是在系统安装完成后才进行设置 查看当前网络 需要了解的是 你该静态ip是该的哪个网卡的别搞错了 ifconfig ip a 这两个命令 都是可以的 修改配置文件 etc
  • C# 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...

    本文将使用一个gitHub开源的组件技术来读写西门子plc数据 使用的是基于以太网的TCP IP实现 不需要额外的组件 读取操作只要放到后台线程就不会卡死线程 本组件支持超级方便的高性能读写操作 官方地址 http www hslcommu
  • 关于java.servlet.*缺失问题

    上图使用的tomcat版本为10 0 23 此问题目前出现在Tomcat10系列 而 Javax servlet 标红 不存在 的原因是因为包名改了 Tomcat 10 用以下的 import import jakarta servlet
  • ESP12f/E(8266)以及STM32串口自动烧录电路

    在使用CH340C芯片进行自动烧录时 经常会用到RTS和DTR两个联络输出信号 电脑烧录程序控制芯片这两个引脚的高低电平 从而控制主控芯片IO0和reset引脚进行自动烧录并复位 这两个信号都是低电平有效 STM32 这里需要注意的是使用的
  • jpa报错:check the manual that corresponds to your MySQL server version for the right

    原因一 check the manual that corresponds to your MySQL server version for the right 因为表字段中使用了关键字 private String describe 解决
  • 查看tensor的形状,行列大小

    torch size是tuple 元组的子类 因此他支持元组所有的操作 如x size 0 import pandas as pd import numpy as np import torch x torch rand 5 3 print
  • 基于内容的课程推荐系统

    引言 基于Coursera课程数据集 将课程名称向量化 计算与目标课程标题向量最相似的课程向量 实现基于内容的课程推荐 代码实现 准备实验环境与数据 import numpy as np import pandas as pd from s