1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python数据分析师网易云课堂_网易云课堂 数据分析(一)

python数据分析师网易云课堂_网易云课堂 数据分析(一)

时间:2023-02-09 03:16:43

相关推荐

python数据分析师网易云课堂_网易云课堂 数据分析(一)

这篇文章是将要分析网易云课堂里的数据,分析时下学习的热点。

工具准备:

Chrome游览器,

python3.6 (包含requests,jieba库)

首先打开全部课程 - 网易云课堂,登陆之后打开chrome开发者工具,经过分析发现,云课堂里的数据是直接通过ajax获取,于是直接复制cookie模拟发送包,跳过登陆模拟。

截图显示了这个json数据的结构

import requests

import json

header = {

'Accept':'application/json',

'Accept-Encoding':'gzip, deflate',

'Accept-Language':'zh-CN,zh;q=0.8,en;q=0.6',

'Cache-Control':'no-cache',

'Connection':'keep-alive',

'Content-Length':'120',

'Content-Type':'application/json',

'Cookie':'', #input your cookie

'edu-script-token':'', #input your token

'Host':'',

'Origin':'',

'Pragma':'no-cache',

'Referer':'/courses',

'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',

}

payload= {

"pageIndex":'1',

"pageSize":'50',

"relativeOffset":'100',

"frontCategoryId":'-1',

"searchTimeType":'-1',

"orderType":'0',

"priceType":'-1'

}

由于这个request是个 Request Payload 而不是 Form Data,因而header里需要申明为json,以及一会儿发送时要将payload转换成json数据。

data_list = []

count=0

for i in range(60):

ret = requests.post("/p/search/studycourse.json", data=json.dumps(payload), headers=header)

payload["pageIndex"] = int(payload["pageIndex"])+1

temp_dic = ret.json()

if temp_dic["message"]!="ok":

print("error "+temp_dic["message"])

#data_list.append(temp_dic["result"]['list'])

for item in temp_dic["result"]['list']:

count +=1

data_list.append(item)

print(i+1,"/60")

print(count)

file_name='opencourse.json'

with open(file_name,'w') as file_object:

json.dump(data_list,file_object)

根据云课堂自己的数据,正好是3000条数据,然后将这3000条数据先保存。

接下来先对标题和介绍进行简单的分词,使用jieba库里的cut() method。 基本原理是用统计 构造Trie树做词典,然后构造DAG,使用动态规划找出最大概率组合。对于词典里没有的词,使用HMM进行划分。代码如下:

import jieba

word_count={}

for item in data_list:

temp_analyse = jieba.cut(item["productName"])

for temp in temp_analyse:

if word_count.get(temp) == None:

word_count[temp] = 1

else:

word_count[temp] = int(word_count[temp]) + 1

temp_analyse = jieba.cut(item["description"])

for temp in temp_analyse:

if word_count.get(temp) == None:

word_count[temp] = 1

else:

word_count[temp] = int(word_count[temp]) + 1

对词典排序后,出现次数最多的50个词 结果如下

sorted(word_count.items(),key=lambda item:item[1],reverse=True)

x[0:50]

Out[25]:

[(',', 21836),

('\n', 19297),

('的', 18876),

(' ', 15846),

('、', 9085),

('。', 8531),

('-', 6916),

('课程', 5677),

(':', 5130),

('.', 4165),

('你', 3218),

('/', 2830),

('学习', 2825),

('是', 2796),

('和', 2730),

('!', 2371),

(')', 2370),

('(', 2268),

('\r\n', 2268),

('在', 2149),

('—', 1967),

('了', 1711),

('本', 1690),

('与', 1633),

('】', 1547),

('【', 1537),

('《', 1521),

('》', 1521),

('?', 1449),

('基础', 1427),

('中', 1382),

('1', 1376),

('为', 1270),

('有', 1260),

('2', 1243),

('“', 1233),

('”', 1218),

(';', 1166),

('如何', 1128),

('可以', 1121),

('让', 1082),

('我们', 1061),

('3', 1042),

(':', 1034),

('教程', 1009),

('更', 1005),

('等', 999),

('设计', 981),

('讲解', 975),

('视频', 969)]

可见单纯的分词并不能满足我们的需求,于是我们采用下TD-IDF和textrank算法直接获取关键词。代码如下:

import jieba.analyse

word_count={}

for item in data_list:

temp_analyse = jieba.analyse.extract_tags(item["productName"])

for temp in temp_analyse:

if word_count.get(temp) == None:

word_count[temp] = 1

else:

word_count[temp] = int(word_count[temp]) + 1

temp_analyse = jieba.analyse.extract_tags(item["description"])

for temp in temp_analyse:

if word_count.get(temp) == None:

word_count[temp] = 1

else:

word_count[temp] = int(word_count[temp]) + 1

出现次数最多的40个词 结果如下:

[('课程', 1725),

('学习', 717),

('教程', 535),

('基础', 471),

('讲解', 422),

('入门', 389),

('视频', 372),

('http', 369),

('com', 351),

('技巧', 304),

('微信', 290),

('实战', 283),

('制作', 260),

('老师', 258),

('QQ', 248),

('设计', 247),

('如何', 240),

('开发', 218),

('学员', 214),

('掌握', 213),

('study', 211),

('案例', 201),

('163', 201),

('PPT', 199),

('课堂', 197),

('10', 190),

('更新', 184),

('英语', 179),

('知识点', 179),

('职场', 178),

('视频教程', 177),

('轻松', 176),

('Excel', 163),

('PS', 162),

('软件', 158),

('系列', 156),

('快速', 155),

('管理', 151),

('考试', 142),

('数据', 142),

('教学', 139),

('htm', 138),

('大家', 138),

('免费', 137),

('知识', 136),

('课程内容', 134),

('使用', 132),

('课时', 129),

('方法', 128),

('www', 127)]

由于textrank的代码和之前的代码重复度太高,直接研究jieba库就行了,结果和TD-IDF也差不多。

就从结果来看,单纯的TD-IDF和textrank算法不能满足我们的需求。因为‘课程’ ‘学习’的IDF值高,相对于助词来说,被认为是关键词,加之出现频率高,所以出现在第一第二名,但是我们更希望得到的是‘Excel’ ‘PS’这样的具体的关键词,得到当下学习的热点。

下一节会用余弦定理和层次聚类来处理这些数据。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。