在线教育网站学习,是很多人利于闲余时间进行充电的一种选择。本篇文章利用python抓取在线教育网站课工场课程页面的数据,进行简要分析。

通过使用requests库对课工场课程列表页进行抓取。

通过BeautifulSoup对课工场课程列表页面进行解析,并从中获课程名称,课程类型,付费类型,课程学习人次的数据。

最后再利用python的pandas,matplotlib,seaborn模块对数据进行处理和分析

0,工作环境搭建

环境:

win10+Anaconda +jupyter Notebook

模块:

爬虫和网页解析相关的模块:

requests,BeautifulSoup,time

数据分析模块:

Numpy,pandas

画图模块:

matplotlib,seaborn

1,构建爬虫,抓取需要的信息

构造爬虫是需要注意

  1. 开始抓取前先观察下目标页面或网站的结构,其中比较重要的是URL的结构
  2. 在抓取网页时,为了尽量伪装成正常的请求,我们需要在http请求中设置一个头部信息,否则很容易被封。头部信息网上有很多现成的。并手动设置每次请求的时间间隔。

A,构造爬虫

import requests,time
from bs4 import BeautifulSoupurl = 'http://www.kgc.cn/list/230-'+str(i)+'-6-9-9-0.shtml'
headers={'Accept':'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding':'gzip, deflate, br',
'Accept-Language':'zh-CN,zh;q=0.8',
'Connection':'keep-alive',
'Referer':'http://www.baidu.com/link?url=
_andhfsjjjKRgEWkj7i9cFmYYGsisrnm2A
-TN3XZDQXxvGsM9k9ZZSnikW2Yds4s&
wd=&eqid=c3435a7d00006bd600000003582bfd1f'
}for i in range(1,64):if i==1:url = 'http://www.kgc.cn/list/230-'+str(i)+'-6-9-9-0.shtml'r = requests.get(url=url,headers=headers)html = r.textelse:url = 'http://www.kgc.cn/list/230-'+str(i)+'-6-9-9-0.shtml'r = requests.get(url=url,headers=headers)html2 = r.texthtml = html + html2time.sleep(0.8)

B,解析页面,提取信息

kgc = BeautifulSoup(html,"html.parser")# 提取课程名称
name= kgc.find_all("a",attrs={"class":"yui3-u course-title-a"})c_name = []
for n in name:course_name = n.string.split()[0]c_name.append(course_name)#提取课程参加人数
number = kgc.find_all("span",attrs={"class":"course-pepo"})p_number=[]
for p in number:people_number = p.stringp_number.append(people_number)#提取付费信息
price = kgc.find_all(class_=['view0-price f16','view0-old f14'])p_type = []
for p in price:price_type = p.stringp_type.append(price_type)#提取课程类别
category = kgc.find_all(class_="yui3-u course-title-a")c_category = []for c in category:soup=BeautifulSoup(str(c),"html.parser")tag = soup.ahref = tag.attrs['href']c_category.append(href)

C,写入pandas数据框中

import pandas as pdcourse = pd.DataFrame({"course_name":c_name,"student_number":p_number,"pay_type":p_type,"course_info":c_category})#检查下数据集构造的情况
course.head(10)


虽然我们已经把提取的信息构造为DataFarme结构的数据,但明显能看到,这个数据集有些粗糙。所以我们还需要,对数据集进行进一步的处理。

2,数据处理(特征构造)

数据处理的内容主要是对数据集进行数据清洗和加工。

数据处理的的目的是为了让数据集变得更利于下一步分析。

#从course_info字段中提取课程类别信息
course["category"] = course["course_info"].
apply(lambda x:x.split("/")[1].strip())#从course_pay字段中提取付费信息
import re
def get_num(string):return (re.findall("\d+\.?\d*",string))[0]
course["course_pay"] = course["pay_type"].apply(get_num).astype(float)#将“pay_type”字段中的“免费”替换为“0.00”
course.replace({'pay_type': {'免费': '¥0.00', }}, inplace=True)#数据类型转换
course['student_number'] = course['student_number'].astype(float)import matplotlib.pyplot as plt
plt.style.use("ggplot")
plt.rc('font',family='STXihei')
import missingno as msno
import seaborn as sns
sns.set()%matplotlib inline
%config InlineBackend.figure_format="retina"#缺失值检查
msno.matrix(course,figsize=(12,5))


3,数据分析(数据探索和可视化)
探索性数据分析(Exploratory Data Analysis,简称EDA)目的是最大化对数据的直觉,完成这个事情的方法只能是结合统计学的图形以各种形式展现出来。通常涉及以下几种方法的组合:

原始数据集中每个字段的单变量可视化和汇总统计
数据集中每个自变量与目标变量之间的关系的双变量可视化和汇总统计
多元可视化以了解数据中不同字段之间的交互作用
让观察值聚类成有区别的小组

这里对处理后的数据简要的探索性分析。

A.学习人次以及付费人次

