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

网易云音乐歌名可视化:词云生成与GitHub-Pages部署实践

引言

本文将基于前一篇爬取的网易云音乐数据, 利用Python的wordcloudmatplotlib等库, 对歌名数据进行深入的词云可视化分析. 我们将探索不同random_state对词云布局的影响, 并详细介绍如何将生成的词云图部署到GitHub Pages, 实现数据可视化的在线展示. 介绍了如何从原始数据出发, 生成超酷词云图, 并将其部署到 GitHub Pages 上.

词云预览

词云预览1
词云预览2
▶️ 点击预览词云交互 ◀️

脚本地址:

项目地址: Gazer

utils.py

visualization.py

main.py

代码结构和使用方法

文件结构

Gazer/
├── NeteaseCloudMusicGaze/
│   ├── data/
│   │   ├── processed/
│   │   ├── raw/
│   │   │   └── me_music_data.json
│   │   └── title_stopwords.txt
│   ├── output/
│   │   └── visualizations/
│   ├── src/
│   │   ├── __init__.py  # 确保 src 是一个 Python 包
│   │   ├── utils.py     # 包含工具函数
│   │   └── visualization.py # 主要的可视化逻辑
│   └── main.py          # 程序的入口点, 用于调用 src 中的函数
└── ...

代码结构

  1. utils.py

    1. load_stopwords_from_file 从指定文件路径加载停用词列表, 并将其转换为集合. 如果文件不存在, 则返回空集合, 并记录错误日志
    2. load_json_data 加载爬取的 JSON 数据文件. 如果文件路径错误或 JSON 格式不正确, 将捕获异常并打印错误信息.
    3. load_and_extract_text 从爬取的 JSON 文件加载数据并提取 title 字段(即歌曲名), 将这些值组成一个列表返回. 如果文件加载失败或数据提取失败, 会进行相应的错误处理.
  2. visualization.py

    1. generate_wordcloud 根据文本列表生成词云图, 并返回词频字典
    2. save_word_frequencies_to_csv 将词频字典保存到 CSV 文件
    3. visualize_keywords 调用以上两个函数, 并且可视化关键词数据, 生成词云图并保存词频到 CSV 文件
  3. main.py
    主脚本, 调用 utils.pyvisualization.py 中的函数

使用方法

  1. 确保已经根据上一篇文档中的方法爬取了相应的数据, 确保 json 文件格式正确, 为一个字典列表.
  2. 安装依赖: pip install wordcloud matplotlib jieba numpy , 或者克隆项目代码后 pip install -r requirements.txt
  3. 修改 main.py 文件中的配置:
    • 填写 data_path 爬取的 json 文件路径
    • 填写 output_dir 输出的词云图和词频 csv 文件路径

代码分析

文件读取

之前爬取的 JSON 文件是一个包含多个字典的列表, 那么 load_json_data 函数如果成功加载, 就会返回一个列表, 这个列表里面包含的就是你的 JSON 文件中的那些字典.

以我的 me_music_data.json 为例, 文件内容是这样的(假设只有 2 条):

[{"title": "Common Denominator [Bonus Track]","singer": "Justin Bieber","album": "My World","comment": 3118},{"title": "I Found a Reason","singer": "Cat Power","album": "V for Vendetta","comment": 841}
]

那么 load_json_data 函数加载成功后, 返回的 data 变量就会是一个列表:

data = [{"title": "Common Denominator [Bonus Track]","singer": "Justin Bieber","album": "My World","comment": 3118},{"title": "I Found a Reason","singer": "Cat Power","album": "V for Vendetta","comment": 841}
]

然后你就可以通过索引访问列表中的每一个字典, 例如 data[0] 就是第一个字典, data[1] 就是第二个字典, 以此类推. 并且可以通过键值对的方式访问字典中的每一个值, 例如data[0]["title"]就是"Common Denominator [Bonus Track]".

停用词

为了后续更多的数据处理, 将 TITLE_STOPWORDS 写入文件, 并创建一个函数来读取它.

E:\Gazer\NeteaseCloudMusicGaze\data\ 目录下手动创建一个名为 title_stopwords.txt 的文本文件, 每个停用词占一行.

