时代光华课程数据分析
目录
- 概述
- 课程词频分析
2.1 平台课程词频分析
2.2 学员已学课程词频分析
2.3 本人选课课程词频分析 - 学员学分分析
3.1 学分基本情况
3.2 按部门分析
3.3 按性别分析
3.4 按学历分析 - 其他
4.1 课程视频下载
4.2 时代光华官网课程词频分析 - 结语
1. 概述
本文简要分析了时代光华的一些课程数据和泓人学员学习数据。数据截止日期为2018年2月28日。分析过程主要运用如下工具:
- 浏览器调试:google的postman插件
- 编程语言:python语言,jieba库,wordcloud库
- 前端框架:bootstrap-table框架,bootstrap-table-export插件
- 数据可视化:Echarts
- 文章编辑:markdown语法
2. 课程词频分析
2.1 平台课程词频分析
第一步:在浏览器中对网页地址进行分析,得到全部课程的json文件
第二步:编写页面程序展示全部课程,可以筛选课程和选课。
import jieba
from scipy.misc import imread # 这是一个处理图像的函数
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import matplotlib.pyplot as plt
from jieba.analyse import extract_tags
import numpy as npy
# 添加自己的词库分词
# jieba.add_word('十九大')
# 向jiabe库添加本地词库
jieba.load_userdict("newdict.txt")
# 分词函数
def jieba_words(texts):
words_list = []
word_generator = jieba.cut(texts, cut_all=True)
# 打开屏蔽词的文本文件
stopwords = open('stopwords.txt').read()
for word in word_generator:
if word.strip() not in stopwords:
words_list.append(word)
return ' '.join(words_list) # 注意是空格
# 打开词源的文本文件
text = open('title.txt').read()
donewords = jieba_words(text)
# 计算词频
tags = jieba.analyse.extract_tags(sentence=donewords, topK=60)
words = [word for word in jieba.cut(text, cut_all=True)]
word_frequence_list = {}
for tag in tags:
word_frequence_list[tag] = words.count(tag)
# 词云图设置
back_color = imread('map.jpg') # 解析该图片
# 基于彩色图像生成相应彩色
image_colors = ImageColorGenerator(back_color)
wc = WordCloud(
background_color='white', # 背景颜色
# max_words=80, # 最大词数80
mask=back_color, # 以该参数值作图绘制词云,这个参数不为空时,width和height会被忽略
max_font_size=60, # 显示字体的最大值
min_font_size=8, # 显示字体的最小值
# stopwords=STOPWORDS.add('new'), # 使用内置的屏蔽词,再添加'苟利国'
font_path="C:/Windows/Fonts/STZHONGS.TTF", # 解决显示口字型乱码问题,可进入C:/Windows/Fonts/目录更换字体
random_state=42, # 为每个词返回一个PIL颜色
width=576, # 图片的宽
height=576 # 图片的长
)
# 根据词频生成云图
wc.fit_words(word_frequence_list)
plt.imshow(wc.recolor(color_func=image_colors))
# 保存图片
wc.to_file('title.png')
4128门课程最后生成的词云效果图如下:
平台4128课程的关键词云图
还可以绘制课程关键词词频图:
课程关键词词频
核心python代码如下:
import wordcloud as wc
import matplotlib.pyplot as plt
import jieba
from PIL import Image
from numpy import array
from jieba.analyse import extract_tags
import numpy as npy
# 导入绘图库
from numpy import arange
import matplotlib
jieba.load_userdict("newdict.txt")
# 分词函数
def jieba_words(text):
words_list = []
word_generator = jieba.cut(text, cut_all=True)
# 打开屏蔽词的文本文件
stopwords = open('stopwords.txt').read()
for word in word_generator:
if word.strip() not in stopwords:
words_list.append(word)
return ','.join(words_list) # 注意是空格
text = open('title.txt').read() #title
donewords = jieba_words(text)
tags = jieba.analyse.extract_tags(sentence=donewords, topK=20)
words = [word for word in jieba.cut(text, cut_all=True)]
words_freq = {}
for tag in tags:
freq = words.count(tag)
words_freq[tag] = freq
usedata = sorted(words_freq.items(), key=lambda d:d[1])
tmp = npy.array(usedata).T
# print(tmp)
word = tmp[0]
num = [int(item) for item in tmp[1]]
# 画布大小
fig,ax = plt.subplots(figsize=(15, 10))
#输出中文字体
myfont = matplotlib.font_manager.FontProperties(fname="C:/Windows/Fonts/STZHONGS.TTF")
#图表标题设置,想要标题居中可以去掉x,y的设置
plt.title(u'词频统计', fontproperties=myfont, fontsize=20, x=0.001, y=1.02)
#图表x轴设置
ax.set_xlabel(u'出现次数', fontproperties=myfont, fontsize=20, x=0.06, y=1.02, color="gray")
#边框线设置,去除上方右方的框线,左下框线置灰融入背景
ax.spines['bottom'].set_color('grey')
ax.spines['left'].set_color('grey')
ax.spines['top'].set_color('white')
ax.spines['right'].set_color('white')
#传入词语,y轴显示20个标记位置,设置字体大小,颜色为灰色
tick_positions = range(1,21)
ax.set_yticks(tick_positions)
ax.set_yticklabels(word, fontproperties=myfont, fontsize=18, color="gray")
#设置数据条的间隔
bar_positions = arange(20) + 0.75
#导入数据并做图展示
ax.barh(bar_positions, num, 0.5, align="edge")
plt.savefig("title.jpg")
plt.show()
2.2 学员已学课程词频分析
在导出的课程excel表中筛选出有学员学过的课程,利用上文介绍的方法做词频分析,结果如下: 学员已选课程词云图 最受泓人学员欢迎的课程的关键词对比平台课程及学员所学课程,“管理”与“企业”是课程热门词,也是学员学习的热门。另外,平台课程关键词前10位中有3个并没有出现在学员课程关键词中,分别是“销售”、“生产”、“沟通”,而“安全”和“技术”两个词虽然平台上词频不高,却较受泓人学员欢迎。
个人认为,集团公司是大型制造型企业,还是应当重视有关“生产制造”的学习和培训。
2.3 本人选课课程词频分析
第一步:在浏览器中对网页地址进行分析,得到本人所学课程的json文件
第二步:编写页面程序展示我的课程,我设置了查看课程详细列表和学习的链接,此外还给出了查看总学分排名的链接>>>>学分排名
第四步:利用python的jieba分词和wordcloud生成词云图。 我的课程 我的课程词频
3. 学员学分分析
3.1 学分基本情况
我通过分析URL提取了全部学员的学员积分情况。截止2月28日,58名学员最高分795.2,最低分0.5,平均分235.5,中位分171.6。学分最高的前10人,有7人来自法 * * 集团,3人来自光 * 集团。 学分区段人数分布学分整体呈现左偏态分布,因此中位分比平均分更有代表意义。
3.2 按部门分析
从分部门统计看,表现最好的应该是投 * * * 部,平均分达到333.5,平均分超过300分的还有法 * * 集团和光 * 集团;平均分低于100分的是博 * * 工作站和科 * 中心。 按部门统计学分3.3 按性别分析
从分性别统计看,女生平均分252.5,中位分200.5;男生平均分225.2,中位分160.5。女生表现要好于男生,女生分差波动也小于男生。 按性别统计学分3.4 按学历分析
从分学历统计看,本科、大专和硕士表现相当,本科略胜出;博士(后)表现较差。 按学历统计学分.PNG4. 其他
4.1 课程视频下载
本人在看其他平台教学视频的时候通常都是1.5 - 2倍速度播放。时代光华平台上的视频无法加速播放和快进,这是服务器上做了限制,即使安装诸如video speed controller这种google chrome插件也没法解决。考虑到平台上有些课程视频既想学,但又嫌播放慢,这里我基于网页代码分析提供一种方法。首先要获取三个参数,分别是elsSign,courseId,scoId,分别代表登录用户的session id,课程名称id,以及具体视频的id。session id可以登录平台后在cookie中找到。
5555.PNG 而courseId可以在我前面抓取的平台课程json文件中得到,scoId可以通过courseId间接得到,地址为http://www.jyjxw.21tb.com/els/html/courseStudyItemcourseStudyItem.loadCourseItemTree.do?courseId=b4cc0cf32745fb617e9b4d79746b5302&courseType=NEW_COURSE_CENTER
,会返回包含该课程下所有视频scoId的html代码。得到这三个参数后,就可以通过下列url获取视频的原始地址:http://www.jyjxw.21tb.com/els/html/courseStudyItem/courseStudyItem.selectResource.do?scoId=c9a6bf7ba3a3420f9a6998a9c1844904&courseId=14bbbbd29383c2679933a8f40bb86544&elsSign=elnSessionId.132eb9b0f4c14f239d72d095454c11a1
。由于平台服务器要求必须是post请求才返回结果,加上服务器做了跨域限制,只好通过postman工具获取结果,黄色标记的就是视频原始地址,在浏览器中打开会直接提示下载视频,然后就可以用本地播放器播放视频。
postman运用
4.2 时代光华官网课程词频分析
在学习网络平台课程的时候,我感觉课程内容有些陈旧,比如感兴趣的项目管理、数据分析、互联网技术类课程很少。为此,我特意访问了时代光华官网,然后爬了一些官网的课程来做对比。结果如下:
5. 结语
由于自己不是课程管理员,数据来源有限,另外自己的数据分析水平还较初级,对课程的数据分析和解读暂时就这么多了。