【Python爬虫实战】3.A股上市公司年报关键词词频分析

在前面两篇文章中,我们已经成功用Python爬取到了A股上市公司年报并转换为txt格式,接下来就是对数据的处理,我们以经管类常用的文本挖掘方式为例,编写从多个文本文件中提取关键词并统计词频,然后将结果存储到 Excel 文件中的程序。

1. 准备工作

在运行之前,我们需要先整理好现有的数据,并安装一些必要的 Python 库。具体需要安装以下库:

  1. jieba:中文文本分析库,用于分词。
  2. xlwt:用于创建 Excel 文件。

我们可以使用 pip 命令来安装这些库,命令如下:

pip install jieba xlwt

2. 具体代码

接下来,我们将编写 Python 代码来实现我们的程序。主要分为以下步骤:

  1. 提取关键词。
  2. 批处理 txt 文件。
  3. 输入参数

2.1关键词提取

首先,我们定义了一个名为 extract_keywords 的函数,用于从指定的文本文件中提取关键词,并统计这些关键词的出现次数。

def extract_keywords(filename, keywords):
    """
    从指定文件中提取关键词,并统计关键词出现次数。
    """
    keyword_counts = [0] * len(keywords)
    try:
        with open(filename, 'r', encoding='utf-8') as f:
            content = f.read()
        # 使用jieba库进行分词
        words = jieba.cut(content)
        words = [word for word in words if word.strip()]
        # 统计关键词出现次数
        for i, keyword in enumerate(keywords):
            keyword_counts[i] = words.count(keyword)
    except Exception as e:
        print(f"从文件中获取关键词失败!--- {filename}")
        print(str(e))

    return keyword_counts

这段代码的主要过程为:

  1. 使用 Python 的 with 语句打开文本文件,读取其中的内容。
  2. 使用 jieba 库对文本进行分词,并去除空白字符。
  3. 遍历指定的关键词列表,统计每个关键词在文本中出现的次数。
  4. 将每个关键词的出现次数存储到一个列表中,并返回该列表。

2.2 批处理txt 文件

接下来的主要工作就是将关键词的词频存入到Excel表格中,为此我们首先需要创建一个结果表格。

def process_files(folder_path, keywords):
    """
    处理指定文件夹中的所有txt文件,提取关键词并统计词频,将结果存储到Excel表格中。
    """
    # 创建Excel工作簿
    workbook = xlwt.Workbook(encoding='utf-8')
    worksheet = workbook.add_sheet('Sheet1')
    row = 0
    # 添加Excel表头
    worksheet.write(row, 0, '股票代码')
    worksheet.write(row, 1, '公司简称')
    worksheet.write(row, 2, '年份')
    for i, keyword in enumerate(keywords):
        worksheet.write(row, i + 3, keyword)
    row += 1

这部分代码定义了一个名为 process_files 的函数,在创建完新的表格后,我们还需要处理指定文件夹中的所有 txt 文件,提取关键词并统计词频,将结果存储到 Excel 表格中。

#获取文件总数
total_files = len([filename for filename in os.listdir(folder_path) if filename.endswith('.txt')])
processed_files = 0

# 遍历文件夹中的所有txt文件
for filename in os.listdir(folder_path):
    if filename.endswith('.txt'):
        # 解析文件名,提取股票代码、公司简称和年份
        match = re.match(r'^(\d{6})_(.*?)_(\d{4})\.txt$', filename)
        if match:
            stock_code = match.group(1)
            company_name = match.group(2)
            year = match.group(3)

            # 提取关键词并统计词频
            keyword_counts = extract_keywords(os.path.join(folder_path, filename), keywords)

            # 将结果写入Excel表格
            worksheet.write(row, 0, stock_code)
            worksheet.write(row, 1, company_name)
            worksheet.write(row, 2, year)
            for i, count in enumerate(keyword_counts):
                worksheet.write(row, i + 3, count)
            row += 1
# 保存Excel文件
try:
    workbook.save('文件名称.xls')
except Exception as e:
    print("文件保存失败!.")
    print(str(e))

代码部分的主要流程为:

  1. 创建一个 Excel 工作簿,并添加一个名为 Sheet1 的工作表。
  2. 添加 Excel 表头,包括股票代码、公司简称、年份和关键词列。
  3. 统计需要处理的文件总数。
  4. 遍历文件夹中的所有 txt 文件,对每个文件进行以下操作:
    1. 使用正则表达式解析文件名,提取股票代码、公司简称和年份。
    2. 调用 extract_keywords 函数提取关键词并统计词频。
    3. 将结果写入 Excel 表格中。

注意!

由于文件数量庞大,在编写时一定要注意程序的稳定性,加入try,except处理异常事项,使得程序不至于出现异常后直接退出。

此外,我们还可以加入进度显示的功能,来增强程序的交互功能,可以将以下代码加入到函数中。

        #显示当前进度
        processed_files += 1
        progress = processed_files / total_files * 100
        print(f"已处理 {processed_files}/{total_files} 个文件({progress:.2f}%)")

2.3 开始运行

到这里,代码的主体部分已经完成,接下来我们只需要给出参数并调用函数运行即可。

if __name__ == '__main__':
    # 设置要提取的关键词列表
    keywords = ['共享服务', '财务共享','数字化','培训','云计算','大数据','互联网']

    # 处理文件夹中的所有txt文件,并将结果存储到Excel表格中
    try:
        process_files('2010-2021年TXT年报', keywords)
    except Exception as e:
        print("文件处理失败!!")
        print(str(e))

例如要用来统计近年来A股上市公司年报中对数字化的关注度,就可以通过查阅相关参考文献,来确定关键词的设置,将其写入到keywords变量中即可,process_files中为txt文件夹路径。

3.小结

成品展示:
【Python爬虫实战】3.A股上市公司年报关键词词频分析_第1张图片
如果你需要对相应的指标进行数学计算并引入相关指标,就是对Excel的相关操作了,网络上有充足的资源可供参考。

本项目中我们首先介绍了如何使用 Python 编写爬虫,将 A股上市公司年报数据爬取到本地,并引入多线程批量下载以及进行格式转换,接下来,我们使用 jieba 库进行中文文本分析,实现了从多个文本文件中提取关键词并统计词频等操作。最后,我们使用 xlwt 库创建 Excel 文件,并将数据写入其中,以便更好地进行数据分析和可视化。

如果需要完整版代码和相关资料,敬请关注同名公众号“凌小添”,后台回复“年报”即可获取下载链接哦~

你可能感兴趣的:(python,爬虫,开发语言)