查看原文
其他

可视化99-21年地方政府报告关键词变化趋势

大邓 大邓和他的Python
2024-09-09

使用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


二、构建可视化函数

本部分代码实现的功能

  1. 构建关键词词频统计函数keywords_frequency
  • 输入的是文本和关键词列表
  • 返回的是一个数字
  • 对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数据中计算 「企业融资约束指标

    可视化 | 词嵌入模型用于计算社科领域刻板印象等信息(含代码)

    可视化 | 绘制《三体》人物关系网络图

    可视化 | 使用决策树分析小红书帖子数据(含代码)

    转载 | 基于词嵌入技术的心理学研究: 方法及应用

    赶快收藏 | 社会科学文本挖掘技术资料汇总

    B站社会科学文本分析视频合集

    词嵌入技术在社会科学领域进行数据挖掘常见39个FAQ汇总

    文本分析 | 中国企业高管团队创新注意力(含代码)

    文本分析 | MD&A 信息含量指标构建代码实现

    金融研究 | 使用Python构建「关键审计事项信息含量」

    金融研究 | 文本相似度计算与可视化

    转载 | 社会计算驱动的社会科学研究方法

    推荐 | 社科(经管)文本分析快速指南

    视频分享 | 文本分析在经管研究中的应用

    转载 | 金融学文本大数据挖掘方法与研究进展

    转载 | 大数据驱动的「社会经济地位」分析研究综述

    使用 Word2Vec 和 TF-IDF 计算五类企业文化

    如何用「图嵌入」将企业、高管职业经历表征为向量数据

    JM2022综述 | 黄金领域: 为营销研究(新洞察)采集网络数据

    MS | 使用网络算法识别创新的颠覆性与否

    认知的测量 | 向量距离vs语义投影

    Asent库 | 英文文本数据情感分析

    PNAS | 文本网络分析&文化桥梁Python代码实现

    PNAS | 使用语义距离测量一个人的创新力(发散思维)得分

    PNAS | 历史文本中的语言积极性反映了动态的环境和心理因素(含Python代码)

    tomotopy | 速度最快的LDA主题模型

    数据集 | cctv新闻联播文稿数据

    数据集 | 睡前消息文稿数据集

    EDGAR | 25年数据的预训练词向量模型(含代码)

    2G数据集 | 80w知乎用户问答数据

    采购合同数据集 | 政府采购何以牵动企业创新

    借助chatGPT更高效地学习Python文本分析

    继续滑动看下一个
    大邓和他的Python
    向上滑动看下一个

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存