线上Python课程都面向哪些方向?
本文作者:张馨月
文字编辑:朱巧利
导读
Python可以说是当下最为热门的编程语言之一,受疫情的影响各行各业都加入到了Python的学习队伍当中,互联网上以Python为主题的课程也层出不穷。那么这些五花八门的课程都主要面向哪些方向呢?今天小编就带大家爬取腾讯课堂及网易云课堂的Python课程标题并从中进行分析~
1.课程标题爬取
我们首先爬取腾讯课堂Python课程的题目(https://ke.qq.com/course/list/python)。点击F12进入开发者模式,可以看到该网页的请求方式为get。同时,查看该网页的源代码可以看到标题都包含在”class="item-tt-link" title=”字段中。
因此我们可以直接copy源代码并导入Stata中进行提取。
copy "https://ke.qq.com/course/list?mt=1001&st=2007&page=1" temp.txt,replace
import delimited using temp.txt,clear encoding("utf-8")
keep if ustrregexm(v1,`"class="item-tt-link" "')
gen url=ustrregexs(1) if ustrregexm(v1,`"a href="(.+?)""')
gen title=ustrregexs(1) if ustrregexm(v1,`" title="(.+?)""')
不过,通过观察第一页的源代码,可以发现总页数存放在json格式字段的关键字”total_page”中。
因此我们可以从这里提取,代码如下:
gen page=ustrregexs(1) if ustrregexm(v1,`""total_page":(.+?),"')
keep if page !=""
destring page,replace
local p=page[1]
这样,我们便可以遍历页码进行循环提取:
local p=page[1]
forvalues i=1/`p'{
copy "https://ke.qq.com/course/list?mt=1001&st=2007&tt=3036&page=`i'" temp.txt,replace
import delimited using temp.txt,clear encoding("utf-8")
keep if ustrregexm(v1,`"class="item-tt-link" "')
gen title=ustrregexs(1) if ustrregexm(v1,`" title="(.+?)""')
drop v1
save `i',replace
}
部分结果截图如下:
对于网易云课堂python课程的爬取,我们同样先查看开发者工具的请求方式与源代码中的内容,结果可以看到该网页的请求方式为post,且源代码中没有包含我们需要的信息。进一步观察开发者工具的XHR文件,可以看到studycourse.json中保留了我们需要的信息。但由于网站的设计,我们没有办法查看其中的内容,打开链接得到的内容如下:
因此这部分的内容使用Python中的selenium模拟网站,并使用xpath爬取,相关方法的介绍可以参考推文《Python爬虫之selenium爬取国家自然科学基金数据库(一)》《XPath Helper助XPath爬虫一臂之力》,这里不详细列出爬取过程。
2.词云图绘制
首先,我们将爬取网易云课堂得到的文件wy_title.xlsx与爬取腾讯课堂得到的dta文件进行合并,并导出为txt文件用于分词。
import excel using wy_title,first clear
drop A
fs *.dta
foreach file in `r(files)'{
append using `file'
}
replace title=ustrregexra(title,"【.+】","")
export delimited using title.txt,replace
接下来,调用Python中的jieba模块进行分词,详细用法可参考推文《高亮输出之唐诗作者》《从流调数据中寻找感染真相》,由于直接使用jieba分词无法识别“大数据”“机器学习”这类词汇,我们可以使用jieba.load_userdict自定义一个词典来辅助分词。程序如下:
clear all
python
import jieba
course=[]
with open(r"title.txt",encoding="utf8") as f:
for i in f.readlines():
str=i
course.append(str)
jieba.load_userdict(r"tsdict.txt") #添加自定义词典
with open("分词.txt","w",encoding="utf8") as f2:
for unit in course:
seg_list = jieba.cut(unit)
for word in seg_list:
f2.write(word+"\n")
end
此时我们得到了初步的分词结果,但从下图所示的部分截图中可以看到,结果中保留了一些单字、缺失值等“噪声”:
所以我们需要把这些不需要的内容进行剔除,并对结果进行词频统计,删掉频率小于5的单词。
import delimited using 分词.txt, clear encoding("utf-8")
rename v1 keyword
drop if ustrlen(keyword) == 1 // 删除单字
drop if keyword =="" //删除缺失值
preserve
import delimited using 停用词表.txt, clear ///
encoding("utf-8") varname(nonames)
outsheet using 停用词表.txt, replace nonames noquote
levelsof v1, local(keyword)
restore
foreach word in `keyword' {
drop if keyword == "`word'" //删除停用词
}
levelsof keyword, local(keyword)
bysort keyword: gen frequency = _N
gsort -frequency
duplicates drop //删除重复词
drop if frequency < 5 //删除出现频率小于5的词
最后使用wordcloud命令,便可绘制出词云图:
wordcloud keyword frequency using 词云.html, replace ///
size(15 80) range(3840 2160)
shellout 词云.html
从图上可以看到,和Python一起出现频率最高的词语是大数据,与之相关的数据库和框架包括MySQL、Oracle、Spark、Storm、Hadoop等。具体来看,现有的线上课程既包含入门课程,也涉及网络爬虫、数据分析与处理、机器学习、web开发等具体方向,还有一些课程专门针对于金融量化与企业办公,从中可以看到Python的应用领域还是很广的,大家在掌握基础知识后最好可以针对自己的应用领域确定学习路径。除了这些线上课程外,廖雪峰老师的网站、GitHub社区、CSDN网站以及我们的公众号也会分享与Python相关的内容,对Python感兴趣的小伙伴快快行动起来吧~
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。