这里提供了一些适用于歌名的停用词示例. 为了获得更加精确的可视化效果, 建议你先运行一次 main.py, 然后根据生成的词频 CSV 文件(例如word_frequencies_me_music_data.csv), 观察高频出现的、但对你的分析目标没有实际意义的词语, 并将它们添加到 title_stopwords.txt 文件中. 之后再次运行main.py, 观察词云图的变化.

、
版
feat
翻自
Cover
EDIT
Instrumental
插曲
version
ver
Piano
Mix
丶

WorldCloud 类一些常用参数及其含义和说明

wordcloud = WordCloud(width=960,   # 词云图宽度(px), 默认为 400height=600,  # 词云图高度(px), 默认为 200background_color=None,  # 设置背景颜色为透明, 或自定义如"white", "#000000", 默认为 "black"stopwords=stopwords,font_path=DEFAULT_FONT_PATH,max_words=200,              # 词云图中显示的最大词数, 默认为 200max_font_size=100, # 词云图中最大的字体大小, 可以根据你的数据量调整, 默认为None, 表示自动根据词频调整random_state=42,   # 随机数种子, 用于控制词云图的布局, 设置相同的值可以得到相同的布局mode="RGBA"        # 颜色模式, "RGB" 或 "RGBA", 默认为 "RGB" # ... 还有很多其他参数, 具体可以参考官方文档
)

这些参数都不需要你全部设置, 只有在你需要自定义某些效果的时候设置就行了. 你可以根据自己的需求调整这些参数, 生成各种各样的词云图.

  • wordcloud.generate(text): 根据文本生成词云. 这一步会根据传入的文本 text, 统计词频, 应用停用词, 计算每个词的位置和大小, 最终生成词云图. 但是这个时候词云图还在内存里. 这里面的 text 就是所有歌名使用空格连接起来的一个超级长的字符串.
  • wordcloud.to_file(output_path): 将生成的词云图保存到文件. 这一步将内存中的词云图渲染成图片, 并保存到指定的路径 output_path.
  • wordcloud.words_: 获取词云中每个词及其对应的归一化频率. 这是一个字典属性, 包含了生成词云图的词语及其频率信息, 后续save_word_frequencies_to_csv函数会使用这个字典属性.

简单来说, 这三行代码完成了“根据文本生成词云图”、“将词云图保存到文件”和“获取词频数据”这三个操作.

关于 random_state 随机种子

random_state 参数用于控制 wordcloud 库在生成词云图时涉及到的随机过程. 这些随机过程包括:

  • 词语位置的随机扰动:为了避免词语重叠, wordcloud 会在一定范围内随机调整词语的位置.
  • 词语颜色的随机选择:如果没有指定每个词的颜色, wordcloud 会从一个颜色列表中随机选择颜色.

random_state 的作用就是控制这些随机过程的可重复性.

  • 如果你设置了 random_state 为一个固定的整数(例如 42, 或者其他任何整数), 那么每次运行代码时, 只要其他参数相同, 生成的词云图布局和颜色都会是一样的. 这对于调试代码、复现结果、保持结果一致性非常有用.
  • 如果你不设置 random_state, 或者将其设置为 None, 那么每次运行代码时, 词云图的布局和颜色都会随机变化.

42 这个数字本身并没有什么特殊的含义, 你可以把它设置为任何你喜欢的整数. 大家经常用 42, 可能是因为道格拉斯·亚当斯在他的科幻小说《银河系漫游指南》中说 “The Answer to the Ultimate Question of Life, the Universe, and Everything is 42” .

