# 分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
> 版权声明:本文为博主m2fox原创文章,转载请注明出处:http://www.jianshu.com/p/bfde4f742294
每年我国政府都会发布年度政府工作报告,而报告中出现最多的TopN关键词都会成为媒体热议的焦点,更是体现了过去一年和未来政府工作的重点和趋势。
在中央政府网站上也可以看到从1954年至今每年的政府工作报告,链接:http://www.gov.cn/guoqing/2006-02/16/content_2616810.htm
那么突发奇想,从这60多年间的政府工作报告中可以看出来什么样的变迁呢?说干就干,下面就是实现这一想法的历程。
# 目标是什么
* 获取1954年至今历年政府工作报告的全文,并统计出每年政府工作报告中Top20的关键词,并用图表可视化展示出来。
* 统计每十年的政府工作报告的合并Top20关键词,并用图表直观展示出来,从中分析出变迁的趋势。
# 准备工作
### 数据获取
数据获取阶段需要有两个准备:
* 网页链接:
2017年政府工作报告链接:http://www.gov.cn/premier/2017-03/16/content_5177940.htm
1954~2017年政府工作报告汇总页面链接:http://www.gov.cn/guoqing/2006-02/16/content_2616810.htm
* 技术准备
使用非常好用的web库——requests获取网页内容。
### 数据解析
使用BeautifulSoup库解析网页HTML内容,从中解析出政府工作报告的文本内容。
### 数据处理与分析
使用结巴分词库(jieba)对政府工作报告文本内容进行分词、过滤无效词、统计词频。
### 结果展示
使用matplotlib库画出每十年政府工作报告关键词的散点分布图,通过对比不同年代的图,分析其中的变化趋势。
# 动手搞
准备工作做好后,我们开始按照计划一步步地开始实施。
### 获取网页HTML内容
为了代码复用,创建一个html_utils.py文件,提供下载网页内容的函数,并提供了一个HTML页面解析异常类:
```python
# coding:utf-8
# html工具函数
import requests
# 通用请求Hearders
HEADERS = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36'}
# html页面解析异常
class HtmlParseError(Exception):
def __init__(self,value):
self.value = value
def __str__(self):
return repr(self.value)
# 获取网页页面html全文
def get_html(url):
resp = requests.get(url,headers = HEADERS)
resp.encoding = 'utf-8'
if resp:
return resp.text
return None
```
### 创建一个分词工具
我们的总体思路是先获取网页内容,然后从网页内容中解析出政府工作报告正文,然后对其进行分词,这里分词需要用到jieba模块,我们创建一个cut_text_utils.py文件,在其中提供分词的函数,内容如下:
```python
# coding:utf-8
# 分词操作工具函数
import sys
import jieba
from collections import Counter
# 对一段文本进行分词,并过滤掉长度小于2的词(标点、虚词等),用全模式分词
def cut_text(text):
cut_list = jieba.cut(text.lower())
return [word for word in cut_list if len(word) >= 2]
# 统计出一段文本中出现数量最多的前n个关键词及数量
def get_topn_words(text,topn):
cut_list = cut_text(text)
counter = Counter(cut_list)
return counter.most_common(topn)
if __name__ == '__main__':
# 设置字节流编码方式为utf-8
reload(sys)
sys.setdefaultencoding('utf-8')
s = u'我想和女朋友一起去北京故宫博物院参观和闲逛。'
# print cut_text(s)
print get_topn_words(s,5)
```
运行上述Demo脚本,输出:
[(u'参观', 1), (u'北京故宫博物院', 1), (u'一起', 1), (u'女朋友', 1), (u'闲逛', 1)]
### 创建一个绘图工具
最终要使用matplotlib库绘出关键词的散点图,可以更直观地进行分析,所以我们再写一个绘图工具文件visual_utils.py,内容如下:
```python
# coding:utf-8
import matplotlib.pyplot as plt
# 指定默认字体,防止画图时中文乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
# 传入一组关键词及词频列表,从高到低绘出每个关键词频率的散点图
# keywords示例:[(u'张三',10),(u'李四',12),(u'王五',7)]
def draw_keywords_scatter(keywords,title = None,xlabel = None,ylabel = None):
# 先对keywords按词频从高到低排序
keywords = sorted(keywords,key = lambda item:item[1],reverse = True)
# 解析出关键词列表
words = [x[0] for x in keywords]
# 解析出对应的词频列表
times = [x[1] for x in keywords]
x = range(len(keywords))
y = times
plt.plot(x, y, 'b^')
plt.xticks(x, words, rotation=45)
plt.margins(0.08)
plt.subplots_adjust(bottom=0.15)
# 图表名称
plt.title(title)
# x,y轴名称
plt.xlabel(xlabel)
plt.ylabel(ylabel)
plt.show()
def main():
draw_keywords_scatter([(u'张三',10),(u'李四',12),(u'王五',7)],u'出勤统计图',u'姓名',u'出勤次数')
if __name__ == '__main__':
main()
```
运行上面的Demo脚本,绘图结果如下:
![](http://upload-images.jianshu.io/upload_images/8819542-9e9b467897169970.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
### 解析2017年政府工作报告
接下来我们先获取到2017年的政府工作报告试试水,创建一个文件year2017_analysis.py,内容如下:
```python
# coding:utf-8
# 分析2017年政府工作报告,从中提取出前20个高频词
import sys
from bs4 import BeautifulSoup as BS
import html_utils
import cut_text_utils
# 2017年政府工作报告全文URL
REPORT_URL = 'http://www.gov.cn/premier/2017-03/16/content_5177940.htm'
# 从2017年政府工作报告html页面内容中解析出正文
def parse_report_article(html):
soup = BS(html,'html.parser')
article = soup.find('div',attrs = {'id':'UCAP-CONTENT'}) # 报告正文,这里可以通过分析网页HTML结构获取到解析的方法
return article.text
# 传入2017年政府工作报告全文的URL,解析出topn关键词及词频
def get_topn_words(url,topn):
html = html_utils.get_html(url)
article = parse_report_article(html)
return cut_text_utils.get_topn_words(article,topn)
def main():
# 设置字节流编码方式为utf-8
reload(sys)
sys.setdefaultencoding('utf-8')
with open('out.tmp','w+') as fout:
fout.write(str(get_topn_words(REPORT_URL,20)))
if __name__ == '__main__':
main()
```
运行上述脚本,然后在当前目录下可以看到产生了一个out.tmp文件,其内容如下:
[(u'发展', 125), (u'改革', 68), (u'推进', 65), (u'建设', 54), (u'经济', 52), (u'加强', 45), (u'推动', 42), (u'加快', 40), (u'政府', 39), (u'创新', 36), (u'完善', 35), (u'全面', 35), (u'企业', 35), (u'促进', 34), (u'提高', 32), (u'就业', 31), (u'实施', 31), (u'中国', 31), (u'工作', 29), (u'支持', 29)]
从中可以看出2017年的前五关键词是:发展,改革,推进,建设,经济,和我们经常在媒体上看到的情况也比较吻合。
### 解析1954到2017每年的政府工作报告
思路是这样的,首先从汇总页面获取到每年政府工作报告网页的链接,然后分别爬取每个链接获取到网页内容,接着解析出每年的政府工作报告正文,最后对每10年的政府工作报告合并分析出Top20关键词并展示出来。
导包:
```python
# coding:utf-8
# 1954~2017年政府工作报告汇总分析
import sys
import json
from collections import OrderedDict
from bs4 impo
没有合适的资源?快使用搜索试试~ 我知道了~
基于python的一些项目
共135个文件
py:43个
html:34个
md:17个
需积分: 1 1 下载量 195 浏览量
2024-01-17
20:33:08
上传
评论
收藏 1.55MB ZIP 举报
温馨提示
基于python的一些项目基于python的一些项目基于python的一些项目基于python的一些项目基于python的一些项目
资源推荐
资源详情
资源评论
收起资源包目录
基于python的一些项目 (135个子文件)
auto-commit.bat 252B
auto-commit.bat 252B
scrapy.cfg 272B
pdf_info.conf 2KB
config.conf 494B
info.conf 170B
.gitignore 1KB
topics.html 64KB
douban-house-topics-2018-09-19.html 20KB
douban-house-topics-2018-09-18.html 20KB
douban-house-topics-2018-10-11.html 20KB
douban-house-topics-2018-09-13.html 19KB
douban-house-topics-2018-09-15.html 19KB
douban-house-topics-2018-10-09.html 19KB
douban-house-topics-2018-09-16.html 18KB
douban-house-topics-2018-10-10.html 18KB
douban-house-topics-2018-09-23.html 18KB
douban-house-topics-2018-09-24.html 18KB
douban-house-topics-2018-10-12.html 18KB
douban-house-topics-2018-09-26.html 17KB
douban-house-topics-2018-10-13.html 17KB
douban-house-topics-2018-09-17.html 17KB
douban-house-topics-2018-09-12.html 17KB
douban-house-topics-2018-09-30.html 16KB
douban-house-topics-2018-10-16.html 16KB
douban-house-topics-2018-09-14.html 15KB
douban-house-topics-2018-10-08.html 15KB
douban-house-topics-2018-10-14.html 15KB
douban-house-topics-2018-09-29.html 13KB
topics(100-300).html 7KB
topics(0-100).html 7KB
query_blog.html 1KB
result.html 916B
topics_tpl.html 805B
table_tpl.html 757B
douban-house-topics-2018-10-17.html 599B
douban-house-topics-2018-09-12.html 599B
update_blog.html 358B
list_blogs.html 342B
create_blog.html 298B
home.html 116B
test.json 37B
LICENSE 1KB
README.md 20KB
README.md 20KB
readme.md 17KB
README.md 13KB
README.md 10KB
README.md 6KB
info.md 1KB
README.md 1KB
README.md 542B
refer.md 210B
readme.md 180B
readme.md 178B
readme.md 111B
readme.md 90B
readme.md 44B
readme.md 36B
README.md 33B
1.png 53KB
2.png 39KB
3.png 36KB
4.png 34KB
5.png 30KB
3.png 23KB
2.png 19KB
5.png 15KB
4.png 15KB
1.png 11KB
SpiderCore.py 11KB
house_price_spider.py 9KB
add_context_menu.py 7KB
pdf_utils.py 5KB
summary_analysis.py 5KB
cut_pdf.py 5KB
santi_word_cloud.py 5KB
second_hand_house_spider.py 4KB
ziru.py 4KB
blog.py 3KB
settings.py 3KB
middlewares.py 3KB
santi_cut.py 3KB
validate_json.py 2KB
render.py 2KB
login.py 2KB
ParseUtil.py 2KB
convert.py 1KB
WebUtil.py 1KB
validate.py 1KB
visual_utils.py 1KB
year2017_analysis.py 1KB
add_bookmark.py 889B
cut_text_utils.py 814B
webutil.py 784B
handle_pdf.py 753B
html_utils.py 595B
constants.py 538B
HtmlConstant.py 441B
main.py 436B
共 135 条
- 1
- 2
资源评论
zero2100
- 粉丝: 160
- 资源: 2464
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功