数据统计:词频统计、词表生成、排序及计数、词云图生成

文章目录

  • 📚输入及输出
  • 📚代码实现

📚输入及输出

  • 输入:读取一个input.txt,其中包含单词及其对应的TED打卡号。
    在这里插入图片描述

  • 输出

    • output.txt:包含按频率降序排列的每个单词及其计数(这里直接用于后续的词云图生成)。
      在这里插入图片描述

    • output_word.json:包含每个单词及其计数,以及与之关联的TED打卡号列表,生成一个json文件(按字母序排列,用于后续网页数据导入)。
      在这里插入图片描述

    • output2.txt:按字母顺序排序的所有单词,即导出一个单词词表(可以导入到不背单词里生成自定义词表)。
      在这里插入图片描述

    • word_count.txt:记录截至每篇TED打卡号时涉及到的单词总数(该数据用于绘制后续的折线图)。
      在这里插入图片描述

  • 生成词云:在处理数据后,脚本读取output.txt并生成基于单词频率的词云,并将词云保存至指定目录。
    在这里插入图片描述

📚代码实现

  • 逻辑梳理

    • 在函数中使用了两个defaultdict,一个用于统计单词出现的频率,另一个用于记录单词对应的打卡号集合。
    • 打开输入文件,并逐行读取单词及其对应的打卡号,对于每个单词,统计其出现的频率,并将打卡号添加到对应的集合中。同时,对每篇TED的打卡号进行统计,记录每篇 TED 结束时涉及到的当前单词总数量,写入output_word_count_txt,对应word_count.txt
    • 统计完所有单词后,对单词频率进行排序,并将排序后的结果写入output_txt_file,对应input.txt
    • 将单词、频率和相应的(排序过后的)打卡号列表存储为 JSON 文件,对应output_word.json
    • 将所有单词按字母顺序写入output_txt_file_sorted中,对应output2.txt
  • 具体详见注释

    import json
    from collections import defaultdict
    from wordcloud import WordCloud
    import matplotlib.pyplot as plt
    import redef count_word_frequency(input_file, output_txt_file, output_word_json_file, output_txt_file_sorted, output_word_count_txt):# 使用defaultdict初始化两个字典,用于统计单词出现频率、单词对应打卡号集合word_count = defaultdict(int)# 设置为set集合自动去重,单词对应的打卡号集合word_numbers = defaultdict(set)  current_number = 0  # 当前打卡号初始化为0# 创建一个空的单词计数分析文本文件open(output_word_count_txt, 'w').close()# 打开输入文件并逐行读取单词及其对应的数字with open(input_file, 'r') as file:for line in file:line_parts = line.strip().split()word = " ".join(line_parts[:-1])  # 提取单词number = int(line_parts[-1])  # 提取打卡号# 如果当前打卡号与前一个不同(即已经开始下一篇了),记录前一个打卡号(即刚刚完成的那一篇)对应的(截至该篇的)单词总数到output_word_count_txt中if number != current_number:current_number = number# 用sum函数来统计word_numbers中非空集合的数量,即当前TED打卡号下已经出现过的单词数current_unique_count = sum(1 for word_set in word_numbers.values() if len(word_set) > 0)with open(output_word_count_txt, 'a') as count_file:count_file.write(f"{current_number-1} {current_unique_count}\n")# 统计单词的频率及相应的打卡号(这里排除了同一个单词在一片篇TED里多次记录的重复计数情况)if number not in word_numbers[word]:  word_count[word] += 1word_numbers[word].add(number)  # 对每个单词的打卡号进行排序,使得最后TED打卡号列表按序显示for word in word_numbers:word_numbers[word] = sorted(word_numbers[word])# 补充记录最后一个打卡号对应的(截至该篇的)单词总数到output_word_count_txt中current_unique_count = sum(1 for word_set in word_numbers.values() if len(word_set) > 0)with open(output_word_count_txt, 'a') as count_file:count_file.write(f"{current_number} {current_unique_count}\n")# 对单词频率进行排序,并将排序后的结果写入输出文本文件中sorted_words = sorted(word_count.items(), key=lambda x: (-x[1], x[0]))with open(output_txt_file, 'w') as file_txt:for word, count in sorted_words:file_txt.write(word + " " + str(count) + "\n")# 将单词、频率和相应的打卡号列表存储为JSON文件word_data = []for word, count in word_count.items():word_entry = {"word": word,"count": count,"numbers": list(word_numbers[word])  }word_data.append(word_entry)word_data_sorted = sorted(word_data, key=lambda x: x["word"])with open(output_word_json_file, 'w') as file_word_json:json.dump(word_data_sorted, file_word_json, indent=4)# 将所有单词按字母顺序写入输出文本文件中all_words = list(word_count.keys())all_words.sort()with open(output_txt_file_sorted, 'w') as file_txt_sorted:file_txt_sorted.write('\n'.join(all_words) + '\n')# 定义输入文件和输出文件的名称
    input_file = "input.txt"
    output_txt_file = "output.txt"
    output_word_json_file = "output_word.json"
    output_txt_file_sorted = "output2.txt"
    output_word_count_txt = "word_count.txt"# 调用函数统计单词频率并生成相关输出
    count_word_frequency(input_file, output_txt_file, output_word_json_file, output_txt_file_sorted, output_word_count_txt)# 读取输出文本文件的单词频率数据
    words = []
    with open('output.txt', 'r', encoding='utf-8') as file:for line in file:# 使用正则表达式匹配每行的单词和对应的频率match = re.match(r'(.+?)\s+(\d+)', line)if match:  # 如果匹配成功word = match.group(1)  # 提取匹配到的单词部分freq = int(match.group(2))  # 提取匹配到的数字部分作为频率words.append((word, freq))  # 将单词和对应的频率以元组的形式添加到列表中# 生成词云图像并保存为文件
    wordcloud = WordCloud(width=800, height=400, background_color='white').generate_from_frequencies(dict(words))
    plt.figure(figsize=(10, 6))
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis('off')
    wordcloud.to_file('./images/wordcloud.png')
    plt.show()
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/8734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之单例模式详解