想来点不一样的?
  • 如果你想每次生成的词云图都不同, 就不要设置 random_state, 或者设置为 None.

  • 如果你想尝试几种不同的布局, 但又希望每次运行代码时这几种布局能够固定下来, 你可以尝试几个不同的 random_state, 例如 123, 看看哪个布局你最喜欢, 然后就固定使用那个值.

    不同的 random_state 值的布局预览

    生成这些预览图需要实际运行代码, 并设置不同的 random_state 值.

    这里提供一段代码, 让你能够自己生成并比较不同 random_state 值对应的词云图:

    from wordcloud import WordCloud, STOPWORDS
    import matplotlib.pyplot as plt
    import os
    from typing import List, Dict
    import csv
    from src.utils import load_json_data, load_and_extract_text, load_stopwords_from_file# 常量定义 (根据你的实际情况修改)
    WORD_HEADER = "Word"
    FREQUENCY_HEADER = "Frequency"
    DEFAULT_FONT_PATH = "msyh.ttc"
    TITLE_STOPWORDS_PATH = r"E:\Gazer\NeteaseCloudMusicGaze\data\title_stopwords.txt"
    DATA_PATH = r"E:\Gazer\NeteaseCloudMusicGaze\data\raw\me_music_data.json"
    OUTPUT_DIR = r"E:\Gazer\NeteaseCloudMusicGaze\output\visualizations"def generate_wordcloud(text_list: List[str], output_path: str, stopwords: set = None, random_state=None) -> Dict[str, float]:# 为了演示, 我把 random_state 提到这里了"""根据文本列表生成词云图, 并返回词频字典. (文档字符串的其他部分保持不变)"""text = " ".join(text_list)if stopwords is None:stopwords = set(STOPWORDS)title_stopwords = load_stopwords_from_file(TITLE_STOPWORDS_PATH)stopwords.update(title_stopwords)wordcloud = WordCloud(width=960,height=600,background_color=None,stopwords=stopwords,font_path=DEFAULT_FONT_PATH,max_words=200,max_font_size=100,random_state=random_state,  # 使用传入的 random_statemode="RGBA")wordcloud.generate(text)wordcloud.to_file(output_path)return wordcloud.words# 其他函数 (save_word_frequencies_to_csv, visualize_keywords) 保持不变if __name__ == "__main__":text_list = load_and_extract_text(DATA_PATH)os.makedirs(OUTPUT_DIR, exist_ok=True)# 尝试不同的 random_state 值for i in range(1, 6):  # 生成 5 个不同的 random_state 的结果output_path = os.path.join(OUTPUT_DIR, f"wordcloud_random_state_{i}.png")generate_wordcloud(text_list, output_path, random_state=i)print(f"已生成词云图:{output_path}")
    

    这段代码会生成 5 个词云图, 分别对应 random_state 值为 1、2、3、4、5 的情况. 你可以查看这些图片, 比较它们的布局差异.

visualize_keywords

这个函数是否重复了前两个函数的功能?

visualize_keywords 函数确实调用了 generate_wordcloudsave_word_frequencies_to_csv 这两个函数, 但它并不是简单地重复它们的功能, 而是**将它们组合起来, 形成一个更高级别的功能:从原始数据文件出发, 生成词云图和对应的词频 CSV 文件. **

可以这样理解:

  • generate_wordcloud 负责根据文本生成词云图, 并返回词频数据.
  • save_word_frequencies_to_csv 负责将词频数据保存到 CSV 文件.
  • visualize_keywords 负责统筹安排, 它首先调用 load_and_extract_text 从数据文件提取文本, 然后调用 generate_wordcloud 生成词云图和获取词频, 最后调用 save_word_frequencies_to_csv 将词频保存到文件.

visualize_keywords 函数的作用是对数据进行可视化, 属于数据分析和数据可视化的高级功能, generate_wordcloudsave_word_frequencies_to_csv只是可视化过程中的步骤. 这样划分可以让代码的逻辑更清晰, 也更易于维护和扩展.

你可以把 generate_wordcloudsave_word_frequencies_to_csv 看作是工具函数, 它们分别负责生成词云和保存词频这两个独立的任务. 而 visualize_keywords 则是一个更高级别的函数, 它利用这两个工具函数来完成一个更复杂的目标.

使用 wordart 获取更美观的词云可视化, 并使用 github-pages 部署

wordart 提供了可高度自定义的词云图, 可以使用生成的 csv 导入词频自定义词云颜色, 形状等. 完成后, 点 SAVE, 然后点 Share 将当前作品设置为公开, 点 Webpage 复制 iframe 标签.

<iframe style="width:100%; height: 100%; border: none" src="https://cdn.wordart.com/iframe/qfwzk59spavk"></iframe>

iframe 标签放进创建的 HTML 文件的 body 中, 使用 Cursor / VS Code 的 Live Server 打开. 按 Ctrl+S 保存 HTML 到本地, 命名为 index.html, 以便后续在 github-pages 中部署. 这时也会自动下载一个文件夹 index_files, 包含 qfwzk59spavk.htmlwordart.min.js.下载. 此时可以直接用本地浏览器打开 index.html, 也可以获取鼠标和词云的交互功能.