作为在线教育产品,知道有多少人次在学习课程,有多少人次学习付费课程,有多少人次是学习免费课程,是必须要关注的数据。

course.student_number.sum()
#输出:11611136.0no_pay = course.loc[course["course_pay"] == 0].student_number.sum()
#输出:3519971.0paid = course.loc[course["course_pay"] != 0].student_number.sum()
#输出:8091165.0

付费学习与免费学习两种类型占比

plt.rc('font', family='STXihei', size=20)
plt.figure(figsize= (12,8))#创建画布
plt.pie([no_pay, paid],labels=['No Pay','Paid'],autopct='%1.0f%%')
plt.title('Paid rate')
plt.axis("equal")


从数据中看出,该网站的课程,达到1100万学习人次,付费人次达到800多万,占比70%。

B,课程价格分布

course.course_pay.describe()#输出
count    1557.000000
mean       17.608863
std        17.697668
min         0.000000
25%         0.000000
50%        19.000000
75%        29.000000
max       299.000000
Name: course_pay, dtype: float64

价格分布直方图

course.course_pay.hist(bins=20)


课程价格多集中在20—30元左右,付费课程的平均价格是17元人民币,按照800万的付费人次计算,目前为止,课程销售额不低于1.36亿人民币。

insight:

在千万级学习人次中,付费学习人次达到800多万,占比70%,课程销售额不低于1.36亿人民币。很厉害的转化。

作为北大青鸟旗下的在线教育平台,除了依托北大青鸟自身的流量扶持。应该还在有流量引入能力的垂直领域类容分发平台,进行卡位。

经过验证发现,课工场,在国内比较有知名度的在线课程内容分发平台如百度传课,网易云课堂,腾讯课堂都进行了内容分发和卡位。但在淘宝同学上,却没有找到课工场。

而且在知乎这个知识社区分享平台中搜“课工场”品牌名称时,却没有关于它的内容,不知道为什么课工场在各个在线课程内容分发平台都进行了卡位,却在知乎上没有行动。我觉得在这样的知识分享社区,无论是从社区氛围,还是从知乎社区用户的角度看,最有利的广告主就是做在线教育的,尤其是做IT培训在线教育的。

C,课程类型分布

plt.rc('font', family='STXihei', size=15)
plt.figure(figsize= (12,8))#创建画布
sns.countplot(y='category', data=course)
plt.title('Course_category Count' )


网站中课程类型,多是偏向于编程技术如Java,handoop,android,linux

再来看看,用户参喜欢学习的课程多是哪些类型?

D,用户参与学习课程类型分布

plt.rc('font', family='STXihei', size=15)
plt.figure(figsize= (12,8))#创建画布
sns.barplot(data=course,x="student_number",y="category",ci=None)


位于前三的是Dotnet,office_software,personal_management,除了编程技术之外,职场办公,个人管理的课程也是很受欢迎的。但网站中关于office_software,personal_management的课程太少。

insight:

上面的数据表现,说明网站用户中除了技术岗位的学习群体,还有不少是普通岗位(非技术向)的。在下一步的内容运营中,应该有意识的增加职场办公,个人管理这两个方向上的课程。

网站推广中增加对普通职场(非技术向)群体的覆盖。如果是选择某类型的单品课程,针对这类群体推广,应该把选择方向上锚定在这两个方向上职场办公,个人管理类型的课程。

E,课程价格种类分布

course.course_pay.value_counts().plot(kind="bar",figsize=(12,8))

可以看到,付费课程的价格主要集中在9,19,29 ,这三个类别。

insight:

在上一步的分析中,可以看到,在参与学习人数最多的课程中,有两类课程:职场办公,个人管理

根这两个方向的课程学习人数,我们也或可推断,网站用户,多集中在职场白领群体,这部分群体是有较高的付费能力和购买能力的。

对于职场白领群体,课程的价格多不超过30元,是太过偏低的,还有可提升的空间。

当然,因为课程定价跟课程质量,数量,和学习时间周期都是相关的,所以定价也需要考虑这些因素。因为所得数据有限,这样的思考是基于这份数据而进行的假设,实际情况仍需要去通过更多的数据信息进行交叉验证。

再来看看在付费课程类型中,购买人数最多的课程是哪些。

F,付费课程类型中,平均购买人数最多的课程

course.loc[course["course_pay"] != 0]/
.groupby(["category","course_pay"])[["student_number"]].mean()/
.sort_values(by="student_number",ascending=False)


可以看到,平均购买人数最多的课程多是偏于编程技术的,其中java 位居首位,其次是H5,

然后是AR。

在平均购买人数最多的课程中,属于前端开发的课程占据了3门:angularjs,vuejs,html5,这也说明web开发,的确很火热。

但却没有看到,这两年火热程度,一直以火箭速度蹿升的python的身影。

G,免费课程中,平均参与学习人数最多的课程

course.loc[course["course_pay"] == 0]./
groupby(["category","course_pay"])[["student_number"]].mean()./
sort_values(by="student_number",ascending=False)


