返回顶部
首页 > 资讯 > 后端开发 > Python >Python制作动态词频条形图的过程是怎样的
  • 856
分享到

Python制作动态词频条形图的过程是怎样的

2023-06-25 14:06:16 856人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家介绍python制作动态词频条形图的过程是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言”数据可视化“这个话题,相信大家并不陌生,在一些平台,经常可以看到一些动态条形图的视频,大多都是某国家 G

这篇文章给大家介绍python制作动态词频条形图的过程是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

前言

数据可视化“这个话题,相信大家并不陌生,在一些平台,经常可以看到一些动态条形图的视频,大多都是某国家 GDP 的变化或者不同国家疫情中感染人数的变化等等。

这篇文章,我们将使用 Python 绘制动态词频条形图,顾名思义,就是以词频作为数量指标的动态条形图。

前期准备

输入以下命令,安装必须的库:

pip install JiashuResearchToolspip install jiebapip install pandaspip install bar_chart_race

数据的选择与获取

我们这次使用的数据是简书文章收益排行榜,日期范围为 2020 年 6 月 20 日至 2021 年 9 月 18 日。

Python制作动态词频条形图的过程是怎样的

从网页中解析数据的过程较为复杂,我们使用简书数据科学库 JianshuResearchTools 完成。

为方便调试,我们使用 Jupyter Notebook 进行交互式开发

导入 JianshuResearchTools,并为其设置别名:

import JianshuResearchTools as jrt

调用接口,获取 2021 年 9 月 17 日的数据:

jrt.rank.GetArticleFPRankData("20210917")

返回的数据如下:

[{'ranking': 0,  'aslug': 'a03adf9d5dd5',  'title': '幸得君心似我心',  'author_name': '雁阵惊寒',  'author_avatar_url': 'https://upload.jianshu.io/users/upload_avatars/26225608/682b892e-6661-4f98-9aab-20b4038a433b.jpg',  'fp_to_author': 3123.148,  'fp_to_voter': 3123.148,  'total_fp': 6246.297}, {'ranking': 1,  'aslug': '56f7fe236842',  'title': '伤痕',  'author_name': '李文丁',  'author_avatar_url': 'Https://upload.jianshu.io/users/upload_avatars/26726969/058e18c4-908f-4710-8df7-1d34d05d61e3.jpg',  'fp_to_author': 1562.198,  'fp_to_voter': 1562.198,  'total_fp': 3124.397}, (以下省略)

可以看出,返回的数据中包含文章的排名、标题、作者名、作者头像链接和关于简书资产的一些信息。

我们只需要文章的标题进行统计,所以我们将上面获取到的数据赋值给变量 raw_data,然后:

[item["title"] for item in raw_data]

使用列表推导式,我们得到了文章标题组成的列表。

为方便处理,我们将这些数据连接起来,中间用空格分隔:

" ".join([item["title"] for item in raw_data])

但是我们遇到了报错:

TypeError: sequence item 56: expected str instance, NoneType found

从报错信息中可以看出,我们获取到的文章标题列表中有空值,导致字符串的连接失败了。

(空值是因为作者删除了文章)

所以我们还需要加入去除空值的逻辑,代码编程这样:

" ".join(filter(None, [item["title"] for item in raw_data]))

filter 函数在第一个参数为 None 时,默认过滤掉列表中的空值。

现在我们获取到的数据如下:

'幸得君心似我心 伤痕 短篇|阿生 “我最喜爱的友友”大评选|理事会 · 中秋嘉年华,等你来! 是缘是劫无须问,石火穷年一蝶迷 职业日记|从蜜月到陌路:我和美国外教的一点事 红楼||浅谈《红楼梦》开篇一顽石 城市印象|走笔八卦城 花豹与狗的爱情终结在人与动物的战争里(以下省略)

接下来,我们需要获取时间范围内的所有数据。

查询 JRT 的函数文档可知,我们需要一个字符串类型,格式为”YYYYMMDD“的参数表示目标数据的日期。

所以我们需要写一段程序,用于实现这些日期字符串的生成,代码如下:

from datetime import date, timedeltadef DateStrGenerator():    start_date = date(2020, 6, 20)    after = 0    result = None    while result != "20210917":        current_date = start_date + timedelta(days=after)        result = current_date.strftime(r"%Y%m%d")        yield result        after += 1

接下来,我们编写一段代码,实现对这些数据的获取:

result = []for current_date in tqdm(DateStrGenerator(), total=455):    raw_data = jrt.rank.GetArticleFPRankData(current_date)    processed_data = " ".join(filter(None, [item["title"] for item in raw_data]))    result.append({"date": current_date,                    "data": processed_data})

这里使用 tqdm 库显示了一个进度条,非必须。

使用 Pandas 库,将我们采集到的数据转换成 DataFrame:

df = pandas.DataFrame(result)

Python制作动态词频条形图的过程是怎样的

Python制作动态词频条形图的过程是怎样的

分词

我们使用 jieba 库实现分词,先尝试对第一条数据进行处理:

jieba.lcut(df["data"][0])

使用 Python 标准库 collections 中的 Counter 进行词频统计:

Counter(jieba.lcut(df["data"][0]))

简单画个条形图:

Python制作动态词频条形图的过程是怎样的

可以看到,空格和一些标点符号,包括”的“、”我“之类无意义词汇出现频率很高,我们需要将它们剔除出去。

我们构建一个存放停用词的 txt 文档,之后使用如下代码将其读取,并转换成一个列表:

stopWords_list = [item.replace("\n", "") for item in open("stopwords.txt", "r", encoding="utf-8").readlines()]

接下来,编写一个函数,实现停用词的剔除,为了方便后续的数据处理,我们也一并剔除单字和只出现一次的词语:

def process_words_count(count_dict):    result = {}    for key, value in count_dict.items():        if value < 2:            continue        if len(key) >= 2 and key not in stopwords_list:            result[key] = value    return result

另外,我们使用 jieba 库的 add_word 函数将一些简书中的组织名和专有名词添加到词库中,从而提高分词的准确性,代码如下:

keywords_list = [item.replace("\n", "") for item in open("keywords.txt", "r", encoding="utf-8").readlines()]for item in keywords_list:    jieba.add_word(item)

经过一番处理,现在分词效果有了明显的改善:

Python制作动态词频条形图的过程是怎样的

最后,用这段代码对所有数据进行分词,并将结果保存到另一个 DataFrame 中:

data_list = []date_list = []for _, item in df.iterrows():    date_list.append(datetime(int(item["date"][0:4]), int(item["date"][4:6]), int(item["date"][6:8])))    data_list.append(process_words_count(Counter(jieba.lcut(item["data"]))))processed_df = pandas.DataFrame(data_list, index=date_list)

我最终得到的结果是一个 455 行,2087 列的 DataFrame。

Python制作动态词频条形图的过程是怎样的

筛选与可视化

这样多的数据,其中很大一部分都不能代表整体情况,所以我们需要进行数据筛选。

使用以下代码,统计所有列数值的总和,即每个关键词在全部数据中出现的次数,存储到名为 sum 的行中:

try:    result = []    for i in range(3000):        result.append(processed_df.iloc[:, i].sum())except IndexError:    processed_df.loc["sum"] = result

Python制作动态词频条形图的过程是怎样的

运行以下代码,只保留在数据集中出现 300 次以上的关键词:

maller_df = processed_df.T[processed_df.T["sum"] >= 300].Tsmaller_df = smaller_df.drop(labels="sum")smaller_df.columns

现在,数据集中的列数减少到了 24 个,可以进行可视化了。

不要忘记先导入模块:

import bar_chart_race as bcr

使用此模块需要先安装 FFmpeg,这方面教程可以自行查找。

另外,为了支持中文显示,我们需要打开这个模块下的 _make_chart.py 文件,在 import 之后增加以下两行代码:

plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False

这两行代码将会把 matplotlib 的默认字体替换成支持中文显示的字体。

最后,使用一行代码完成可视化:

bcr.bar_chart_race(smaller_df, steps_per_period=30, period_length=1500, title="简书文章收益排行榜可视化", bar_size=0.8, fixed_max=10, n_bars=10)

在这行代码中,我们使用 smaller_df 作为数据集,输出文件为 output.mp4,帧率设置为 30,每行数据显示 2 秒。

由于数据较多,这一步时间较长,而且会占用较多内存。运行结束后,即可在目录中找到输出的文件。

Python制作动态词频条形图的过程是怎样的

关于Python制作动态词频条形图的过程是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: Python制作动态词频条形图的过程是怎样的

本文链接: https://lsjlt.com/news/305410.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python制作动态词频条形图的过程是怎样的
    这篇文章给大家介绍Python制作动态词频条形图的过程是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言”数据可视化“这个话题,相信大家并不陌生,在一些平台,经常可以看到一些动态条形图的视频,大多都是某国家 G...
    99+
    2023-06-25
  • Python制作动态词频条形图的全过程
    目录前言前期准备数据的选择与获取分词筛选与可视化总结前言 ”数据可视化“这个话题,相信大家并不陌生,在一些平台,经常可以看到一些动态条形图的视频,大多都是某国家 GDP 的变化或者不...
    99+
    2024-04-02
  • Python利用matplotlib实现制作动态条形图
    目录制作思路animation大家好,本文将分享如何使用matplotlib制作动态条形图,制作的图很美,这个是我在之前发布的一篇中使用的图片, 效果如下 制作思路 为了方便大家学...
    99+
    2024-04-02
  • Python Matplotlib绘制条形图的全过程
    目录条形图 单组条形图 水平条形图 多组条形图 堆积条形图 对称条形图 总结条形图 条形图具有丰富的表现形式,常见的类型包括单组条形图,多组条形图,堆积条形图和对称条形图等。 单组...
    99+
    2024-04-02
  • 一款Python工具制作的动态条形图(强烈推荐!)
    目录前言GitHub地址:方法如下总结 前言 大家好,说起动态条形图,之前推荐过两个 Python 库,比如Bar Chart Race、Pandas_Alive,都可以实...
    99+
    2023-02-16
    python动态条形图怎么做 python条形图代码 python画动态图代码
  • Python实现动态条形图绘制的示例代码
    目录动态条形图变动态柱状图指定排序方式限制条目数设置固定条目固定数值轴,使其不发生动态变化设置图像帧数,默认 10 帧设置帧率,单位时间默认为 500ms设置每帧增加的标签时间,默认...
    99+
    2024-04-02
  • ppt动画制作过程是怎么样的
    ppt动画制作过程是怎么样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  大多数人使用ppt,通常就是直接将素材复制黏贴进去,再进一步也仅限于简单的排版。其...
    99+
    2023-06-06
  • Python实现动态条形图的示例详解
    关于数据可视化的模块,之前已经分享过很多了,小伙伴们可以到历史文章中搜索,不过都是静态的可视化数据展示效果。 这几天刚刚发现的这款动态数据可视化模块pynimate值得一提。 它可以...
    99+
    2023-03-22
    Python绘制动态条形图 Python动态条形图 Python条形图
  • photoshop雪景制作过程是怎样的
    这篇文章将为大家详细讲解有关photoshop雪景制作过程是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。photoshop雪景制作教程打开photoshop,图片打开之后右击背景,点...
    99+
    2023-06-05
  • Android下录制App操作生成Gif动态图的全过程
    Android App开发完了,自然希望录个gif做个展示。视频也可以做展示,但是需要上传到优酷、土豆等等,而且本来就十几秒的App演示操作过程,视频网站的广告就要一分钟,没有...
    99+
    2022-06-06
    gif动态图 app Android
  • python学习之10行代码制作炫酷的词云图(匹配指定图形形状)
    文章目录 前言一、需要准备什么?二、代码实现(示例)三、读入数据四、结果展示五、修改词云颜色后的运行结果展示:总结 前言 想必大家有一个问题:什么是词云呢? 词云又叫名字云,是对文本数据...
    99+
    2023-10-26
    python 学习 数据分析
  • python怎么通过Matplotlib绘制常见的图形
    今天小编给大家分享一下python怎么通过Matplotlib绘制常见的图形的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所...
    99+
    2024-04-02
  • Netty NioEventLoop启动过程是怎样的
    本篇内容介绍了“Netty NioEventLoop启动过程是怎样的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!启动分析NioEventL...
    99+
    2023-06-04
  • Python爬虫过程是怎样的
    本文小编为大家详细介绍“Python爬虫过程是怎样的”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python爬虫过程是怎样的”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。网络爬虫从一个或若干初始网页的URL开...
    99+
    2023-06-17
  • Linux内核驱动fsync机制实现过程是怎样的
    Linux内核驱动fsync机制实现过程是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在Linux内核中的IO模型基本分为4类: 1、同步阻塞I/O 2、同步非阻塞I/...
    99+
    2023-06-13
  • 剖析Python源代码编制过程是怎么样的
    剖析Python源代码编制过程是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python语言中提供的re模块能支持正则表达式,还提供SGML,XML分析模块,大多数的...
    99+
    2023-06-17
  • php实现ffmpeg处理视频的过程是怎样的
    本篇文章给大家分享的是有关php实现ffmpeg处理视频的过程是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最近有一个项目需要使用ffmpeg处理视频,这里我写了一个d...
    99+
    2023-06-22
  • Python数据可视化中的环形图是怎样的
    今天给大家介绍一下Python数据可视化中的环形图是怎样的。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。1.引言环形图(圆环)在功能上与饼图相同,整个环被分成...
    99+
    2023-06-26
  • R语言怎么利用barplot()制作条形图的各种实例
    本篇内容介绍了“R语言怎么利用barplot()制作条形图的各种实例”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言函数barplot()...
    99+
    2023-06-09
  • HTML5 SVG中的图形绘制介绍及使用是怎样的
    本篇文章给大家分享的是有关HTML5 SVG中的图形绘制介绍及使用是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。基本形状SVG提供了很...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作