新闻联播的重要性我就不说了,懂的人自然懂。
因为每天涉及的内容还是不少的,如何从每天的新闻联播中快速提取到需要的重点信息变得重要。技术上来说分为几步:
- 新闻联播内容的文本的获取
- 文本的分词处理,提取出高频词
- 以直观的方式比如图表展现出来
好,下面挨个说一下。第一个可以从CCTV的官方网站获得新闻稿。可以人工去采集整理。不过这里我和大家分享一个数据平台Tushare, 大家可以注册一个账号,调用他们的API即可直接获得相关数据。平台已经整理好了,我们直接用Python的模块调用即可。 注册链接点这里 下面的分享也将基于该平台的数据。
准备工作:
- 假定你已经有Python运行环境了。如果没有的话,建议你安装Anaconda, 这里就不做过多展开了;
- 注册Tushare数据平台的账号, 注册链接点这里 注册后到“个人中心”提取API的 token 备用;
- 安装相关的模块。
这里就说一下第三步:
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install tushare -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install pyecharts -i https://pypi.tuna.tsinghua.edu.cn/simple/
其中 Pandas 一般是Anaconda已经内置安装过了。不用额外安装。
关于pyecharts 这里要特别说明一下,这里有一个坑就是pyecharts 分为 v0.5.X 和 v1 两个大版本,v0.5.X 和 v1 间不兼容,v1 是一个全新的版本。0.5.X系列,它是针对Python2.7和Python3.4的版本,现在已经不做维护。现在的趋势早就是用Python3了。Python3的当前最新版也是Python3.8了。如果你直接参考网络上的代码,可能会发现各种报错。
当然如果为了使用老式的代码,你可以直接由pip安装的当前的最新版(1.7.1),然后再安装旧版的pyecharts,如下:
pip uninstall pyecharts pip install pyecharts==0.5.11 -i https://pypi.tuna.tsinghua.edu.cn/simple/
本文不推荐这么做。因为旧版毕竟是旧版,迟早也要适应新版的写法。
下面上一下代码吧:
# -*- coding: utf-8 -*- """ 新闻联播 数据分析 词频统计 以词云图方式显示 参考自 https://zhuanlan.zhihu.com/p/53189751 另外做了更新,修复和改进 文本中的stopwords表 取自 https://github.com/shaonianruntu/SMS-Spam-Word-Frequency-Statistics/blob/master/stopwords.dat 2020.03.15 """ import pandas as pd import tushare as ts #from pyecharts import WordCloud from pyecharts.charts import WordCloud import jieba #分词 from collections import Counter import os # 读取新闻列表 the_date = '20200314' if os.path.isfile(F'news_{the_date}.csv'): #使用本地缓存的数据,避免调试时不必要的频繁调用API df = pd.read_csv(F'news_{the_date}.csv',encoding='utf-8') else: # init api pro = ts.pro_api('use_your_own_tushare_api_token') df = pro.cctv_news(date=the_date) df.to_csv(F'news_{the_date}.csv',encoding='utf-8') #过滤关键词 blacklist = ['责任编辑', '一定','一年', '一起', '一项', '一点儿', '一度','一系列','一道','一次','一亿','进行', '实现', '已经', '指出', '为什么', '是不是', '”',',','。','、','的','日','月','和','在', '一个', '一些', 'cctv', '一边', '一部', '一致', '一窗', '万亿元', '亿元', '一致同意', '本台记住', '发生', '上述', '不仅', '不再 ', '下去', '首次', '合作', '发展', '国家', '加强', '共同', '重要', '我们', '你们', '他们', '目前', '领导人', '推进', '中方', '坚持', '支持', '表示', '时间', '协调', '时间', '制度', '工作', '强调', '进行', '推动', '通过', '北京时间', '有没有', '新闻联播', '本台消息', '这个', '那个', '就是', '今天', '明天', '参加', '今年', '明天'] with open('stopwords.dat','r',encoding="utf-8") as f: for w in f.readlines(): blacklist.append(w.rstrip('\r\n').rstrip('\n')) #新增关键词 stopwords = ['一带一路', '雄安新区', '区块链', '数字货币', '虚拟货币', '比特币', '对冲基金', '自贸区', '自由贸易区','乡村振兴','美丽中国','共享经济','租购同权','新零售', '共有产权房','楼市调控', '产权保护', '互联网金融', '5G', '4G', '国企改革', '大湾区', '长江经济带','土地流转'] for word in stopwords: jieba.add_word(word) #add_word保证添加的词语不会被cut掉 df = df[df.content.isnull() == False] word_counter= Counter() for idx, row in df.iterrows(): word_counter.update( Counter([ word for word in jieba.cut(row['content']) if word not in blacklist]) ) c = ( WordCloud() .add("", list(word_counter.items()), word_size_range=[12, 55]) .render("news_wordcloud_custom_mask_image.html") )
可以看到,当前的热点新闻还是关于疫情的。
TODO: 增加过滤的关键词。当前的分词处理和统计中,仍然包括了大量无用的词。需要过滤掉。
参考文档:https://zhuanlan.zhihu.com/p/53189751
转载请注明:Linc Hu » 关于新闻联播的数据分析