在免费课程中,参与学习人数最多的是个人管理的课程,排名前3的课程中,有2门课程是关于职场办公通用技能提升的课程:个人管理,office办公软件。

insight:

在后续的付费课程中,可以针对个人管理,office办公软件的方向上,出一些收费精品课程,

尝试对非编程技术学习群体进行商业付费的转化。

总结:

与应用相结合,让数据产生商业价值,永远是数据生命的所在,也是数据驱动业务优化的价值所在。

python数据分析实例:python抓取课工厂网站数据和分析相关推荐

  1. 数据分析与挖掘案例之使用python抓取豆瓣top250电影数据进行分析

    使用python抓取豆瓣top250电影数据进行分析 抓取豆瓣Top250电影数据的链接和电影名称 代码如下: import urllib.request as urlrequest from bs4 ...

  2. Python进阶之Scrapy抓取苏宁图书数据

    Python进阶之Scrapy抓取苏宁图书数据 1. 需求 2. 代码示例: 创建项目 start.py settings.py iterms.py snb.py pipelines.py 3. 注意 ...

  3. python 豆瓣评论分析方法_使用python抓取豆瓣top250电影数据进行分析

    抓取豆瓣Top250电影数据的链接和电影名称 代码如下: import urllib.request as urlrequest from bs4 import BeautifulSoup impor ...

  4. python怎么爬虎牙_使用python爬虫框架scrapy抓取虎牙主播数据

    前言 本文利用python的scrapy框架对虎牙web端的主播.主播订阅数.主播当前观看人数等基本数据进行抓取,并将抓取到的数据以csv格数输出,以及存储到mongodb中 思路 观察虎牙网站后确认 ...

  5. 用nodejs配合python破解X-Ca-Signature,抓取博客积分数据

    世界上最稀缺的资源是时间. 在某一瞬间我惊恐得发现,一生三万天,已过三分之一,念及年少不更事,蹉跎而过,觉得心中有愧.至今无建树,脑袋里想起一句话,"不因虚度年华而悔恨,也不因碌碌无为而羞耻 ...

  6. python数据分析实例-python数据分析实战

    Python数据分析实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1nlHM1IW8MYg3z79TUwIsWg 提取码:ux8t 复制这段内容后打开百度网盘手 ...

  7. python爬虫实例之爬取智联招聘数据

    这是作者的处女作,轻点喷.... 实习在公司时领导要求学习python,python的爬虫作为入门来说是十分友好的,话不多说,开始进入正题. 主要是爬去智联的岗位信息进行对比分析出java和pytho ...

  8. 用Python的第三方库抓取某点评网站的评论数据

    五一快到到准备去吃个火锅,可是不知道去哪吃,所以就去大众点评网看了看,但是数据太多眼花缭乱,无法找到想去的店铺,所以打算将所有店铺的数据抓取下来然后进行分析一下,说干就干. 老规矩先进行页面分析 页面 ...

  9. java抓取薅羊毛网站数据 并通过服务号推送到微信

    抓取网址为 https://ym.today/yangmao 1. java解析html首先引入jsoup <dependency><groupId>org.jsoup< ...

最新文章

  1. 计算机windows8黑屏怎么办,老司机为你解说win8系统电脑黑屏开不了机的处理办法...
  2. Linux 0.00 Makefile 说明
  3. 编译hbase2.2.4+hadoop3.1.2
  4. android文件管理器,ES文件浏览器(com.estrongs.android.pop) - 4.2.4.6.1 - 应用 - 酷安
  5. linux中cooy命令_Linux:CentOS 7中常用的基础命令
  6. 2017-2018-1 20155234第三周《信息安全系统设计基础》学习总结
  7. Allocate aligned memory
  8. jQuery如何退出each循环的?
  9. 自动化测试十大疑问解答 软件测试人必看
  10. python源码中的学习笔记_第1章_print 函数与数据类型
  11. Mimikatz的18种免杀姿势及防御策略
  12. CSS基础教程——纯CSS开发的气泡式提示框
  13. Unity人物残影实现
  14. 农业技术:从能量的角度看农业革命(垄耕种植法)
  15. Unity之对模型材质球进行处理
  16. MEGA软件——系统发育树构建方法(图文讲解) 转载
  17. cocos2dx之Chipmunk
  18. 验证码输入错误怎么再次刷新验证码
  19. win10 windows update禁用后又自动开启
  20. 联通资费大幅下降意在iPhone用户

热门文章

  1. Linux下安装jdk
  2. CSS系列之文本换行
  3. 用两片74HC138组合成4/16译码器
  4. 最全前端面试总结(1)
  5. 重装windows10系统
  6. String类的常见问题
  7. 用5分、2分、1分硬币组成一元钱,共有多少方式?
  8. 计算机开机控制信号,笔记本电脑开机及信号电路故障维修
  9. 《我不是药神》30亿票房后分析徐峥的选角眼光
  10. linux 文件夹修改名字,linux命令修改文件名_修改文件夹名字怎么操作