【数据分析处理之缺失值】
文章目录
- 一、缺失值的影响
- 1. 统计分析的偏差
- 2. 机器学习模型的性能下降
- 3. 数据质量和可信度下降
- 4. 数据利用率降低
- 5. 增加数据预处理的复杂度
- 二、识别缺失值
- 1. 使用工具识别缺失值
- 2. 可视化缺失数据
- 三、处理缺失值的策略
- 1. 删除含缺失值的行或列
- 2. 填充缺失值
- a. 用常数填充
- b. 用统计数据填充(如均值、中位数)
- c. 使用模型预测缺失值
- 四、选择合适的处理方法
- 1. 缺失值的类型
- 2. 缺失值的量和分布
- 3. 数据的重要性
- 4. 分析或模型的目标
- 5. 可用的资源和时间
一、缺失值的影响
在进行数据分析和机器学习项目时,经常会遇到包含缺失值的数据集。缺失值的存在不仅会影响数据分析的整体质量,还可能导致一系列的问题,影响最终的分析结果和决策过程。
1. 统计分析的偏差
当数据中存在缺失值时,进行统计分析(如计算均值、中位数、方差等)将不再准确。例如,如果忽略了缺失值直接计算均值,那么结果可能会高估或低估实际值。这是因为缺失的数据可能不是随机缺失,它们可能具有某种模式或依赖性,这直接影响统计推断的有效性和准确性。
2. 机器学习模型的性能下降
大多数机器学习算法无法直接处理缺失值。如果直接将包含缺失值的数据用于训练模型,可能会导致模型训练失败或模型性能显著下降。即使某些算法如决策树(Random Forests、XGBoost等)能够处理缺失值,缺失数据的处理方式也会影响模型的学习效率和预测能力。
3. 数据质量和可信度下降
数据质量是数据分析和决策的基础。缺失值的存在减少了数据集的完整性,可能会导致分析结果的不确定性增加,进而影响决策者对分析结果的信任度。在报告分析结果时,缺失数据的处理不当可能会引起误导,尤其是在高风险的决策环境中。
4. 数据利用率降低
处理缺失值的一种简单方法是删除含有缺失值的记录,但这种做法会直接减少可用于分析的数据量,特别是当缺失值较多时。这种数据利用率的降低会限制数据分析的深度和广度,可能导致关键信息的丢失。
5. 增加数据预处理的复杂度
为了有效利用包含缺失值的数据,需要采取合适的数据预处理方法,如数据插补、预测缺失值或使用基于模型的方法处理缺失值。这些方法不仅增加了数据预处理的复杂度,还需要专业知识来正确选择和应用,以避免进一步的分析偏差。
二、识别缺失值
识别数据中的缺失值是数据预处理的首要步骤。通过准确地识别出哪些数据是缺失的,可以更好地决定如何处理这些缺失值。Python 的 pandas 库提供了强大的工具来帮助我们识别缺失值,而可视化库如 seaborn 和 matplotlib 则能够帮助我们直观地理解缺失数据的分布。
1. 使用工具识别缺失值
对于缺失值,pandas 提供了 isnull()
方法来检测数据集中的缺失值。
import pandas as pd# 加载数据集
data = pd.read_csv('example.csv')# 使用 isnull() 方法检查数据集中的缺失值,并使用 sum() 方法计算每列的缺失值总数
print(data.isnull().sum())
此代码段将输出每列的缺失值数量,帮助我们快速识别哪些列含有缺失值以及缺失值的数量。
2. 可视化缺失数据
通过可视化的方式,可以更直观地理解缺失值在数据集中的分布情况。
import seaborn as sns
import matplotlib.pyplot as plt# 使用 seaborn 库的 heatmap 函数来可视化数据集中的缺失值
# cbar=False 表示不显示颜色条
sns.heatmap(data.isnull(), cbar=False)# 设置图表标题
plt.title("Missing Values Heatmap")# 显示图表
plt.show()
热图中,白色部分表示缺失值,黑色部分表示非缺失值。这样的可视化使我们能够一眼看出数据中缺失值的分布情况,例如某些列是否有大量缺失值,或者缺失值是否在数据集中随机分布。
三、处理缺失值的策略
1. 删除含缺失值的行或列
这是处理缺失值最简单直接的方法。如果一个数据集中的缺失值不是很多,那么删除含有缺失值的行或列可能是一个可行的选择。
data.dropna(inplace=True)
此命令将删除数据集中含有任何缺失值的行。如果想要删除含有缺失值的列,可以使用 axis=1
参数。但是,这种方法可能会导致大量数据的丢失,特别是当缺失值分布广泛时。
2. 填充缺失值
当数据量宝贵或者当删除缺失值会导致大量信息丢失时,填充缺失值成为了一种更好的选择。
a. 用常数填充
用一个常数来填充所有的缺失值,这个常数可以是 0、-1、或者其他特定值,取决于数据的性质和分析的需求。
data.fillna(0, inplace=True)
b. 用统计数据填充(如均值、中位数)
使用列的均值、中位数或众数来填充该列的缺失值是一种更加精细化的处理方法。
mean_value = data['column'].mean()
data['column'].fillna(mean_value, inplace=True)
c. 使用模型预测缺失值
当缺失值较多或者缺失值的数据认为对建模过程中有重要影响时,可以使用机器学习模型来预测缺失值。这种方法通常涉及到将数据集分成两部分:一部分没有缺失值,用于训练模型;另一部分含有缺失值,用模型来预测缺失值。
- 首先,选择一个或多个特征作为预测变量,使用没有缺失值的记录来训练一个机器学习模型。
- 然后,使用该模型来预测缺失值所在列的值。
这种方法比较复杂,需要根据数据的具体情况选择合适的模型(如线性回归、决策树、K-最近邻等)。
from sklearn.linear_model import LinearRegression# 假设 `data` 是完整的数据集,`column_with_missing_values` 是含有缺失值的列
# `other_columns` 是其他列,用于作为特征预测缺失值# 训练模型
model = LinearRegression()
model.fit(data[other_columns][data.column_with_missing_values.notnull()],data.column_with_missing_values[data.column_with_missing_values.notnull()])# 预测缺失值
predicted_values = model.predict(data[other_columns][data.column_with_missing_values.isnull()])# 填充缺失值
data.loc[data.column_with_missing_values.isnull(), 'column_with_missing_values'] = predicted_values
处理缺失值的方法应根据数据的特性和分析的目标来选择。在一些情况下,结合使用多种方法可能会得到更好的结果。
四、选择合适的处理方法
1. 缺失值的类型
缺失值通常被分类为以下三种类型:
- 完全随机缺失(MCAR):缺失值的出现与任何其他数据(观测或缺失)无关。
- 随机缺失(MAR):缺失值的出现与其他观测到的数据有关,但与缺失数据本身无关。
- 非随机缺失(NMAR):缺失值的出现与缺失的数据本身有关。
理解缺失数据的类型有助于选择最合适的处理方法。例如,如果数据是MCAR,那么简单地删除缺失数据可能是可行的。但如果数据是NMAR,那么这种方法可能会引入偏差。
2. 缺失值的量和分布
- 缺失量少:如果数据集中缺失值很少,删除包含缺失值的行或列可能是最简单且影响最小的方法。
- 缺失量大但集中:如果某个特定的列或行有很大一部分是缺失的,考虑是否整个列或行都应该被删除。
- 缺失量大且分布广泛:对于广泛分布的缺失值,考虑填充方法或使用模型预测缺失值。
3. 数据的重要性
- 数据列的重要性:如果缺失值所在的列对于分析非常重要,那么选择填充或使用模型预测缺失值可能比删除数据更合适。
- 缺失数据的信息量:有时候,缺失本身就是一种有价值的信息。例如,在调查问卷中,未回答某些敏感问题可能暗示了被调查者的某种态度或特性。
4. 分析或模型的目标
- 描述性分析:如果目标是进行描述性统计分析,可能更倾向于使用填充方法,以保持数据集的大小和分布特性。
- 预测性分析或建模:如果是要进行预测性分析或建模,可能需要更仔细地考虑如何处理缺失值,以避免引入模型偏差。使用模型预测缺失值或采用特定于模型的缺失值处理方法可能更为合适。
5. 可用的资源和时间
- 时间和资源限制:在时间和资源有限的情况下,可能需要权衡不同方法的复杂性和计算成本。例如,使用模型预测缺失值虽然可能更精确,但也更耗时和复杂。
相关文章:
【数据分析处理之缺失值】
文章目录 一、缺失值的影响1. 统计分析的偏差2. 机器学习模型的性能下降3. 数据质量和可信度下降4. 数据利用率降低5. 增加数据预处理的复杂度 二、识别缺失值1. 使用工具识别缺失值2. 可视化缺失数据 三、处理缺失值的策略1. 删除含缺失值的行或列2. 填充缺失值a. 用常数填充b…...
【大模型实战篇】Mac本地部署RAGFlow的踩坑史
1. 题外话 最近一篇文章还是在11月30日写的,好长时间没有打卡了。最近工作上的事情特别多,主要聚焦在大模型的预训练、微调和RAG两个方面。主要用到的框架是Megatron-DeepSpeed,后续会带来一些分享。今天的文章主要聚焦在RAG。 近期调研了一系…...
SQL Server实现将分组的其他字段数据拼接成一条数据
在 SQL Server 中,可以使用 STRING_AGG 函数(SQL Server 2017 及更高版本支持)将分组的其他字段数据拼接成一条数据。以下是示例代码: 假设有一个表 Orders,结构如下: OrderIDCustomerIDProduct1C001Appl…...
STM32 高级 物联网通讯之蓝牙通讯
目录 蓝牙基础知识 蓝牙概述 蓝牙产生背景 蓝牙发展历程 蓝牙技术类型 经典蓝牙(BR/EDR和AMP) 低功耗蓝牙(BLE) 市场上常见蓝牙架构 SOC蓝牙单芯片方案 SOC蓝牙+MCU方案 蓝牙host+controller分开方案 蓝牙协议栈 蓝牙芯片架构 BLE低功耗蓝牙协议栈框架 物理…...
堆排序基础与实践:如何在Java中实现堆排序
目录 一、堆排序的基本原理 二、堆排序的实现步骤 三、堆排序的时间复杂度和空间复杂度 四、堆排序的工作流程 五、堆排序的优缺点 六、堆排序的应用场景 堆排序(Heap Sort)是一种基于堆数据结构的排序算法。堆是一种特殊的完全二叉树,…...
你有哪些Deep Learning(RNN、CNN)调参的经验?
在深度学习的实践中,调参是一项既艺术又科学的工作。它不仅需要理论知识的支撑,还需要大量的实践经验。以下是一些在RNN和CNN模型调参中积累的经验,希望对正在这个领域摸索的朋友们有所帮助。 1. 从成熟的开源项目开始 对于初学者来说&…...
小程序租赁系统开发的优势与应用探索
内容概要 在如今这个数码科技飞速发展的时代,小程序租赁系统开发仿佛是一张神奇的魔法卡,能让租赁体验变得顺畅如丝。想象一下,无论你需要租用什么,从单车到房屋,甚至是派对用品,只需动动手指,…...
Spring Boot教程之三十九: 使用 Maven 将 Spring Boot 应用程序 Docker 化
如何使用 Maven 将 Spring Boot 应用程序 Docker 化? Docker是一个开源容器化工具,用于在隔离环境中构建、运行和管理应用程序。它方便开发人员捆绑其软件、库和配置文件。Docker 有助于将一个容器与另一个容器隔离。在本文中,为了将Spring B…...
Day58 图论part08
拓扑排序精讲 拓扑排序看上去很复杂,其实了解其原理之后,代码不难 代码随想录 import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();List<List<Integer&…...
u3d中JSON数据处理
一.认识JSON 1.1 Json概述 JSON(JavaScript Object Notation,JavaScript对象表示法)JSON和XML是比较类似的技术,都是用来存储文本信息数据的;相对而言,JSON比XML体积更小巧,但是易读性不如XML…...
大语言模型(LLM)一般训练过程
大语言模型(LLM)一般训练过程 数据收集与预处理 收集:从多种来源收集海量文本数据,如互联网的新闻文章、博客、论坛,以及书籍、学术论文、社交媒体等,以涵盖丰富的语言表达和知识领域。例如,训练一个通用型的LLM时,可能会收集数十亿甚至上百亿字的文本数据.清洗:去除…...
第十六届蓝桥杯模拟赛(第一期)(C语言)
判断质因数 如果一个数p是个质数,同时又是整数a的约数,则p称为a的一个质因数。 请问2024有多少个质因数。 了解 约数,又称因数。整数a整除整数b,b为a的因数(约数)质数,又称素数。只有1和它本身两…...
某网站手势验证码识别深入浅出(全流程)
注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 本文识别已同步上线至OCR识别网站: http://yxlocr.nat300.top/ocr/other/20 本篇文章包含经验和教训总结,我采用了两种方法进行识别,两种方法都各有优劣,其中一…...
QT---------QT框架功能概述
常用Qt界面组件 Qt提供了丰富的界面组件,如QPushButton(按钮)、QLineEdit(单行文本框)、QTextEdit(多行文本框)、QLabel(标签)、QComboBox(下拉框࿰…...
C++ 设计模式:模板方法(Template Method)
链接:C 设计模式 链接:C 设计模式 - 策略模式 链接:C 设计模式 - 观察者模式 模板方法(Template Method)是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。通过这…...
下载mysql免安装版和配置
1、下载地址 点击去官网下载https://downloads.mysql.com/archives/community/ 2、解压安装mysql 解压的文件夹是没有my.ini文件和data目录,需要我们自己去创建 根目录下创建my.ini,根目录创建data [mysql] default-character-setutf8[mysqld] #端口 po…...
Web服务端技术原理及应用
前言 黄色的是考点,蓝色的是重点。 HTML/CSS/JS 本章会有一个7分的程序设计题,用到前端知识 form表单元素,常用表单元素 html:HTML快速上手 基础语法、css常用选择器(ID、类)、盒子模型 css:网页美化指南 JS …...
数据库的使用09:使用SSMS工具将SQLsever数据导出到Excel
第一步,新建一个空白的.csv文件 第二步,按步骤点击导出 第三步,选择数据源(Db数据库) 第四步,选择目标源(CSV平面文件目标) 第五步,指定表或SQL 一直点下一步即可&am…...
Python中__getitem__ 魔法方法
在Python中,__getitem__ 是一个特殊的方法,通常称为“魔法方法”或“双下方法”(因为它们的名字前后都有两个下划线)。__getitem__ 方法允许一个对象实现像序列(如列表、元组、字符串)一样的行为࿰…...
自动驾驶三维重建
大概八成估计是未来的科研方向了 Neural Radiance Field in Autonomous Driving: A Survey...
小程序中引入echarts(保姆级教程)
hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…...
INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN这四个怎么在gorm中使用
在 GORM 中,JOIN 操作是通过 Joins 方法实现的,而不同类型的 JOIN(如 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN)可以通过特定的 SQL 语法来表示。GORM 本身并没有直接的 INNER, LEFT, RIGHT 等专用方法,但可以…...
分布式版本管理工具——Git关联远程仓库(github+gitee)
Git远程仓库(Github)的基本使用 一、前言二、Git远程仓库介绍三、演示1. 关联github远程仓库2. 关联gitee(码云)远程仓库3. 重命名远程仓库名4. 移除远程仓库 四、结束语 一、前言 古之立大事者,不惟有超世之才&#x…...
复习打卡大数据篇——HIVE 01
目录 1. 数据仓库初识 1.1 数据仓库概念 1.2 数据仓库特点 1.3 OLTP、OLAP区别 1.4 数仓分层架构 2. HIVE初识 2.1 什么是hive? 2.2 hive架构 3. HIVE初体验 3.1 beeline客户端使用 1. 数据仓库初识 1.1 数据仓库概念 数据仓库,Data WareHou…...
第430场周赛:使每一列严格递增的最少操作次数、从盒子中找出字典序最大的字符串 Ⅰ、统计特殊子序列的数目、统计恰好有 K 个相邻元素的数组数目
Q1、使每一列严格递增的最少操作次数 1、题目描述 给你一个由 非负 整数组成的 m x n 矩阵 grid。 在一次操作中,你可以将任意元素 grid[i][j] 的值增加 1。 返回使 grid 的所有列 严格递增 所需的 最少 操作次数。 2、解题思路 逐列处理:我们需要逐…...
前端处理跨域的几种方式
什么是跨域 指一个域下文档或者脚本去请求另一个域下的资源,这里的跨域是广义的; 广义的跨域: 资源提跳转:A链接、重定向、表单提交资源潜入:link、script、img、frame等dom标签,还有样式中background:url(…...
《计算机网络A》单选题-复习题库
1. 计算机网络最突出的优点是(D) A、存储容量大B、将计算机技术与通信技术相结合C、集中计算D、资源共享 2. RIP 路由协议的最大跳数是(C) A、13B、14C、15D、16 3. 下面哪一个网络层次不属于 TCP/IP 体系模型(D&a…...
网络安全威胁2024年中报告
下载地址: 网络安全威胁2024年中报告-奇安信...
Quartz - JDBC-Based JobStore事务管理及锁机制
由于JDBC-Based JobStore在进行job注册、trigger注册、任务调度及执行过程中需要操作数据库,而且会涉及到多张表,比如trigger注册的时候会根据不同情况写入triggers、simple_triggers或cron_triggers表,在执行任务的时候会读取和更新trigg…...
机器学习作业 | 泰坦尼克号生存的预测任务
泰坦尼克号生存的预测任务 学校作业,我来水一水 环境:pycharmanaconda虚拟环境 文章目录 泰坦尼克号生存的预测任务0.环境搭建参考:1 目的与要求2 任务背景3 任务简介4 模型介绍1.决策树(Decision Tree)2.朴素贝叶斯…...
Tonghttpserver6.0.1.3 使用整理(by lqw)
文章目录 1.声明2.关于单机版控制台和集中管理控制台3.单机版控制台3.1安装,启动和查看授权信息3.2一些常见的使用问题(单机控制台)3.3之前使用的是nginx,现在要配nginx.conf上的配置,在THS上如何配置3.4如何配置密码过…...
图像坐标导数的表达式 Expression for Image Coordinate Derivate
Title: 图像坐标导数的表达式 Expression for Image Coordinate Derivate 文章目录 I. 图像坐标 Image CoordinatesII. 关于 x \mathbf{x} x 的导数 Derivative wrt x \mathbf{x} x1. 第一部分2. 第二部分3. 两部分合并 III. 关于 H H H 的导数 Derivative wrt H H H1. 第一…...
Jenkins 中自动化部署 Spring Boot 项目
👨🏻💻 热爱摄影的程序员 👨🏻🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻🏫 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…...
Live555、FFmpeg、GStreamer介绍
Live555、FFmpeg 和 GStreamer 都是处理流媒体和视频数据的强大开源框架和工具,它们广泛应用于实时视频流的推送、接收、处理和播放。每个框架有不同的设计理念、功能特性以及适用场景。下面将详细分析这三个框架的作用、解决的问题、适用场景、优缺点,并…...
西门子DBX DBD DBB DBW的关系
DB10.DBD0 DB10.DBW0DB10.DBW2 DB10.DBB0DB10.DBB1DB10.DBB2DB10.DBB3 DB10.DBX0.00.7DB10.DBX1.01.7DB10.DBX2.02.7DB10.DBX3.03.7 使用之前需要在DB10中先定义,如果你仅在DB10中定义了一个DBD0,那么原则上你是可以使用上述所有地址的,但…...
语言模型在时间序列预测中的作用
语言模型在时间序列预测中的作用 从目前相关的研究情况来看,大语言模型在时间序列预测中的作用存在争议。 质疑其有用性的方面 消融研究结果:在对一些流行的基于语言模型(LLM)的时间序列预测方法进行消融研究时发现,去除LLM组件或将其替换为基本注意力层,在大多数情况下…...
【centos8 镜像修改】centos8 镜像修改阿里云
要将 CentOS 8 的镜像源修改为阿里云镜像,你需要编辑 /etc/yum.repos.d/ 目录下的 .repo 文件。以下是具体的步骤: 备份原始的 .repo 文件: 在编辑之前,建议备份原始的 .repo 文件,以便在出现问题时可以恢复。 sudo cp…...
2024年12月个人工作生活总结
本文为 2024年12月工作生活总结。 研发编码 Golang语言byte数组赋值 假定有如下变量: var strCode string var bCode [9]byte现需将string类型转换成byte类型,如下: bCode []byte(strCode)无法转换,提示: cannot…...
[cg] android studio 无法调试cpp问题
折腾了好久,native cpp库无法调试问题,原因 下面的Deploy 需要选Apk from app bundle!! 另外就是指定Debug type为Dual,并在Symbol Directories 指定native cpp的so路径 UE项目调试: 使用Android Studio调试虚幻引擎Android项目…...
vulnhub靶场【warzone】之2
前言 靶机:warzone-1,IP地址192.168.1.71 攻击:kali,IP地址192.168.1.16 都采用虚拟机,网卡为桥接模式 主机发现 因为都是同一局域网下,相当于内网环境,所以使用下面的工具,若想…...
MySQL什么情况下会加间隙锁?
目录 一、使用范围条件查询 二、唯一索引的范围查询 三、普通索引的查询 四、间隙锁的锁定规则 五、间隙锁的影响 间隙锁(Gap Lock)是MySQL中的一种锁机制,主要用于防止幻读现象。在MySQL的InnoDB存储引擎中,当事务隔离级别设置为可重复读(Repeatable Read)时,间隙…...
REDIS2.0
string list hash set 无序集合 声明一个key,键里面的值是元素,元素的类型是string 元素的值是唯一的,不能重复 多个集合类型之间可以进行并集,交集,集查的运算 sadd test1 a b c c d :添加5个元素&am…...
Java方法使用详解:从基本概念到进阶技巧
1. 方法介绍 方法是执行特定功能的代码块,可以被多次调用。方法由方法头和方法体组成,方法头包括方法名、参数列表和返回类型。方法体包含实际执行的代码。 2. 无参无返回值方法使用 这种方法没有参数,也不返回任何值。常用于执行一些不需…...
RT-Thread中堆和栈怎么跟单片机内存相联系
现在RT-ThreadMCU的应用方式越来越普遍,RT-Thread需要配置MCU中的RAM到的系统中,进入系统内存管理,才能提供给基于实时系统的应用程序使用,比如给应用程序提供malloc、free等函数调用功能。在嵌入式软件开发中,我们经常…...
对jenkins的rpm进行处理
下载Jenkins RPM包 首先,你需要从Jenkins官方网站(https://pkg.jenkins.io/redhat - stable/)下载合适的RPM包。通常,对于CentOS等基于RPM的系统,可以选择jenkins - <version>.noarch.rpm这种格式的包࿰…...
从Huggingface中下载数据集、模型
报错: 可能原因: 1. 服务器网络连接 这样就显示没有问题 2.访问权限问题 3.连接超时 4.使用镜像 使用镜像的方法在autodl上是可以成功的,但是在一些服务器却不能成功,那么就需要我们下载到本地,然后再把本地的打包…...
设计模式的分类
根据概念性动机分3类设计模式 创建型模式:管理对象的创建。 常用的有单例模式,简单工厂模式,工厂方法模式,另外还有原型模式,抽象工厂模式,建造者模式 结构型模式:将已有对象加入到设计中时…...
【图像去噪】论文精读:DualDn: Dual-domain Denoising via Differentiable ISP
请先看【专栏介绍文章】:【图像去噪(Image Denoising)】关于【图像去噪】专栏的相关说明,包含适配人群、专栏简介、专栏亮点、阅读方法、定价理由、品质承诺、关于更新、去噪概述、文章目录、资料汇总、问题汇总(更新中) 文章目录 前言Abstract1 Introduction2 Related W…...
张量与数据类型
Pytorch最基本的操作对象——张量(tensor),张量是Pytorch中重要的数据结构,可认为是一个高维数组。一般的,标量(scalar)是只有大小没有方向的量,如1、2、3等;向量&#x…...
JavaScript概述
Web网页的三要素:HTML结构、CSS表现、JavaScript行为。 一、JavaScript语言的组成 JS的全称叫JavaScript,它一门面向对象的解释型弱类型语言。 JavaScript也是由3个部分来组成的:ECMAScript、DOM、BOM。 ECMAScript——它是JS的核心部分&a…...