其他
可视化99-21年地方政府报告关键词变化趋势
使用31省市的1999-2021年的省级政府工作报告,绘制出的不同类别关键词的趋势图。直接上最终效果效果图
一、准备数据
31M的数据,含file和text两个字段,数据下载链接
https://textdata.cn/blog/2023-03-19-visualize-8-province-gov-anual-report/
import pandas as pd
df = pd.read_csv('gov_reports.csv')
df.head()
用正则表达式整理出省份和年份的字段
df['year'] = df['file'].apply(lambda f: re.findall('\d{4}', f)[0])
df['prov'] = df['file'].apply(lambda f: re.findall('/(.*?)/', f)[0])
df.head()
构建透视表,行索引名为省份,列名为年份, 单元格内填充工作报告。代码比较复杂, 其实我也似懂非懂,死记硬背吧。
import pandas as pd
table_df = pd.pivot_table(df,
columns='year', #列-年份
index='prov', #行-省份
values='text', #单元格-文本
aggfunc=lambda cs: ''.join(str(c) for c in cs)) #让单元格填充文本
table_df
二、构建可视化函数
本部分代码实现的功能
构建关键词词频统计函数keywords_frequency
输入的是文本和关键词列表 返回的是一个数字
applymap从水平和垂直方向同时应用keywords_frequency 调用pyecharts可视化
代码比较费劲,不太方便讲,直接给完整代码
from pyecharts import options as opts
from pyecharts.charts import Line
import jieba
def keywords_frequency(cell, keywords):
try:
wcount = 0
words = jieba.lcut(cell)
for keyw in keywords:
wcount += words.count(keyw)
return wcount/len(words)
except:
return 0
def plot_trends(df, keywords, title):
df2 = df.applymap(lambda cell: keywords_frequency(cell, keywords))
line_chart = Line()
line_chart.add_xaxis(xaxis_data=df2.columns.tolist())
for linename in df2.index:
linedata = df2.loc[linename].tolist()
line_chart.add_yaxis(series_name = linename,
y_axis=linedata,
label_opts=opts.LabelOpts(formatter="{b}",
position="right",
is_show=False))
line_chart.set_global_opts(
title_opts=opts.TitleOpts(title=title,
pos_top="5%",
pos_right='30%'),
xaxis_opts=opts.AxisOpts(name="Year"),
yaxis_opts=opts.AxisOpts(name="Value"),
legend_opts=opts.LegendOpts(pos_right=True, orient='vertical'),
)
# Render the chart as an HTML file
return line_chart.render_notebook()
三、成品展示
3.1 三农
展示三农问题关键词20年来变化,因为省份太多会干扰视觉,这里大邓挑选了8个省市。
selected_df = table_df.loc[['河北', '山东', '北京', '上海', '广东', '浙江', '黑龙江', '湖南'],:]
keywords = ['农村', '农业', '农民']
title='各地政府年度工作报告三农词讨论趋势(1999-2021)',
plot_trends(df=selected_df,
keywords=keywords,
title=title)
从上图中,可以看出
05年提及三农词占比最多的是湖南,是20年以来8省市中占比值最高记录 大多数省份在07年达到峰值 07年前,工作报告中提及三农词提及三农词的占比趋势是上升的 07年后,工作报告中提及三农词提及三农词的占比趋势是下升的。
3.2 科学技术
selected_df = table_df.loc[['河北', '山东', '北京', '上海', '广东', '浙江', '黑龙江', '湖南'],:]
keywords = ['科学', '技术', '创新']
title='各地政府年度工作报告科学技术词讨论趋势(1999-2021)',
plot_trends(df=selected_df,
keywords=keywords,
title=title)
从上图中,可以看出
从2000年以来, 工作报告中提及科学技术词提及的占比趋势一直是稳步上升的
8省市20多年的工作报告中,提及科学技术词最少的省份是黑龙江。
07年后,工作报告中提及三农词提及三农词的占比趋势是下升的。
3.3 环保
selected_df = table_df.loc[['河北', '山东', '北京', '上海', '广东', '浙江', '黑龙江', '湖南'],:]
keywords = ['环境', '环保', '绿色', '健康', '青山', '青山绿水', '绿水']
title='各地政府年度工作报告环保词讨论趋势(1999-2021)',
plot_trends(df=selected_df,
keywords=keywords,
title=title)
从上图中,可以看出
08、09年均值较低,前后提及环保词占比更高。可能的原因有
08年处于全球金融危机,经济不景气,相对正常年份,少管不管环境问题。 为准备北京奥运会,各地都有环保压力, 体现在08年前提及占比值整体处于较高水平 奥运后,松一口气? 最近几年,提及值一直处于上升趋势
在看上图, 06-12年的北京和河北,趋势不太一样。
北京09达到局部最高值后下降了几年 河北06-09与北京反着来,一直在下降 河北09之后,可能是钢铁等行业较多,环保压力随着国家的重视,被迫快速拉升
基本跟自己的记忆产生了联系,数据可视化效果还是挺不错的。
精选文章
管理世界 | 用正则表达式、文本向量化、线性回归算法从md&a数据中计算 「企业融资约束指标」
可视化 | 词嵌入模型用于计算社科领域刻板印象等信息(含代码)
JM2022综述 | 黄金领域: 为营销研究(新洞察)采集网络数据
PNAS | 使用语义距离测量一个人的创新力(发散思维)得分