练习一个从数据采集分析到展示的过程

很早之前写的一个舆论监测的小东西,虽然最终没有用到。
首页数据总览
在这里插入图片描述
热度排行榜TOP10
在这里插入图片描述

趋势观察
在这里插入图片描述
在这里插入图片描述
词云展示
在这里插入图片描述
lda话题分析
在这里插入图片描述
简单分为三部分:数据采集、数据分析、数据展示
信息来源都是面向公众的媒体平台,像微博、贴吧、知乎、微信这些,主要搜集关于某个主题文本信息。
爬下来的信息做了些初步的统计信息,和一些简单分析如上图。

剖析项目结构

第一部分 数据采集(即爬虫)

用python写的爬虫
爬虫结构
在这里插入图片描述

用到的库
在这里插入图片描述
各平台的反扒很多文章都有方法介绍,我是各个击破,综合到一起来着。
download模块
通用下载模块,对网页内容下载
parser模块
请求到的信息格式微博、知乎是json格式,只需json.loads下来取某个key的values即可,微信、贴吧等是html网页源码格式,我使用的是BeautifulSoup库,soup.find_all()很顺手,使用lxml库的etree的xpath语法虽更简单,但是有时因为一个元素去改整个得到list很是麻烦
dataoutput
数据储存,我用的是mysql

#数据统一格式
mdata = {
		 'plantform': 'weibo', 
		 'mtimestamp': create_time, 
		 'hotnum': hotnum, 
         'url': url, 
         'title': content,
         'comments': comments, 
         'username': username
         }

如上保存信息格式储存nosql数据库中更为方便
spidermain
调度模块,将前面三个模块综合起来
代码量:爬虫部分大概900行代码

本地调试完成,就可上传Linux服务器,设置定时任务,每天抓取,做为数据分析的基础

第二部分 数据处理分析原始数据

原始数据如上图
数据标记 (id)是拼接两个字段的值(plantform+title),大概率保证了信息的唯一性,同时也对同一title的信息内容更新比较友好。
储存内容 字段时需要对一些特殊字符过滤处理,一方面防止引起编码错误,和sql语句错误,例如 “#” 会当成注释
储存时间 均使用时间戳储存,取出时再转换成日期格式,
数据查重和更新 id使库里的数据具有唯一性,储存数据时遍历比较id即可,若id已存在,则进行更新,更新改变的数据如事件热度、url、comments等易改变的字段

update_sql = "UPDATE {TABLENAME} SET " \
                         "feeling='{feeling}'," \
                         "hotnum='{v0}'," \
                         "URL='{v1}'," \
                         "COMMENTS='{v2}' " \
                         "WHERE " \
                         "myid='{v3}'" \
                        .format(TABLENAME=self.__tablename,
                                feeling=feeling,
                                v0=item['hotnum'],
                                v1=item['url'],
                                v2=comments,
                                v3=item_str)

数据统计 根据字段内容分组统计,例如我的plantform字段下有weibo、weixin、tieba、zhihu等几个内容,按此查询group by plantform,几个平台的数据总览就出来了。
根据时间统计 统计每天的数据,以此观察信息发布的趋势,情绪态度的变化趋势。还写了一个py脚本,将mysql里每天的信息做统计建新表,提高查询信息效率。如下新建表字段:
在这里插入图片描述

词频统计 将title、comment字段下的内容查询先使用分词工具jieba分词、去停用词等预处理,统计即可,导入用户自定义词典分词更准确一些。
情感分析 一是使用snownlp,但是结果很难让人满意。
二是使用情感词典(玻森情感词典),如下,会有11万词的评分,使用使就是遍历该词典,结果得分一般是加和计算。
珀森词典
我对比后选择了后者。
话题聚类 将信息进行主题聚类,发现讨论的话题,
这里我使用的是lda主题模型,目标是找到每一篇文档的主题分布和每一个主题中词的分布,根据每个主题词的分布,我们加以概括这个主题,该主题下的文章内容我称之为一个讨论话题。
再处理文本之前先进行文本预处理,切词、去停用词,标记文档,参数调整,再训练模型即可,过程原理大家感兴趣可以找相关文档看。

代码量 统计分析部分大概500行代码

第三部分 数据展示

web页面来展示内容
图表更能直观的反映数据变化趋势,善用图表会有奇迹般效果。
在这里插入图片描述

首页我放置的是一个饼图,pycharts实现,查询情绪指数,将情绪指数在某个阈值内划分范围,分出积极、中性和消极三个等级,右侧放置各平台抓取的信息总数。每个图表连接新的页面展示该平台的详细数据。
趋势图是select新表中的数据,填充到pycharts实例中,将时间戳转换为日期格式倒序排列,生成时间变化趋势图。
词云部分将title、comments文本信息查询,做词频统计,然后再将词-词频数据填充到pycharts词云实例。
使用flask做web页面展示、pycharts作图,现学现用,不难。
代码量 该部分不算前端代码只有100行。
总体代码量 1600行代码,哈哈哈!

每一部分的东西都是之前几个学期学的东西,零零散散组了起来。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一加六

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值