这个方法完美地绕过了编码问题和 cdn.wordart.com 的访问限制, 直接将你在 Live Server 中看到的、已经渲染好的、包含交互式词云的页面完整地保存到了本地.

需要注意的地方:

  • Live Server 的依赖: 这种方法依赖于 Live Server 能够正确地渲染你的网页. 如果你的网页在 Live Server 中显示有问题, 那么保存下来的网页也会有问题.
  • iframe 的内容: 这种方法会将 iframe 中的内容 (也就是 qfwzk59spavk.html) 也一起保存下来. 这通常是没问题的, 但如果 iframe 中的内容非常大, 或者你不希望将 iframe 的内容保存到本地, 那么你需要手动编辑保存后的 HTML 文件, 删除 iframe 相关的代码.
  • 如果你之后需要部署到 GitHub, 你仍需检查 index.html 中的文件路径是否正确.
确保你已经为你的仓库开启 GitHub pages:

可以点击 开启 GitHub pages 教程 查看

开启后直接 push 到仓库同步, 等待 pages 部署完毕就能在 https://YourGithubUserName.github.io/RepositoryName/ 看到可交互式词云已经成功部署到网站.

相关文章:

网易云音乐歌名可视化:词云生成与GitHub-Pages部署实践

引言 本文将基于前一篇爬取的网易云音乐数据, 利用Python的wordcloud、matplotlib等库, 对歌名数据进行深入的词云可视化分析. 我们将探索不同random_state对词云布局的影响, 并详细介绍如何将生成的词云图部署到GitHub Pages, 实现数据可视化的在线展示. 介绍了如何从原始数据…...

PHP根据IP地址获取地理位置城市和经纬度信息

