本文开始介绍一个简单的数据分析案例,分析红楼梦文本,本文主要内容是将红楼梦文本按照章节获取每一回的标题,字数,段落数并保存到csv中方便后续数据分析

红楼梦小说文本可以在这里下载

链接:https://pan.baidu.com/s/1WEmunBN_Wo75EZd1cK6_lA

提取码:3xco

接下来直接上代码

import pandas as pd

import numpy as np

with open("./hlm/red.txt",encoding="utf-8") as f:

content = f.readlines()

content = pd.DataFrame(content) #将行转为df,这个df只有一列

content.columns = ["content"] #取列名为content,以防content[0]会有歧义,不知道是表示第一列还是第一行

print(content)

#查看是否有为空的行

print(np.sum(content.isnull()))

#删除 第x卷 这样的行

has_juan = content["content"].str.contains(r"^第.+?卷") #返回 [True,False,....,False]

# print(content[has_juan])

index_has_juan = has_juan.index[has_juan.values==True] #或者has_juan[has_juan==True].index

# print(content.drop(index_has_juan))

content = content.drop(index_has_juan)

content = content.reset_index(drop=True) #重新设定index

#或者这样做也可以

has_juan = content["content"].str.contains(r"^第.+?卷")

content = content[~has_juan].reset_index(drop=True) #content[has_juan] 就是有卷的行,~取反 是没有第x卷的行

print(content)

content.to_csv("./hlm_cont.csv",index=False)

#获取每一回的标题

has_hui = content["content"].str.match(r"^第.+回") #match和contains都一样

cont_with_hui = content[has_hui]["content"].str.strip("\r\n").str.split(" ").reset_index(drop=True) #获取回的行并且将里面的内容按照空格分开,这里返回的是一个Series

print(cont_with_hui)

df_hui = pd.DataFrame(list(cont_with_hui),columns=["chapterNum","leftName","rightName"]) #这里必须将cont_with_hui从series转为list,否则得到的是一个空df

print(df_hui)

df_hui["fullName"] = df_hui['leftName']+pd.Series([" " for i in range(len(df_hui))])+df_hui['rightName']

print(df_hui)

#获取每一回的段落数和字数

#段落数 = 每回最后一段的行号-回标题所在的行号

df_hui['parag_start'] = has_hui[has_hui==True].index #回标题所在行号

parag_end = df_hui['parag_start'][1:len(df_hui['parag_start'])]-1 #每回最后一行行号

parag_end = parag_end.reset_index(drop=True) #此时parag_end只有119个元素,还缺最后一回的最后一段的行号

parag_end[len(parag_end)] = content.index[-1]

df_hui['parag_end'] = parag_end

df_hui['parag_num'] = df_hui['parag_end'] - df_hui['parag_start'] #段落数

#每回的字数 = 每回的段落所在的行的内容的长度求和(文字内容不包括\r\n,回标题字数不算在内)

str_len = content['content'].apply(lambda x:len(x.strip("\r\n").replace(" ","")))

str_len_hui = pd.Series(np.arange(len(df_hui))) #这里str_len_hui不能生成一个空Series,否则下面str_len_hui[i]=xxx会报错

# print(str_len_hui)

for i in range(len(df_hui)):

#获取每回的开始段和结束段的index

start = df_hui['parag_start'][i]+1

end = df_hui['parag_end'][i]

#获取每回所在的行

hang_each_hui = str_len[start:(end+1)]

str_len_hui[i] = hang_each_hui.sum() #对每回对应的所有行的字数求合,就是每回的字数

print(str_len_hui)

df_hui['str_len']= str_len_hui

#将红楼梦回的数据存为csv

df_hui.to_csv("./hlm_chapter_info.csv",index=False)

得到的csv内容如下:

红楼梦章节文本处理

得到了每一章的字数和段落数之后,可以根据绘出字数和段落数的散点图和折线图,代码实现如下:

# 根据红楼梦每一回的数据做每回段落数和字数的散点图,并在每个点上标记是第几回

import matplotlib.pyplot as plt

import pandas as pd

import numpy as np

plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文

plt.rcParams['axes.unicode_minus'] = False #正常显示负号

df_hui = pd.read_csv("./hlm_chapter_info.csv")

print(df_hui)

fig = plt.figure(figsize=(16,16))

fig.suptitle("《红楼梦》120回") #四个图的总标题,plt.title()是设置子标题

plt.subplot(221)

plt.scatter(df_hui['parag_num'],df_hui['str_len'])

plt.xlabel("每回段落数")

plt.ylabel("每回字数")

for i in range(len(df_hui)):

plt.text(df_hui['parag_num'][i],df_hui['str_len'][i],df_hui['chapterNum'][i],size=7) #给每个点做上文字说明,前两参是文字说明的位置,x,y;第三参是文字说明的内容;size是字体大小

plt.subplot(222)

plt.scatter(df_hui['parag_num'],df_hui['str_len'])

plt.xlabel("每回段落数")

plt.ylabel("每回字数")

for i in range(len(df_hui)):

plt.text(df_hui['parag_num'][i]+1,df_hui['str_len'][i],i+1)

#绘制点线图,横坐标是章节数,纵坐标是章节字数和章节段落数

plt.subplot(223)

plt.plot(df_hui.index+1,df_hui['parag_num'],"ro-")

plt.hlines(np.mean(df_hui['parag_num']),-5,125) #画一条水平线,显示段落数的平均值

