当前位置: 首页 > news >正文

建筑兔零基础自学python记录39|实战词云可视化项目——章节分布10(上)

    这次我们来制作《红楼梦》各章节的分布情况:

源代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as pltdf_hlm = pd.read_csv("hlm.txt", names=["hlm_texts"]).dropna()df_hlm = df_hlm[~df_hlm.hlm_texts.str.contains(r"第\d卷")].reset_index(drop=True)hui_mask = df_hlm.hlm_texts.str.match(r"第.+?回")
df_hui = pd.DataFrame(df_hlm.hlm_texts[hui_mask].str.split(' ').tolist(),columns=['Huiname', 'Firstname', 'Secondname'])df_hui['HuiNum'] = np.arange(1, len(df_hui) + 1)
df_hui['AllName'] = df_hui['Firstname'] + ',' + df_hui['Secondname']
df_hui['Start'] = hui_mask[hui_mask].index
df_hui['End'] = df_hui['Start'].shift(-1, fill_value=df_hlm.index[-1] + 1) - 1
df_hui['LineNum'] = df_hui['End'] - df_hui['Start']df_hui['Text'] = df_hui.apply(lambda row: ''.join(df_hlm.hlm_texts[row['Start'] + 1:row['End'] + 1]).replace('\u3000', ''), axis=1)
df_hui['ZiShu'] = df_hui['Text'].str.len()plt.rcParams.update({'font.sans-serif': 'SimHei','savefig.format': 'svg','axes.unicode_minus': False
})plt.figure(figsize=(10, 6))
scatter = plt.scatter(df_hui['LineNum'], df_hui['ZiShu'])
for num, row in df_hui.iterrows():plt.text(row['LineNum'] + 1, row['ZiShu'], row['HuiNum'])plt.xlabel("章节段落数", fontsize=12)
plt.ylabel("章节字数", fontsize=12)
plt.title('《红楼梦》整本书各章节分布情况', fontsize=18)
plt.savefig('plot.svg')
plt.show()

    从生成的图和代码中我们都能看到各章节的分布情况和词云无关,这是对于文本解读的一种方式。绘图前我们需要对文本进行一些基本处理。处理之前我们先看一下红楼梦的目录,这是传统的章回体。章回体是中国古代长篇小说的一种叙述体式。其特点是将整部作品分成若干章节,称为 “回” 或 “则”。每回都有相对独立的情节,但又与前后回目紧密相连,共同构成一个完整的故事。每回的开头和结尾往往有一些固定的格式,比如开头常用 “话说”“且说” 等套语,结尾则多以 “欲知后事如何,且听下回分解” 之类的话语来吸引读者继续阅读。

 根据目标:制作红楼梦各章节的分布情况。所以在处理时我们需要将每一回分开。

 

 让我们来逐一解读代码:

(1)dropna()去除缺失值(NaN)

DataFrame 上使用时:

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

Series 上使用时:

Series.dropna(axis=0, inplace=False) 
  • axis:指定删除缺失值的方向,取值可以是 0'index'(默认值),表示按删除;取值为 1'columns' 时,表示按删除。
  • how:指定删除行或列的条件,取值可以是 'any'(默认值),表示只要该行或列中有一个缺失值就删除;取值为 'all' 时,表示只有当该行或列中的所有值都是缺失值时才删除
  • thresh一个整数,指定保留行或列所需的非缺失值的最小数量。如果某行或列的非缺失值数量小于 thresh,则将其删除。
  • subset:一个列标签的列表,用于指定在哪些列中检查缺失值。只有在这些列中存在缺失值的行或列才会被考虑删除。
  • inplace:一个布尔值,默认为 False。如果设置为 True,则会直接在原对象上进行修改,不返回新的对象;如果设置为 False,则会返回一个新的对象,原对象保持不变。

补充:

  • Series:一维的带标签数组。
  • DataFrame:二维的表格型数据结构,由多个 Series 组成。
df_hlm = pd.read_csv("hlm.txt", names=["hlm_texts"]).dropna()

 读取红楼梦文本,命名为hlm_texts,去除空行

补充:这里的去除空行是一个预操作,在简化文本数据的时候同时方便后续使用正则表达式提取卷、回信息,若存在空行容易导致匹配结果不准确。

 

(2)DataFrame

数据标签:具有索引(index)和索引(columns),可以通过这些索引来访问和操作数据。

DataFrame 对象可以通过 . 操作符加上列名来访问该 DataFrame 中的某一列。如 df.Age

所以 df_hlm.hlm_texts 就是从 df_hlm 这个 DataFrame 中选取名为 hlm_texts 的列。

 

df_hlm = df_hlm[~df_hlm.hlm_texts.str.contains(r"第\d卷")].reset_index(drop=True)

 

 

 

 

http://www.lryc.cn/news/547406.html

相关文章:

  • Impacket工具中的横向渗透利器及其使用场景对比详解
  • 基于java,SpringBoot和Vue的医院药房药品管理系统设计
  • MQ保证消息的顺序性
  • cmake、CMakeLists.txt、make、ninja
  • 数据结构与算法 计算机组成 八股
  • RoboBrain:从抽象到具体的机器人操作统一大脑模型
  • 算法 之 前缀和 与 滑动窗口 与 背包问题 的差异(子数组之和为k问题)
  • 微电网协调控制器ACCU-100 分布式光伏 光储充一本化
  • IDEA入门及常用快捷键
  • electron打包结构了解
  • 03.06 QT
  • Python中的常用库
  • 马尔科夫不等式和切比雪夫不等式
  • 护照阅读器在汽车客运站流程中的应用
  • CentOS 7 安装Nginx-1.26.3
  • Unity 使用NGUI制作无限滑动列表
  • linux中断调用流程(arm)
  • 基于Matlab的多目标粒子群优化
  • 【网络安全】——协议逆向与频繁序列提取:从流量中解码未知协议
  • CSS 中等比例缩放的演变:从传统技巧到 aspect-ratio 属性
  • 系统架构设计师—计算机基础篇—进度管理
  • 初始提示词(Prompting)
  • Ollama+AnythingLLM安装
  • docker拉取失败
  • PHP之Cookie和Session
  • 【万字长文】基于大模型的数据合成(增强)及标注
  • CES Asia 2025增设未来办公教育板块,科技变革再掀高潮
  • Python详细安装教程——Python及PyCharm超详细安装教程:新手小白也能轻松搞定!(最新版)
  • 游戏引擎学习第137天
  • RAGflow升级出错,把服务器灌满了