数据解读独角兽企业“猿辅导”(第一部分)

*本文数据从猿辅导爬取,爬取工具为BeautifulSoup+jupyter notebook,共爬取课程条数1615个。(截至2018.10.18)

前言

本文以猿辅导为案例进行数据分析的第一篇文章,主要介绍数据分析的目标以及数据爬取的过程。希望通过本文和大家分享数据分析的一些方法,欢迎和我沟通交流。

还是先上图:

来自我的Keynote

可以看到,数据分析主要分为四个步骤:明确目标、获取数据、数据处理以及数据展示。根据不同的场景,有些时候还可能会需要构建模型,或者有些人还会把数据处理分成观察数据和数据清洗。这里不多讨论。

概述

本文将从以上几个部分整理本次数据分析的过程。

涉及知识点:结构化思维、描述性分析、相关性分析、python爬虫、数据清洗、mysql、数据可视化等。

第一部分:明确目标

明确目标是第一步也是最关键的一步,要做到“如何将一个命题转化拆分为一个可用数据分析的问题”。首先我们来问三个问题吧:

问1:为什么要分析一家教育行业的公司,能解决什么问题?

答:通过对教育行业中一家企业的分析,可以对行业现状有一定的了解。同时对当前该公司课程销售和教师队伍的分析,可以加强对教育行业的理解以及对在线教育发展的理解。

问2:要解决这些问题能否借助数据分析?

答:数据分析是一个很好的方法,可以对“猿辅导的课程情况”进行拆解:课程、老师、报名情况、价格、年级等等。当然更深层的分析还需要行业经验的支持。

问3:为什么选择“猿辅导”,从哪些方面考虑?

答:我是从一下几个方面考虑的:

1、课程重点突出

相对于沪江网等课程繁多的网站,猿辅导主要面向k12人群,定位比较清晰。

2、成立时间

猿辅导成立于2012年,目前已融资到E轮。属于独角兽企业,有一定示范意义。

3、数据爬取方便

市面上部分教育行业的网站课程内容少,而猿辅导的网站内容比较清晰(如图):

可见,猿辅导的网站结构化程度较好,数据比较容易爬取。

明确目标之后,还需要做的一件事情就是通过描述性分析相关性分析建立起对获取数据的初步思考:

Xmind

第二部分:数据获取

通过第一部分的整理我们已经有一定的对于获取哪些数据的概念了,下面就要具体来看一下了:

一、观察网页

正如前文所述,我们可以爬取每个课程的名称、年级、老师、报名人数、价格等信息。不过需要注意以下几点:

1、课程的分类依靠的是网址的不同,且每个年级下会有系统班、专题班等不同类型。

2、对于系统班,往往需要下钻一层获取该系统班下的每个课程信息

3、每个课程页面有细微的不同,在爬取时也要注意

二、爬虫层级结构

看一下网站的结构可能就更清晰了:

三、爬虫思路

根据上面的网站结构可以知道:

1、课程有三种类型,其中系统课多一层,因此系统课和专题/讲座的爬取可以分开;

2、年级学科是递进关系,可以使用for循环获取;

3、课程详情页面包含课程信息和教师信息,由于一个课程有可能有不止一位老师,可能导致主键的混乱,因此可以考虑分成课程表和教师表。

因此,最终我的爬虫代码分为三部分:

1、存放从首页获取的所有课程的课程id以及年级、学科等信息的课程表

2、从每个课程页面获取的课程详细信息如课程价格、报名人数等

3、从每个课程页面获取的教师详细信息如教师id、名字等

四、爬虫代码

说了那么多,具体的代码是什么样的呢?为了节省时间,我在关键的代码上面添加了备注。首先简单介绍一下我本次使用的爬虫方法:BeautifulSoup方法。

样例代码介绍

可以看出,在操作上只需要对不同类型的元素采用不同的标志即可爬取,方法简单容易上手。同时支持for循环,之后案例代码中也会提到。

再简单介绍一下如何观察网站:

观察网站

如图所示,在Chrome浏览器中点“检查”后,可以得到类似上图的前端代码,通过观察元素、确定元素位置、确定元素路径可以定位到我们需要爬取到元素。

下面我们就重点分析一下爬虫的代码吧。根据上面的计划,爬虫代码也分为三部分:

1、爬取所有课程的概览信息

字段包括:studyphase(学段:小学、初中、高中)、grade(年级:1-12)、channelid(课程类型:语文、数学。。。)、groupid(系统课id)、groupname(系统课名称)、groupurl(系统课网址)、lessonid(课程id)、lessonname(课程名称)、lessonurl(课程url)。其中,lessonid为主键

这一部分内容较多,因此在实际操作中我将爬虫程序分成几个部分编写:

1.1 首先是获取首页上所有可能的URL组合:

通过观察网站我们可以知道,猿辅导的首页课程页可以分成“小学、初中、高中”、“一年级到高三”、“语文、数学到编程”三个部分。因此可以用下面代码获取所有URL组合:

1.2 获取首页下系统课的group名、groupid、groupurl:

因为上文提到过,系统课和专题/讲座课的层级不同,因此需要分开处理。

1.3 对每个groupurl下的页面提取lessonid、lesson名、lessonurl:

1.4 对专题/讲座类课程做类似的操作

注意要判断是否为讲座类。

2、爬取每个课程页面的课程详细信息

字段包括:lessen_id(课程id)、price(课程价格)、signup_number(报名人数)。其中,lesson_id为主键

由于上面一部分已经将课程名称取出,这一部分只需要根据课程URL获取课程价格和报名人数即可:

但是由于猿辅导的课程页面有不同情况,比如:

因此在实际爬取时要做一个if判断:

3、爬取每个课程页面的教师详细信息

字段包括:lessen_id(课程id)、teacher_id(课程价格)、teacher_name(老师名字)。其中,teacher_id为主键。

同样的道理,我们先对某一页面的教师情况做爬取测试:

五、爬取结果

讲上述程序重新组织一下就可以得到我们的最终爬虫代码了,简书这里不方便录入,有兴趣的小伙伴可以去我的知乎文章查看。

爬取结果如下:

all_lesson表(清洗前),共1615条记录。

lesson_detail表(清洗前),共1615条记录。

teacher_detail表(清洗前),共1915条记录(考虑到一门课有多名老师的情况)。

小结

本篇文章主要讨论了对猿辅导进行数据分析的目标和数据获取的方法。在确定目标时利用描述性分析和相关性分析确定应当获取的数据,获取数据则利用结构化思维对网站的数据结构进行了整理,并根据整理情况设计和实现了python爬虫。 

最后,特别鸣谢:如何用数据分析方法剖析“猿辅导”K12课程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,472评论 25 707
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,426评论 2 59
  • 我觉得那些樱花是自己落的,那些雪也是, /带着我的胃病,和孤独, /我看见了黑色包围的你。 /而在一百年后的一个黄...
    砻水阅读 207评论 0 2