教育平台线上课程数据分析

在这里插入图片描述

教育平台的线上课程数据分析

一、项目背景

在线教育一般指基于互联网的线上学习行为,与传统的线下教育机构、培训班、学校相比,在线教育在时间空间上有很多优势。
近年来,随着互联网与通信技术的高速发展,各种在线教育平台和学习应用纷纷涌现,各种网课、慕课、直播课等层出不穷。尤其是 2020 年春季学期,受新冠疫情影响,在教育部**“停课不停学”** 的要求下,网络平台成为“互联网+教育”成果的重要展示阵地
因此, 如何根据教育平台的线上用户信息和学习信息,通过数据分析为教育平台和用户提供精准的课程推荐服务就成为线上教育的热点问题。本项目从数据集给出字段出发,围绕用户登录注册→开始试听课程,免费试学→试听后开始付费学习→结束课程学习→推荐其他课程的完整业务流程,深入到各个阶段,通过数据分析为产品部门、运营部门提供可落地的建议,赋能业务增长。

二、分析目标

  • 用户登录注册阶段:
    分析平台用户活跃情况,地域分布以及登录时间统计;
  • 免费试学阶段:
    用户学习行为路径进行漏斗分析,计算各阶段转化率
    分析拉新效果,计算拉新购课转化率;
  • 付费上课学习阶段:
    用户付费行为分析,计算月度ARPUARPPU
    分析用户学习时长,查看学习时长分布;
  • 课程结束阶段:
    计算每门课程结课率,查看课程完成情况;
    计算课程受欢迎程度,找到最受欢迎的课程TOP10
  • 构建RFM模型,实现用户精细化运营
  • 分析用户流失情况,计算流失率
  • 课程推荐阶段:
    协同过滤算法进行线上课程智能推荐
    在这里插入图片描述

三、数据探索与预处理

3.1 字段解释

在这里插入图片描述
用户信息表

users_data = pd.read_csv('./users.csv',encoding='gbk')
users_data.head()

在这里插入图片描述
学习信息表

study_information_data = pd.read_csv('./study_information.csv',encoding='gbk')
study_information_data.head()

在这里插入图片描述
登录信息表

login_data = pd.read_csv('./login.csv',encoding='gbk')
login_data.head()

在这里插入图片描述

3.2 缺失值处理

  • 用户信息表
# 查看数据的简要信息
users_data.info()

在这里插入图片描述

user_id字段和school字段均有缺失值,缺失用户占比少,故直接舍弃;school字段也有缺失值,但是该字段意义不大,故不做处理

users_data.isnull().sum()  #查看缺失值个数
#统计缺失值占比
print(users_data['user_id'].isnull().sum()/users_data.shape[0])

在这里插入图片描述

#缺失用户占比少,故直接舍弃;school字段也有缺失值,但是该字段意义不大,故不做处理
users_data.dropna(subset=['user_id'],axis= 0 ,inplace = True)
users_data.shape  #处理后数据大小
# (43916, 7)
  • 学习信息表
study_information_data.info()

在这里插入图片描述

price价格字段有缺失值,但缺失数据比较少,直接用0值进行填充

# 用0值进行填充
study_information_data['price'].fillna(0,inplace= True)
  • 登录信息表
login_data.info()

在这里插入图片描述

登录信息表无缺失值

3.3 重复值处理

#用户信息表
users_data.duplicated().sum()
#删去重复值
users_data.drop_duplicates('user_id',inplace= True) 
# 学习详情表
study_information_data.duplicated().sum()

结果为0

#登录详情表
login_data.duplicated().sum()

结果为0

3.4 异常值处理

users_data数据中 recently_logged 字段存在异常值“–-”,该数据可能为缺失值,也可能是用户注册后不再进行登录,结合后续分析与study_information表格进行联结,对“–”进行分类处理。
对于在 study_information 中出现的选课信息的用户,采用其选课的最后时间来替换“–”;剩余的“–”异常值用注册时间来替换。

users_data[users_data['recently_logged']=='--'].info()

在这里插入图片描述

有5375个异常数据

#将course_join_time列进行日期转换
pd.to_datetime(study_information_data['course_join_time'])

#找到每个用户加入课程的最近时间
users_recently_select = study_information_data.groupby('user_id')['course_join_time'].max()

# 将加入课程最近时间与主表连接
users_study_information =  pd.merge(users_data,users_recently_select,on='user_id',how='left')

# 新增course_join_time应与recently_join_time同类型
users_study_information['course_join_time'] = users_study_information['course_join_time'].astype(str)

#将'--'填充为最近加入课程的时间
users_study_information['recently_logged'] = users_study_information[['recently_logged','course_join_time']].apply(
    lambda row:row['course_join_time'] if row['recently_logged']=='--' else row['recently_logged'],axis=1)