/** 根据IP地址 获取地理位置*/ function getLocationByIP($ip) {$url "http://ip-api.com/json/{$ip}?langzh-CN&fieldsstatus,message,country,countryCode,region,regionName,city,lat,lon,timezone,isp,org,as";$response file_get_contents($url);$data …...

渲染流程概述

渲染流程包括 CPU应用程序端渲染逻辑 和 GPU渲染管线 一、CPU应用程序端渲染逻辑 剔除操作对物体进行渲染排序打包数据调用Shader SetPassCall 和 Drawcall 1.剔除操作 视椎体剔除 &#xff08;给物体一个包围盒&#xff0c;利用包围盒和摄像机的视椎体进行碰撞检测&#xf…...

【单细胞-第三节 多样本数据分析】

文件在单细胞\5_GC_py\1_single_cell\1.GSE183904.Rmd GSE183904 数据原文 1.获取临床信息 筛选样本可以参考临床信息 rm(list ls()) library(tinyarray) a geo_download("GSE183904")$pd head(a) table(a$Characteristics_ch1) #统计各样本有多少2.批量读取 学…...

libOnvif通过组播不能发现相机

使用libOnvif库OnvifDiscoveryClient类&#xff0c; auto discovery new OnvifDiscoveryClient(QUrl(“soap.udp://239.255.255.250:3702”), cb.Build()); 会有错误&#xff1a; end of file or no input: message transfer interrupted or timed out(30 sec max recv delay)…...

项目集成GateWay

文章目录 1.环境搭建1.创建sunrays-common-cloud-gateway-starter模块2.目录结构3.自动配置1.GateWayAutoConfiguration.java2.spring.factories 3.pom.xml4.注意&#xff1a;GateWay不能跟Web一起引入&#xff01; 1.环境搭建 1.创建sunrays-common-cloud-gateway-starter模块…...

2025年01月28日Github流行趋势

项目名称&#xff1a;maybe 项目地址url&#xff1a;https://github.com/maybe-finance/maybe项目语言&#xff1a;Ruby历史star数&#xff1a;37540今日star数&#xff1a;1004项目维护者&#xff1a;zachgoll, apps/dependabot, tmyracle, Shpigford, crnsh项目简介&#xff…...

使用Ollama本地部署DeepSeek R1

前言 DeepSeek是一款开源的智能搜索引擎&#xff0c;能够通过深度学习技术提高搜索的智能化水平。如果你正在寻找一种方式来将DeepSeek部署在本地环境中&#xff0c;Ollama是一个非常方便的工具&#xff0c;它允许你在本地快速部署并管理各种基于AI的模型。 在本篇博客中&…...

doris:异常数据处理

在导入过程中&#xff0c;源数据列与目标列的数据类型可能存在不一致的情况。导入过程会对这些类型不一致的数据进行转换&#xff0c;但在转换过程中可能会出现字段类型不匹配、字段超长、精度不匹配等问题&#xff0c;从而导致转换失败。 为了处理这些异常情况&#xff0c;Do…...

chrome源码剖析—UI架构消息机制

Chrome 浏览器的 UI 架构是高度模块化且基于现代图形技术和用户界面设计理念构建的。它的 UI 架构涵盖了窗口、标签页、控件、通知、菜单等组件的管理和交互。Chrome 的 UI 基本上是通过 views 框架和 Aura&#xff08;Chrome 自己的 UI 层&#xff09;构建的&#xff0c;后者又…...

.NET 9.0 的 Blazor Web App 项目、Bootstrap Blazor 组件库、自定义日志 TLog 使用备忘

一、设计目标&#xff1a;通用、容易修改、使用简单&#xff0c;所有代码保存在一个文件中&#xff0c;方便移植到其他项目使用。 注&#xff1a;示例使用 Bootstrap Blazor 组件库和 EF Core 、Sqlite&#xff0c;需要先使用 Nuget包管理器 添加对应的包。 namespace Blazor…...

单片机基础模块学习——超声波传感器

一、超声波原理 左边发射超声波信号&#xff0c;右边接收超声波信号 左边的芯片用来处理超声波发射信号&#xff0c;中间的芯片用来处理接收的超声波信号 二、超声波原理图 T——transmit 发送R——Recieve 接收 U18芯片对输入的N_A1信号进行放大&#xff0c;然后输入给超声…...

java 正则表达式匹配Matcher 类

Matcher 类 用法 在 Java 中&#xff0c;Matcher 类是用于匹配正则表达式的工具&#xff0c;而 group() 方法是 Matcher 类中的一个重要方法&#xff0c;用于提取匹配结果中的捕获组&#xff08;captured groups&#xff09;。以下是对 group() 方法的详细解释&#xff1a; 1.…...

使用 OpenResty 构建高效的动态图片水印代理服务20250127

使用 OpenResty 构建高效的动态图片水印代理服务 在当今数字化的时代&#xff0c;图片在各种业务场景中广泛应用。为了保护版权、统一品牌形象&#xff0c;动态图片水印功能显得尤为重要。然而&#xff0c;直接在后端服务中集成水印功能&#xff0c;往往会带来代码复杂度增加、…...

Elastic Agent 对 Kafka 的新输出:数据收集和流式传输的无限可能性

作者&#xff1a;来 Elastic Valerio Arvizzigno, Geetha Anne 及 Jeremy Hogan 介绍 Elastic Agent 的新功能&#xff1a;原生输出到 Kafka。借助这一最新功能&#xff0c;Elastic 用户现在可以轻松地将数据路由到 Kafka 集群&#xff0c;从而实现数据流和处理中无与伦比的可扩…...

Elasticsearch 性能测试工具 Loadgen 之 002——命令行及参数详解

上一讲&#xff0c;我们讲解了 Loadgen 的极简部署方式、配置文件、快速使用从 0 到 1 方式。 本讲&#xff0c;我们主要解读一下 Loadgen 的丰富的命令行及参数含义。 有同学可能会说&#xff0c;上面不是介绍很清楚了吗&#xff1f;但&#xff0c;咱们还是有必要详细中文解读…...

书生大模型实战营3

文章目录 L0——入门岛git基础Git 是什么&#xff1f;Git 中的一些基本概念工作区、暂存区和 Git 仓库区文件状态分支主要功能 Git 平台介绍GitHubGitLabGitee Git 下载配置验证下载 Git配置 Git验证 Git配置 Git常用操作Git简易入门四部曲Git其他指令 闯关任务任务1: 破冰活动…...

CTF-web: Python YAML反序列化利用

PyYAML存在以下几个特殊标签,如果这些标签被不安全的解析,会造成解析漏洞 从 PyYaml 版本 6.0 开始&#xff0c;load 的默认加载器已切换到 SafeLoader&#xff0c;以降低远程代码执行的风险。更新后易受攻击的是 yaml.unsafe_load 和 yaml.load(input, Loaderyaml.UnsafeLoade…...

【玩转全栈】----靓号管理系统实现

先赞后看&#xff0c;养成习惯。。。 目录 数据库设置 基本功能 路由器 靓号显示 靓号添加 靓号编辑 视图函数 额外功能 搜索功能 分页 一般逻辑 动态页码 上下页 首尾页 数据库设置 新建一个数据库&#xff08;或者就用之前部门、用户管理的也行&#xff09;&#xff0c;用Dja…...

【Attention】KV Cache

1 什么是KV Cache&#xff1f; 定义&#xff1a;KV Cache 即 Key-Value Cache&#xff0c;是用于加速 Transformer 模型推理长序列过程的一种技术。 核心原理&#xff1a;在 Transformer 的自注意力机制中&#xff0c;将历史输入 token 中的 Key 和 Value 缓存下来&#xff0c…...

【Proteus仿真】【51单片机】多功能计算器系统设计

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、LCD1602液晶显示 2、矩阵按键​ 3、加减乘除&#xff0c;开方运算 4、带符号运算 5、最大 999*999 二、使用步骤 基于51单片机多功能计算器 包含&#xff1a;程序&…...

【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)

