开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
前言
数据分析是指对数据进行清晰、系统的分析,以便于提取有价值的信息并进行决策。这一过程可以帮助人们了解数据背后的趋势和模式,并且可以提供有用的反馈来改进业务流程、产品设计或者其他决策。
数据分析通常包括收集、清理、探索和可视化数据,并使用统计方法和机器学习技术来分析数据。这些技术可以帮助人们预测未来的趋势,并且可以通过可视化工具来展示结果。
数据分析可以用于各种领域,包括商业、科学、工程和社会科学。数据分析师通常需要具备良好的数学和统计学知识,并且还需要掌握相关的软件工具和编程语言。
获取数据
获取数据的方式多种多样,其中爬虫是一种技术含量相对较高的方式。本次项目以分析智慧校园为主题,所以目标是爬取关键词为“智慧校园”和“数字校园”的微博内容。
爬虫基本步骤
爬虫(也称为网络爬虫、Web爬虫、蜘蛛)是一种自动地抓取网页内容的程序。爬虫通常被用来收集大量数据、监测网站变化或者执行其他自动化任务。
爬虫的基本步骤如下:
- 输入爬取的网站地址(URL)。
- 发送HTTP请求获取网页内容。
- 使用解析器(如Beautiful Soup或lxml)对网页内容进行解析,提取有用的数据。
- 将数据存储到本地或者数据库中。
- 对下一个要爬取的网站地址进行处理,并回到第一步继续爬取。
爬虫还可能需要使用代理服务器、使用Cookies或者进行反爬虫设置来避免被网站封禁。
分析爬取的网站
微博手机端网站m.weibo.cn/
f12浏览器网页开发者工具查看服务器响应返回的数据结构
可以看到数据保存格式为data->cards>编号->mblog
有用的信息(转发数、评论数、点赞数、内容)都保存在mblog,爬取时解析到mblog即可获取到数据。
编写代码
第一步设置请求头
#请求头
headers = {
"User-Agent": "", #可以从请求头中获取,也可以实现随机用户代理
"accept": "application/json, text/plain, */*",
"accept-encoding": "gzip, deflate, br",
}
第二步设置请求url和请求参数
# 请求地址
url = 'https://m.weibo.cn/api/container/getIndex'
# 请求参数
params = {
"containerid": "100103type=1&q={}".format(search_keyword),
"page_type": "searchall",
"page": page
}
第三步发送请求
# 发送请求
r = requests.get(url, headers=headers, params=params)
第四步进行解析
cards = r.json()["data"]["cards"]
# 微博内容
text_list = jsonpath(cards, '$..mblog.text'
# 微博创建时间
time_list = jsonpath(cards, '$..mblog.created_at')
# 微博作者
author_list = jsonpath(cards, '$..mblog.user.screen_name')
# 微博id
id_list = jsonpath(cards, '$..mblog.id')
# 微博bid
bid_list = jsonpath(cards, '$..mblog.bid')
# 转发数
reposts_count_list = jsonpath(cards, '$..mblog.reposts_count')
# 评论数
comments_count_list = jsonpath(cards, '$..mblog.comments_count')
# 点赞数
attitudes_count_list = jsonpath(cards, '$..mblog.attitudes_count')
JSONPath是一种用于在JSON文档中指定路径的语法。它可用于从JSON文档中选择和提取数据,类似于XPath用于从XML文档中选择和提取数据。
-
根对象使用
$来表示,而无需区分是对象还是数组。 -
表达式可以使用
.,也可以使用[]。如:$.store.book[0].title或$['store']['book'][0]['title'] -
表达式
(<expr>)可用作显式名称或索引的替代,如:$.store.book[(@.length-1)].title表示获取最后一个 book 的 title。 -
使用符号
@表示当前对象。过滤器表达式通过语法支持,?(<boolean expr>)如:$.store.book[?(@.price < 10)].title表示获取价格小于 10 的所有 book 的 title。
详细使用方法可以参考www.apifox.cn/help/refere… 最终爬取的数据如下图所示:
数据分析
文本分词
在所有人类语言中,一句话、一段文本、一篇文章都是由一个个的词组成的。词是包含独立意义的最小文本单元,将长文本拆分成单个独立的词汇的过程叫做分词。分词之后,文本原本的语义将被拆分到在更加精细化的各个独立词汇中,词汇的结构比长文本简单,对于计算机而言,更容易理解和分析,所以,分词往往是自然语言处理的第一步。在对文本进行分析前,首先要对文本进行分词,我们采用了jieba分词。jieba分词支持三种模式:精确模式,试图将句子最精确地切开,适合文本分析;全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。通过结果分析,我们选择使用精确模式,如下图所示。
可视化展示
由网络爬虫等工具爬取到的原始微博文本,通常都会带有我们不需要的信息, 所以需要对文本进行预处理。我们使用 Python 作为我们的预处理工具,其中的用到的库有 Numpy、Pandas 和 jieba,使用正则表达式去掉标点符号,然后使用 jieba 分词切分,最后读取停用词文件,去除停用词,计算词频。获得总计有1819个词,词频前十的词有:
| 校园 | 1285 |
|---|---|
| 智慧 | 778 |
| 数字 | 578 |
| 教育 | 435 |
| 学校 | 429 |
| 建设 | 344 |
| 信息化 | 151 |
| 中小学 | 131 |
| 发展 | 120 |
利用wordcloud库画出词云图,通过词云图可以更为直观的观察比较重要的关键词,如下图所示。
可视化出现最多的15个词汇,如下图所示。
关键影响词
具体操作如下:首先,利用 Python 进行词频统计并降序输出,选取其中前 200 个高频主题词,进一步筛选得到有效的高频主题词 74 个。然后,选取 44个用户及所发布的微博正文,对每条微博进行加权计算:转发量0.5+评论量0.3+点赞量 *0.2=权重w,高频主题词出现时则累加,以此类推,如下图所示。
从这些关键词中可以看出,当前智慧校园的建设以校园为主要阵地,利用5G技术、互联网信息技术、云平台技术等打造教学、科研、管理和校园生活为一体的新型智慧化的工作、学习和生活环境,如下图所示。未来,随着新的技术的不断提出和现有技术的发展完善,我相信在不久的将来智慧校园会颠覆传统的认知,让知识以新的方式传递给学生。