#检查是否填充成功
users_study_information[users_study_information['recently_logged']=='--'].count()

在这里插入图片描述

四、 用户登录阶段

4.1 用户地域分布分析

对用户的登录信息,尤其是地理位置信息的分析,能够帮助我们了解使用我们产品的用户集中分布在哪些省份、哪些城市,为运营部门指定推广计划,进行广告精准投放指明方向。

# 构建省份变量
province = ['新疆','西藏', '青海', '甘肃', '四川','云南','宁夏','内蒙古','黑龙江','吉林','辽宁','河北','北京','天津','陕西','山西','山东','河南','重庆','湖北','安徽','江苏','上海','贵州','广西', '湖南', '江西', '浙江', '福建','广东', '海南','台湾','澳门', '香港']

def get_provice(x):
    '''
    提取省份数据
    param x:用户登录地址
    '''
    for i in province:
        if i in x:
            return i
#调用函数提取省份
login_data['province'] = login_data['login_place'].apply(get_provice)
login_data['province'].head()

在这里插入图片描述

#查看省份缺失数据占原始数据的比重
len1 = login_data['province'].isnull().sum()
len2 = login_data.shape[0]
print('省份缺失数据占原始数据的比重:',len1/len2)

在这里插入图片描述

# 构建城市变量
def get_city(x):
    '''
    提取城市数据
    param x:用户登录地址
    '''
    # 两个特殊的三个字符的省份
    if (x[2:5]=='黑龙江') or (x[2:5]=='内蒙古'):
            return x[5:]
    else:
        return x[4:]
login_data['city'] = login_data['login_place'].apply(get_city)
login_data['city']

在这里插入图片描述

#将直辖市与行政区的省份名与城市名进行替换
ind = login_data['province'].str.contains('北京|上海|重庆|天津|澳门|香港')
login_data.loc[ind,'city'] = login_data.loc[ind,'province']
#查看城市空数据占原始数据的比重
len1 
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
智能推荐策略的实现需要考虑多种因素,如用户的历史行为、课程的属性、用户的个人信息等等。下面是一些可以考虑的策略: 1. 基于用户历史行为的推荐:根据用户过去的学习行为,推荐与用户兴趣相关的课程。可以使用协同过滤算法,在用户行为数据中寻找相似的用户,然后向这些相似用户喜欢的课程推荐给当前用户。 2. 基于内容的推荐:根据课程的属性,如标签、类别、难度等等,推荐与用户喜欢的课程相似的课程。可以使用基于内容的推荐算法,比如 TF-IDF 算法,计算课程之间的相似度,然后向用户推荐相似度高的课程。 3. 基于个人信息的推荐:根据用户的个人信息,比如性别、年龄、职业等等,推荐与用户个人信息相关的课程。可以使用基于内容的推荐算法,根据用户的个人信息匹配相应的课程属性,然后向用户推荐。 这些策略可以组合使用,来提高推荐的准确性。下面是一个基于用户历史行为的推荐算法的 Python 实现示例: ```python # 导入所需的库 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.metrics.pairwise import cosine_similarity # 读取数据集 df = pd.read_csv('data.csv') # 划分训练集和测试集 train_data, test_data = train_test_split(df, test_size=0.2) # 构建用户-课程评分矩阵 train_matrix = train_data.pivot_table(index='user_id', columns='course_id', values='rating') # 计算用户相似度矩阵 user_similarity = cosine_similarity(train_matrix.fillna(0)) # 预测测试集中用户对课程的评分 test_matrix = test_data.pivot_table(index='user_id', columns='course_id', values='rating') test_user_ids = test_matrix.index test_course_ids = test_matrix.columns test_predictions = pd.DataFrame(index=test_user_ids, columns=test_course_ids) for user_id in test_user_ids: user_ratings = train_matrix.loc[user_id].dropna() for course_id in test_course_ids: if course_id not in user_ratings.index: similarity = user_similarity[user_similarity.index == user_id].iloc[:, train_matrix.columns == course_id].values[0][0] if similarity > 0: rating = (user_ratings * similarity).sum() / similarity test_predictions.loc[user_id, course_id] = rating # 计算评估指标 test_true_ratings = test_matrix.stack().reset_index(name='rating') test_predicted_ratings = test_predictions.stack().reset_index(name='rating') test_rmse = ((test_true_ratings['rating'] - test_predicted_ratings['rating']) ** 2).mean() ** 0.5 print('RMSE:', test_rmse) ``` 这个示例使用了协同过滤算法,计算用户相似度矩阵,然后在测试集上预测用户对课程的评分。最后计算测试集上的 RMSE 评估指标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值