plt.xlim((-5,125)) #限制x轴视图范围

plt.xlabel("章节")

plt.ylabel("章节段落数")

plt.subplot(224)

plt.plot(df_hui.index+1,df_hui['str_len'],"ro-") #r红色,o控制点的样式,-控制线的样式

plt.hlines(np.mean(df_hui['str_len']),-5,125)

plt.xlim((-5,125))

plt.xlabel("章节")

plt.ylabel("章节字数")

plt.savefig("hlm1.png")

plt.show()

得到的图像如下图所示(图片较大,可以点击图片查看放大的图片):

红楼梦章节字数和段落数散点图和折线图

python实验数据预处理案例_Python数据分析小案例——红楼梦文本分析(一) 文本预处理...相关推荐

  1. python朋友圈点赞统计_Python数据分析实战案例:统计分析微信朋友圈数据(附实操视频)...

    原标题:Python数据分析实战案例:统计分析微信朋友圈数据(附实操视频) 本文内容将通过一个具体实例讲解将朋友圈数据导出为JSON文件的方法,并介绍使用Python统计分析JSON数据的过程. 注: ...

  2. python便捷数据怎么获取_Python数据分析入门——从数据获取到可视化

    基本信息 作者: 沈祥壮 ISBN:9787121336539 上架时间:2018-3-22 出版日期:2018 年3月 开本:16开 页码:260 版次:1-1 [插图] 编辑推荐 了解基本的Pyt ...

  3. python用于数据分析的案例_Python数据分析经典案例

    从事机器学习,数据分析,数据挖掘的同学们以及python使用者 选择经典案例基于真实数据集,从数据预处理开始到建立机器学习模型以及效果评估,完整的讲解如何使用python及其常用库进行数据的分析和模型 ...

  4. python做数据可视化视频_Python数据分析系列视频课程--玩转数据可视化

    matplotlib包是基于Python平台的统计绘图利器,是在python平台上完成数据可视化不可或缺的工具,而基于matplotlib进一步开发的seaborn,更是将数据呈现与可视化的可用性推到 ...

  5. python分析数据的相关性质_理解数据的性质_Python数据分析实战应用_数据挖掘与分析视频-51CTO学院...

    为什么学Python: 重要:数据分析是职业技能必备,Python是大数据分析** 趋势:Python是目前非常火的编程语言,使用人多 好学:学习简单,容易上手,使用灵活,可扩展强 **:会Pytho ...

  6. python金融数据分析案例_Python数据分析行业案例课程--欺诈检测

    注意: 1. 本行业案例课程为Python 3 数据分析系列课程的行业案例部分,学员请务必先观看课程介绍免费视频,确认已学习本课程所需Python分析技能. 2. 本课程的核心目的是协助学员学习具体业 ...

  7. python查看数据最后五行_python数据分析

    一.数据导入和导出 (一)读取csv文件 1.本地读取 import pandas as pd df = pd.read_csv('E:\\tips.csv') 2.网络读取 import panda ...

  8. 爬虫入门—数据解析基础 bs4库使用之红楼梦全文文本爬取

    爬虫入门-数据解析基础 bs4库使用之红楼梦全文文本爬取 Author: Labyrinthine Leo   Init_time: 2021.02.23 Key Words: Spider.Beau ...

  9. python数据分享人力资源_Python数据分析帮你清晰的了解整理员工们的工作效率和整体满意度...

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 项目背景 2018年,被称为互联网的寒冬之年.无论大小公司,纷纷走上了裁员 ...

最新文章

  1. androidinclude作用
  2. arcgis-“一个或多个已经添加图层的范围与关联空间参考不一致”“Arcmap不能绘制一个或者多个图层”
  3. CVPR 2020 | ActBERT: 自监督多模态视频文字学习
  4. linux内核头文件 cdev.h 解析
  5. 汉邦高科范俊峰:关于透雾摄像机那点事
  6. MacBook 如何一次性关闭所有程序的通知消息
  7. JavaScript将iframe中控件的值传到主页面控件中
  8. Qt设计器中,使用QToolBar控件的技巧
  9. JDBC PreparedStatement
  10. Python基础练习-002-求1000以内的完全数
  11. 在计算机硬件系统中 cache是,CPU中Cache是什么
  12. 树莓派 MFRC522 读取
  13. C语言—操作符和表达式
  14. Git速成教学,从0到1看这篇就足够了
  15. 原码、反码、补码、移码的概念及转换
  16. ImageSelector
  17. Eclipse Java EE+Tomcat问题和Apache整合Tomcat
  18. 香港服务器CDN加速与DDOS防御方案
  19. 历年Infoq架构师月刊收集
  20. 微信开发实战(4)—URL、Token认证、java源码、免费新浪SAE部署

热门文章

  1. java繁体转简体包_Java封装简体繁体(香港台湾)转换工具
  2. Ubuntu 18.04百度拼音输入法突然乱码问题
  3. 牛犇CMS小说站群系统
  4. DIC-计算材料应力应变分布
  5. 计算机综合评价论文,计算机科学与技术毕业论文-中学综合素质评价系统.doc
  6. android 实时录音播放,android 使用 audiorecord 和 audiotrack 实现实时录音播放
  7. 标准化——python
  8. 云闪付持卡人认证信息失败_云闪付app注册登录常见问答
  9. 8位、16位、32位操作系统的区别
  10. 32单片机,硬件电路,计算机,细碎知识【7000字】【来源工作日记】【原创】