单例模式 描述:单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。 核心特点 单例类只有一个实例对象;该单例对象必须由单例类自行创建;单例类对外提供一…

OpenCV 入门(一) —— OpenCV 基础

OpenCV 入门系列: OpenCV 入门(一)—— OpenCV 基础 OpenCV 入门(二)—— 车牌定位 OpenCV 入门(三)—— 车牌筛选 OpenCV 入门(四)—— 车牌号识别 OpenCV 入门&#xf…

每日两题 / 23. 合并 K 个升序链表 94. 二叉树的中序遍历(LeetCode热题100)

23. 合并 K 个升序链表 - 力扣(LeetCode) 若lists有k个元素,调用k - 1次(两个有序链表的合并)即可 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNod…

探索鸿蒙开发:鸿蒙系统如何引领嵌入式技术革新

嵌入式技术已经成为现代社会不可或缺的一部分。而在这个领域,华为凭借其自主研发的鸿蒙操作系统,正悄然引领着一场技术革新的浪潮。本文将探讨鸿蒙开发的特点、优势以及其对嵌入式技术发展的深远影响。 鸿蒙操作系统的特点 鸿蒙,作为华为推…

一键接入电商API数据接口淘宝API通过商品ID、URL采集商品详情页实时数据API接入指南

一键接入电商API数据接口,尤其是淘宝API,通常需要遵循以下步骤: 注册账号:注册接入账号获取Api Key和Api Secret。 选择API:根据需要选择合适的API服务,如通过商品ID或URL采集商品详情页数据的API。 权限…

WPF鼠标拖拽的最佳实现

WPF鼠标拖拽的最佳实现 在很多项目中都会遇到鼠标拖拽控件移动的需求,常见的有从在列表中拖拽列表项移动,拖拽控件移动等。 本文将介绍2种拖拽的简单的实现 列表项的拖拽 本文将使用 gong-wpf-dragdrop 这个github上的库来实现列表的拖拽的效果&…

GitLab使用记录

GitLab 文章目录 1. 常用命令1.1 配置邮箱 用户名1.2 查看配置1.3 基本语法 2. 连接gitlab3. 直接拉去项目 1. 常用命令 1.1 配置邮箱 用户名 git config --global user.name ShangzheChen git config --global user.email 735511377qq.com1.2 查看配置 cat ~/.gitconfig这…

企业信使_登陆页

在当今数字化时代,企业与员工之间的沟通变得越来越重要。为了满足企业内部沟通的需求,一款功能强大而方便使用的企业信使_登陆页应运而生。企业信使_登陆页是一种专为企业内部使用而设计的通讯工具,可以帮助企业提高沟通效率,加强…

4.用python爬取保存在text中的格式为m3u8的视频

