layoffs
收藏Layoffs Data Cleaning in MySQL
数据集概述
作者
- 作者: Abdullah Akintobi
- 数据库管理系统: MySQL
- 发布日期: 2024年11月12日
项目目标
- 使用MySQL清理和标准化
layoffs数据集。 - 主要过程包括数据建模、数据探索、数据清理和数据标准化。
- 目标是创建一个干净、标准化的数据集,消除重复、不一致和空值,以便进行准确的裁员数据分析。
数据建模
数据库和表创建
-
数据库: 创建了一个名为
world_layoffs的专用数据库。 sql CREATE DATABASE world_layoffs; -
表结构: 创建了一个名为
layoffs的表,包含以下列:company: 公司名称location: 公司所在地industry: 行业total_laid_off: 裁员人数percentage_laid_off: 裁员百分比date: 裁员日期stage: 公司阶段country: 公司所在国家funds_raised_millions: 筹集资金(百万) sql CREATE TABLE layoffs (companyTEXT,locationTEXT,industryTEXT,total_laid_offINT DEFAULT NULL,percentage_laid_offFLOAT DEFAULT NULL,dateTEXT,stageTEXT,countryTEXT,funds_raised_millionsINT DEFAULT NULL );
-
数据备份: 在任何转换之前,将原始数据集备份到
layoffs_copy表中。 sql CREATE TABLE layoffs_copy LIKE layoffs; INSERT INTO layoffs_copy SELECT * FROM layoffs;
数据探索
基本数据洞察
-
随机样本预览: 选择10个随机行以了解数据布局。 sql SELECT * FROM layoffs_copy ORDER BY RAND() LIMIT 10;
-
行数验证: 验证总行数。 sql SELECT COUNT(*) AS row_num FROM layoffs_copy;
-
重复检查: 使用窗口函数基于关键字段识别重复行。 sql WITH duplicate AS ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY
company,location,industry,total_laid_off,percentage_laid_off,date,stage,country,funds_raised_millions) AS dub_row_num FROM layoffs_copy ) SELECT * FROM duplicate WHERE dub_row_num > 1;
数据清理
重复删除和列调整
-
创建清理表: 创建新表
layoffs_clean,并添加行号以识别重复。 sql CREATE TABLE layoffs_clean AS SELECT *, ROW_NUMBER() OVER ( PARTITION BYcompany,location,industry,total_laid_off,percentage_laid_off,date,stage,country,funds_raised_millions) AS dub_row_num FROM layoffs_copy; -
删除重复记录: 删除已识别的重复记录。 sql DELETE FROM layoffs_clean WHERE dub_row_num > 1;
-
结构清理: 删除临时重复标识符列。 sql ALTER TABLE layoffs_clean DROP COLUMN dub_row_num;
数据标准化
数据一致性和空值处理
-
公司名称: 去除公司名称中的空白。 sql UPDATE layoffs_clean SET company = TRIM(company);
-
行业名称: 标准化行业分类。 sql UPDATE layoffs_clean SET industry = Crypto WHERE industry IN (Crypto Currency, CryptoCurrency);
-
国家名称: 修正国家名称格式。 sql UPDATE layoffs_clean SET country = TRIM(TRAILING . FROM country) WHERE country LIKE United States%;
-
日期格式: 标准化日期格式和数据类型。 sql UPDATE layoffs_clean SET
date= STR_TO_DATE(date, %m/%d/%Y); ALTER TABLE layoffs_clean MODIFY COLUMNdateDATE;
空值处理
-
行业空值: 将空行业值标准化为NULL,并使用公司和位置匹配填充。 sql UPDATE layoffs_clean SET industry = NULL WHERE industry = ; UPDATE layoffs_clean AS t1 INNER JOIN layoffs_clean AS t2 ON t1.company = t2.company AND t1.location = t2.location SET t1.industry = t2.industry WHERE t1.industry IS NULL AND t2.industry IS NOT NULL;
-
不完整记录: 删除缺乏必要裁员信息的记录。 sql DELETE FROM layoffs_clean WHERE total_laid_off IS NULL AND percentage_laid_off IS NULL;
总结洞察
- 数据质量: 识别并删除重复记录以确保数据完整性。
- 标准化: 实施公司名称、行业和国家的一致格式。
- 缺失数据: 制定处理关键字段中空值的策略。
- 日期格式: 将字符串日期转换为适当的日期格式以进行更好的分析。
- 数据完整性: 删除缺乏必要裁员信息的记录。
结论
- 该项目展示了在MySQL中进行数据清理的系统方法,实施了各种技术以确保数据质量和一致性。
- 清理后的数据集现在已正确结构化,可用于进一步分析,具有标准化的格式和减少的空值。
- SQL查询模块化,为类似的数据清理任务提供了可重用的框架。