祈愿在2025蛇年里&#xff0c; 伟大的祖国风调雨顺、国泰民安、每个人齐心协力&#xff0c;共同经历这百年未有之大变局时代&#xff08;国际政治、AI技术……&#xff09; 祝福亲友同事孩子们平安健康&#xff08;安全、安全、安全&#xff09;、巳巳如意&#xff01; 背景需…...

leetcode——二叉树的最大深度(java)

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;root [1,null,2] 输…...

Java创建项目准备工作

新建项目 新建空项目 每一个空项目创建好后都要检查jdk版本 检查SDK和语言级别——Apply——OK 检查当前项目的Maven路径&#xff0c;如果已经配置好全局&#xff0c;就是正确路径不用管 修改项目字符集编码&#xff0c;将所有编码都调整为UTF-8 创建Spingboot工程 创建Spring…...

汽车免拆诊断案例 | 2007 款日产天籁车起步加速时偶尔抖动

故障现象  一辆2007款日产天籁车&#xff0c;搭载VQ23发动机&#xff08;气缸编号如图1所示&#xff0c;点火顺序为1-2-3-4-5-6&#xff09;&#xff0c;累计行驶里程约为21万km。车主反映&#xff0c;该车起步加速时偶尔抖动&#xff0c;且行驶中加速无力。 图1 VQ23发动机…...

树和图的实现与应用:C语言实践详解

树和图的实现与应用:C语言实践详解 树和图是两种重要的非线性数据结构,在计算机科学中有着广泛的应用。从基本的二叉树到复杂的图算法(如最短路径和最小生成树),这些结构能够帮助我们高效解决实际问题。本文将从基础出发,逐步深入,讲解如何用C语言实现树和图,并探讨其…...

CSS:跑马灯

<div class"swiper-container"><div class"swiper-wrapper"><!-- 第一组 --><div class"item" v-for"item in cardList" :key"first-item.id"><img :src"item.image" alt""…...

【JavaEE】_MVC架构与三层架构

目录 1. MVC架构 2. 三层架构 3. MVC架构与三层架构的对比 3.1 MVC与三层架构的对比 3.2 MVC与三层架构的共性 1. MVC架构 在前文已介绍关于SpringMAC的设计模式&#xff0c;详见下文&#xff1a; 【JavaEE】_Spring Web MVC简介-CSDN博客文章浏览阅读967次&#xff0c;点…...

【人工智能】基于Python的机器翻译系统,从RNN到Transformer的演进与实现

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 机器翻译(Machine Translation, MT)作为自然语言处理领域的重要应用之一,近年来受到了广泛的关注。在本篇文章中,我们将详细探讨如何使…...

单片机基础模块学习——PCF8591芯片

一、A/D、D/A模块 A——Analog 模拟信号:连续变化的信号(很多传感器原始输出的信号都为此类信号)D——Digital 数字信号:只有高电平和低电平两种变化(单片机芯片、微控制芯片所能处理的都是数字信号) 下面是模拟信号和连续信号的区别 为什么需要进行模拟信号和数字信号之…...