本文背景是大学关系很好的老师最近在做文本挖掘相关的项目,想要我用Python帮她实现公司年报中某些词出现次数的统计。
根据她提供的部分年报文档,设计了实现代码,只要把文档放到指定的文件夹中,即可全量实现。
从指定文档中统计词频可以应用在写毕业论文、行业分析、商业价值挖掘等多个模块,故把全量代码分享给更多有需要的朋友。
一、获取指定文件夹下的全量文件名
由于不同的项目文件数量和名称是不固定的,故写代码自动获取指定文件夹下所有的文件名。具体代码如下:
import os
filePath = r'F:\82_年报分词\试试' # 存放txt文档的文件路径
os.chdir(filePath) # 设置文件读取路径
files = os.listdir(filePath) # 获取filePath路径下的所有txt文件
files
注:filePath要改成你存待统计词频的文件(年报)路径。
得到结果:
['000001_2002_20020418_2001年年度报告.txt',
'000001_2003_20030424_2002年年度报告.txt',
'000001_2004_20040415_2003年年度报告.txt',
'000001_2005_20050426_2004年年度报告.txt',
'000001_2006_20060401_2005年年度报告.txt',
'000001_2007_20070322_2006年年度报告.txt',
'000001_2008_20080320_2007年年度报告.txt',
'000001_2009_20090320_2008年年度报告.txt',
'000001_2010_20100312_2009年年度报告.txt',
'000001_2011_20110225_2010年年度报告.txt',
'000001_2012_20120309_2011年年度报告.txt',
'000001_2013_20130308_2012年年度报告.txt',
'000001_2014_20140307_2013年年度报告.txt',
'000001_2015_20150313_2014年年度报告.txt',
'000001_2016_20160310_2015年年度报告.txt',
'000001_2017_20170317_2016年年度报告.txt',
'000001_2018_20180315_2017年年度报告.txt',
'000001_2019_20190307_2018年年度报告.txt',
'000001_2020_20200214_2019年年度报告.txt',
'000001_2021_20210202_2020年年度报告.txt',
'000001_2022_20220310_2021年年度报告.txt',
'000001_2023_20230309_2022年年度报告.txt']
可以发现结果是一个文件列表。
二、写循环实现词频统计
接着写循环统计每个文件中指定词出现的次数,具体代码如下:
import numpy as np
import pandas as pd
wd_list = ['董事会', '金融', '哈哈哈哈'] #要统计的词
txts_wd = []
for file in files:
f = open(file, encoding='utf-8') # 打开文件
txt = ''
for line in f:
txt += line.strip() #合并单行成一个txt
txt_wd = file + ';'
for i in wd_list:
num = txt.count(i)
txt_wd += i + '=' + str(num) + ';'
txts_wd.append(txt_wd)
txts_wd
注:wd_list中填入你想统计的词,可加逗号无限扩展。
得到结果:
['000001_2002_20020418_2001年年度报告.txt;董事会=93;金融=90;哈哈哈哈=0;',
'000001_2003_20030424_2002年年度报告.txt;董事会=89;金融=102;哈哈哈哈=0;',
'000001_2004_20040415_2003年年度报告.txt;董事会=94;金融=110;哈哈哈哈=0;',
'000001_2005_20050426_2004年年度报告.txt;董事会=167;金融=270;哈哈哈哈=0;',
'000001_2006_20060401_2005年年度报告.txt;董事会=104;金融=329;哈哈哈哈=0;',
'000001_2007_20070322_2006年年度报告.txt;董事会=96;金融=534;哈哈哈哈=0;',
'000001_2008_20080320_2007年年度报告.txt;董事会=141;金融=695;哈哈哈哈=0;',
'000001_2009_20090320_2008年年度报告.txt;董事会=97;金融=793;哈哈哈哈=0;',
'000001_2010_20100312_2009年年度报告.txt;董事会=114;金融=836;哈哈哈哈=0;',
'000001_2011_20110225_2010年年度报告.txt;董事会=151;金融=806;哈哈哈哈=0;',
'000001_2012_20120309_2011年年度报告.txt;董事会=122;金融=921;哈哈哈哈=0;',
'000001_2013_20130308_2012年年度报告.txt;董事会=95;金融=924;哈哈哈哈=0;',
'000001_2014_20140307_2013年年度报告.txt;董事会=70;金融=616;哈哈哈哈=0;',
'000001_2015_20150313_2014年年度报告.txt;董事会=101;金融=684;哈哈哈哈=0;',
'000001_2016_20160310_2015年年度报告.txt;董事会=79;金融=667;哈哈哈哈=0;',
'000001_2017_20170317_2016年年度报告.txt;董事会=66;金融=663;哈哈哈哈=0;',
'000001_2018_20180315_2017年年度报告.txt;董事会=61;金融=726;哈哈哈哈=0;',
'000001_2019_20190307_2018年年度报告.txt;董事会=63;金融=1106;哈哈哈哈=0;',
'000001_2020_20200214_2019年年度报告.txt;董事会=71;金融=876;哈哈哈哈=0;',
'000001_2021_20210202_2020年年度报告.txt;董事会=64;金融=1012;哈哈哈哈=0;',
'000001_2022_20220310_2021年年度报告.txt;董事会=77;金融=1043;哈哈哈哈=0;',
'000001_2023_20230309_2022年年度报告.txt;董事会=106;金融=1076;哈哈哈哈=0;']
可以发现每一行存储的都是文件名和指定词在文章中出现的次数。
三、把结果转成数据框
最后把结果转成数据框,具体代码如下:
#转成DataFrame
wd_date = pd.DataFrame(txts_wd)
wd_date.columns = ['col_name']
wd_date_f = wd_date['col_name'].str.split(';', expand=True)
columns = ['file_name'] + wd_list + ['0']
wd_date_f.columns = columns
wd_date_f = wd_date_f.drop(columns='0')
wd_date_f
得到结果:
观察第一行可以发现,在000001_2002_20020418_2001年年度报告.txt文章中董事会一词出现了93次,金融和哈哈哈哈分别出现了90次和0次。
至此,Python中实现词频统计已讲解完毕,如想了解更多Python数据统计方法
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板![在这里插入图片描述](https://img-blog.csdnimg.cn/646863996ac44da8af500c049bb72fbd.png#pic_center)
![](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fhnxx.oss-cn-shanghai.aliyuncs.com%2Fofficial%2F1695806255294.png&pos_id=img-NXZtBziE-1702981037524%29)