文章目录 一、爬取过程详解1.寻找视频的m3u8链接2.从网页源码中寻找视频的m3u8链接的第二部分内容3.从视频的m3u8链接获取视频 二、完整的代码 一、爬取过程详解 1.寻找视频的m3u8链接 这个文档承接了爬虫专栏的 第一节.python爬虫爬取视频网站的视频可下载的源url&#xff0…

车规级低功耗汽车用晶振SG-9101CGA

车规级晶振SG-9101CGA属于爱普生9101系列,是一款可编程晶振。SG-9101CGA车规级晶振采用2.5x2.0mm封装,利用PLL技术生产,此款振荡器的频率范围从0.67M~170MHZ任一频点可选,步进1ppm,采用标准CMOS输出,最大输…

为 Flutter 应用设置主题:ThemeData 和 ColorScheme 指南

在媒体和其他来源中有许多关于这个主题的文章,那么这篇文章的必要性是什么? 在本文中,我计划仅关注 ThemeData 小部件的关键点以及我的开发经验中最常用的参数,并且您将获得有关每个参数如何对您的应用程序执行操作的简要说明。 …

分类任务的基础学习

1.什么是分类? 2.局限性: 当样本量逐渐变大的时候,准确率会下降——>因为线性回归曲线距离我们的原点越远,预测就会开始不准确,因为 x前面的倍数就会越来越小,这就导致了样本量变大,但是那些…

Kafka 业务日志采集最佳实践

简介 Apache Kafka 是一个分布式流处理平台,主要用于构建实时数据流管道和应用程序。在收集业务日志的场景中,Kafka 可以作为一个消息中间件,用于接收、存储和转发大量的日志数据。将 Kafka 与其他系统(如 Elasticsearch、Flume、…

docker-compose安装 人大金仓数据库

下载官网安装包 将安装包重命名为: kingbase.tar 再导入镜像仓库 docker load -i kingbase.tar目录创建data文件夹创建docker-compose文件 version: 3 services: kingbase: image: kingbase:v1 container_name: kingbaseports: - "54321:54321" volumes: -…

解决微信小程序电脑能正常使用,手机端无法正常访问的SSL证书问题

目录 前言1 问题描述与调试2 探索问题根源2.1 用户反馈收集2.2 尝试手机端访问2.3 PC端调试 3 确认问题与解决方案3.1 检查SSL证书3.2 重新部署SSL证书3.3 测试修复效果 4 SSL(Secure Sockets Layer)证书中间证书4.1 SSL证书链的构成4.2 中间证书的作用 …

【管理咨询宝藏97】智慧物流园区顶层设计方案

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏97】智慧物流园区顶层设计方案 【格式】PDF版本 【关键词】智慧园区、制造型企业转型、数字化转型 【核心观点】 - 中国物流业整体呈现集中度低…

springboot项目 字典/枚举翻译 终极解决方案 AOP+自定义注解+递归实体字段+实体动态三级缓存+责任链+多种转换方式

目录 前言实现思路技术确定 食用方式效果使用样例项目中使用第一步 复制包第二步 实现LoadDictDatabase并将其注入容器第三步 标识需要翻译的字段第四步 标识需要翻译的方法第五步 调用需要翻译的方法 实现细节TODO 前言 字典,即在存储介质中进行存储时,为了避免业务上对其名称…

数据结构复习指导之二叉树的概念

文章目录 二叉树 考纲内容 复习提示 1.二叉树的概念 1.1二叉树的定义及其主要特性 1.1.1二叉树的定义 1.1.2几种特殊的二叉树 1.1.3二叉树的性质 1.2二叉树的存储结构 1.2.1顺序存储结构 1.2.2链式存储结构 知识回顾 二叉树 考纲内容 (一)树…

苹果Mac用户下载VS Code(Universal、Intel Chip、Apple Silicon)哪个版本?

苹果macOS用户既可以下载通用版(Universal),软件将自动检测用户的处理器并进行适配。 也可以根据型号下载对应CPU的版本: 使用Intel CPU的Mac电脑可下载Intel Chip版本; 使用苹果自研M系列CPU的Mac电脑下载Apple Si…

Context capture/Pix4Dmapper/AutoCAD/CASS/EPS软件的安装流程与使用方法;土方量计算;无人机摄影测量数据处理

目录 专题一 无人机摄影测量技术应用现状及其发展 专题二 基本原理和关键技术讲解 专题三 无人机影像外业数据获取 专题四 数据处理环境建立与软件熟悉 专题五 GNSS数据土方量计算 专题六 基于无人机影像数据的正射影像制作 专题七 基于无人机影像数据的三维模型制作 专…