【数据分析】评估清理数据实战【淘宝母婴购物数据集】

news2024/11/27 1:16:30

在这里插入图片描述

概述

Ali_Mum_Baby 是一个数据集,其中包含 900 多万条儿童信息(生日和性别),这些信息由消费者提供,他们分享这些信息是为了获得更好的推荐或搜索结果。

数据说明

它包含消费者在淘宝或天猫上提供的 9,000,000 多个儿童的生日和性别

列名描述
user_id用户ID (Bigint)。
birthday儿童生日(例如:20130423)。
gender儿童性别(“0” 表示女性,“1” 表示男性,“2” 表示未知)。

Tianchi_mum_baby_trade_history

本表包含淘宝会员的历史交易信息。

列名描述
item_id商品ID (Bigint)。
user_id用户ID (Bigint)。
cat_id类别ID (Bigint)。
cat1根类别ID (Bigint)。
property相应商品的属性 (String)。
buy_mount购买数量 (Bigint)。
day时间戳。

典型研究课题

  • 根据父母的购买行为预测子女的年龄
  • 根据用户子女的信息(年龄、性别等)预测用户会购买何种商品。

具体步骤

  1. **数据准备:**创建一个单独的文件夹来存放数据集和Notebook,保持文件结构的整洁。

    在这里插入图片描述

  2. 数据读取:

    • 使用 pandas 库的 read_csv 函数读取CSV文件并存储在变量 original_data 中。
    • 使用 head() 函数预览数据的前几行。
    import pandas as pd
    
    original_data = pd.read_csv('data/(sample)sam_tianchi_mum_baby_trade_history.csv')
    
    original_data.head()
    

    在这里插入图片描述

  3. 数据评估:

    • 使用 info() 方法了解数据的基本信息,包括各列的非空值数量和数据类型

      original_data.info()
      
      ## print
      <class 'pandas.core.frame.DataFrame'>
      RangeIndex: 29971 entries, 0 to 29970
      Data columns (total 7 columns):
       #   Column      Non-Null Count  Dtype 
      ---  ------      --------------  ----- 
       0   user_id     29971 non-null  int64 
       1   auction_id  29971 non-null  int64 
       2   cat_id      29971 non-null  int64 
       3   cat1        29971 non-null  int64 
       4   property    29827 non-null  object
       5   buy_mount   29971 non-null  int64 
       6   day         29971 non-null  int64 
      dtypes: int64(6), object(1)
      memory usage: 1.6+ MB
      
    • 对数据进行初步的结构和内容评估:

      • 整洁度:每列是一个变量,每行是一个观察值。
      • 缺失数据:使用 isnull() 和布尔索引筛选出缺失值。
      • 重复数据:检查唯一标识符的重复情况。
      • 不一致数据:使用 value_counts() 方法检查某些列的值是否一致。
      • 无效或错误数据:使用 describe() 方法检查数值列是否存在异常值。
      # 使用 isnull() 检查每个值是否为缺失值
      null_data = original_data.isnull()
      
      null_data.head()
      

      在这里插入图片描述

      null_counts = original_data.isnull().sum()
      null_counts
      

      在这里插入图片描述

  4. 数据清理

    • 缺失值处理

      # 处理缺失值
      data = original_data.dropna() # 删除包含缺失值的行
      
      null_counts = data.isnull().sum() # 观察处理后的数据
      null_counts
      

      在这里插入图片描述

    • 重复行处理

      # 删除重复数据
      data = data.drop_duplicates()
      
    • 数据类型转换

      # 转换数据类型
      data['user_id'] = data['user_id'].astype(str)
      data['auction_id'] = data['auction_id'].astype(str)
      data['cat_id'] = data['cat_id'].astype(str)
      data['cat1'] = data['cat1'].astype(str)
      
      data['day'] = pd.to_datetime(data['day'], format='%Y%m%d')
      
      data.head()
      

      在这里插入图片描述

    • 列名规范

      # 规范化列名
      data.columns = [col.lower() for col in data.columns]
      
      cleaned_data = data
      
    • 保存清洗后的数据

      # 保存清洗后的数据到新文件
      cleaned_file_path = 'data/cleaned_data.csv'
      cleaned_data.to_csv(cleaned_file_path, index=False)
      
      cleaned_data.info()
      
      ## print
      <class 'pandas.core.frame.DataFrame'>
      Index: 29827 entries, 0 to 29970
      Data columns (total 7 columns):
       #   Column      Non-Null Count  Dtype         
      ---  ------      --------------  -----         
       0   user_id     29827 non-null  object        
       1   auction_id  29827 non-null  object        
       2   cat_id      29827 non-null  object        
       3   cat1        29827 non-null  object        
       4   property    29827 non-null  object        
       5   buy_mount   29827 non-null  int64         
       6   day         29827 non-null  datetime64[ns]
      dtypes: datetime64[ns](1), int64(1), object(5)
      memory usage: 1.8+ MB
      

获取数据

常见的数据格式

json【JavaScript Object Notation】

# json 对象
{
	"id" : "1",
	"type": "article",
	"title": "working with JSON data",
	"created": "2099-12-18T14:56:29.000Z"
}

# json 数组
[
	{
	"title": "A Light in the Attic",
	"price": "£51.77"
	},
	{
	"title": "Tipping the Velvet",
	"price": "£53.74"]

通过python读取和解析json——一键将格式转换为DataFrame

import numpy as np

df = pd.read_json("./xxx.json")

CSV【Comma-Separated Values】

姓名,考试1,考试2,考试3
小陈,85,95,92
小李,91,92,94
小王,86,81,89
小张,79,89,95
小赵,96,91,91
小周,81,89,92
import pandas as pd
df = pd.read_csv("xxx.csv")
df.head(3)

评估数据

具体分为两个方面:数据结构和数据内容。

数据结构

  1. 每列是一个变量:每列数据应该代表一个独立的变量。
  2. 每行是一个观察值:每行数据应该代表一个独立的观察值。
  3. 每个单元格是一个值:每个单元格应该只有一个值,不包含多个信息。

数据内容

  1. 丢失数据:数据中有空缺值,可能会影响分析结果。
  2. 重复数据:数据中有重复的记录,可能是数据录入错误。
  3. 不一致数据:数据中存在不同表示方式的相同信息,如单位不一致、全称与缩写混用等。
  4. 无效或错误数据:数据不符合逻辑或明显错误,例如负数的身高。

数据清洁和整洁的重要性

提供了一些方法来评估和检测数据集中的问题。以下是段落的总结和关键点:

  1. 数据整洁性 vs. 数据干净度
    • 数据的整洁度(结构性问题)比干净度(内容性问题)更容易被发现和评估。整洁度问题类似于书架是否整齐,而干净度问题则类似于书页是否有污渍。
    • 每列只能表示一个变量,每行是一个观察值,每个单元格是一个值是数据整洁的基本规则。
  2. 使用 DataFrame 的 info 方法
    • info 方法可以提供数据概况信息,包括列名对应的数据类型,有助于快速了解数据结构。
    • 列名可以透露关于数据结构的信息,例如带年份的列名可能违反了每列只能表示一个变量的规则。
  3. 查看数据部分内容
    • 使用 head 或 tail 方法查看数据的开头或结尾部分,或者使用 sample 方法随机查看部分数据。
    • 如果数据列数太多或值太长,可以通过 set_option 方法调整显示上限。
  4. 检测空缺值
    • info 方法可以显示每列非空缺值的数量,通过与行数对比可发现空缺值。
    • isnull 方法可以检查值是否为空缺值,并返回布尔值组成的 Series 或 DataFrame。
    • sum 方法可以对布尔值进行求和,以计算空缺值的数量。
    • 通过条件筛选方法,可以提取出包含空缺值的行。
  5. 检测重复数据
    • duplicated 方法可以检查 Series 或 DataFrame 中的重复值。对 DataFrame 调用时,只有当整行数据完全一样时才会标记为重复。
    • 可以使用 subset 参数指定需要检查重复的多个变量。
  6. 检测不一致数据和无效数据
    • 使用 value_counts 方法查看各个值的个数,帮助发现同一目标的不同表示。
    • 使用 sort_values 方法和 describe 方法可以帮助发现异常值或离谱的数据。
  7. 评估数据的目的是为了采取进一步行动
    • 数据评估的最终目的是为了清洗和改进数据质量。

数据清洗

  1. 检查和处理索引或列名
    • 确保索引或列名有意义。如果索引或列名混乱,应该对它们进行重命名或重新排序,以便理解数据。
  2. 处理结构性问题
    • 确保每列是一个变量,每行是一个观察值,每个单元格是一个值。
    • 如果每列是观察值,每行是变量,需要对行和列进行转置。
    • 如果某列包含了多个变量,需要对列进行拆分,确保每列只包含一种变量。
    • 如果每行包含了多个观察值,需要对行进行拆分,确保每行只包含一个观察值。
    • 结构性问题处理后,数据通常会从宽数据变成长数据,以便后续高效的程序处理。
  3. 处理内容性问题
    • 丢失数据处理
      • 已知实际值:可以手动填充。
      • 丢失值不影响分析:可以忽略丢失值。
      • 关键变量丢失:删除包含空缺值的行。
      • 填充值:使用平均数、中位数、众数等进行填充。
    • 重复数据处理:找到重复数据后删除,避免影响分析结论。
    • 不一致数据处理:统一同一含义的不同表达方式,保留一种表达方式并替换其他表达方式。
    • 无效或错误数据处理
      • 删除无效或错误数据,或替换成其他值(如当前平均值)。
  4. 编程相关的其他处理
    • 数据类型转换
      • 将不适合的数值类型(如手机号)转换为字符串类型。
      • 将适合逻辑判断的字符串类型(如"是"和"否")转换为布尔值(True和False),以便后续分析。

示例处理方式:

  • 结构性问题示例
    • 转置数据:当行和列表示的内容不符合预期时,将其转置。
    • 拆分列:将包含多个变量的列拆分成多个单一变量的列。
    • 拆分行:将包含多个观察值的行拆分成单一观察值的行。
  • 内容性问题示例
    • 丢失数据处理
      • 填充已知值:手动更新表格数据。
      • 忽略丢失值:分析时自动忽略。
      • 删除行:移除包含空缺值的行。
      • 填充值:用统计方法(如平均数)填充空缺值。
    • 删除重复数据:删除发现的重复行。
    • 统一不一致数据:对同一含义的不同表达方式进行统一。
    • 处理无效数据:删除或替换不符合常理的值。
  • 编程相关处理示例
    • 数据类型转换:将手机号从整数类型转换为字符串类型,将“是”和“否”转换为布尔值。

如何使用 pandas 库来清理和重命名 DataFrame 的索引和列名

重命名索引和列名

  1. 使用 rename 方法
    • 重命名索引:使用 index 参数传入一个字典,键为原索引名,值为新索引名。
    • 重命名列名:使用 columns 参数传入一个字典,键为原列名,值为新列名。
  2. 两种重命名方法
    • 返回新 DataFrame:默认情况下,rename 方法返回一个修改后的新 DataFrame,但不改变原始 DataFrame。
    • 原地修改:通过传入 inplace=True 参数,直接修改原始 DataFrame 而不返回新 DataFrame。
  3. 批量重命名
    • 传入字典:适用于少量列或索引的重命名。
    • 传入函数:适用于批量重命名。可以传入一个函数来操作列名或索引。例如,将所有列名变为大写,可以使用 str.upper 方法。
  4. 字符串操作方法
    • Pandas 提供了许多针对字符串 Series 的操作方法,可以通过 pandas.Series.str 来访问这些方法,如 upperlower 等。

其他索引相关操作

  1. 设置新索引
    • 使用 set_index 方法,通过传入列名来设置新的索引,返回一个新的 DataFrame。
  2. 重设索引
    • 使用 reset_index 方法,将索引重设为初始默认位置索引,并将原索引值变为一列,返回一个新的 DataFrame。
  3. 排序索引和列名
    • 使用 sort_index 方法对索引或列名进行排序。
    • 默认 axis=0 对索引排序,axis=1 对列名排序。
  4. 注意事项
    • 所有这些方法(renameset_indexreset_indexsort_index)默认不会修改原始 DataFrame,而是返回一个新的 DataFrame。
    • 使用 inplace=True 参数可以直接修改原始 DataFrame,但这时方法不会返回新的 DataFrame。

实践示例

以下是一些具体操作示例:

import pandas as pd

# 创建示例 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

# 重命名列名
df_renamed = df.rename(columns={'A': 'Alpha', 'B': 'Beta'})

# 重命名索引
df_renamed_index = df.rename(index={0: 'first', 1: 'second'})

# 批量重命名列名为大写
df_upper = df.rename(columns=str.upper)

# 设置新索引
df_set_index = df.set_index('A')

# 重设索引
df_reset_index = df_set_index.reset_index()

# 对索引排序
df_sorted_index = df.sort_index()

# 对列名排序
df_sorted_columns = df.sort_index(axis=1)

# 原地修改示例
df.rename(columns={'A': 'Alpha'}, inplace=True)
df.set_index('Alpha', inplace=True)

这些操作可以帮助你更好地管理和清理 DataFrame 的索引和列名。

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

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

相关文章

新港海岸NCS8822 低功耗DP转VGA 分辨率支持1920*1200*60HZ

NCS8822描述&#xff1a; NCS8822是一个低功耗显示端口到vga转换器。NCS8822集成了一个与DP1.2兼容的接收器和一个高速三通道视频DAC。对于DP1.2输入&#xff0c;NCS8822支持1车道/2车道&#xff0c;也支持车道交换功能。对于VGA输出NCS8822&#xff0c;在60Hz帧率下对WUXGA&a…

【Linux系统】CUDA的安装与graspnet环境配置遇到的问题

今天在安装环境时遇到报错&#xff1a; The detected CUDA version (10.1) mismatches the version that was used to compile PyTorch (11.8). Please make sure to use the same CUDA versions. 报错原因&#xff1a;安装的cuda版本不对应&#xff0c;我需要安装cuda的版本…

西门子PLC1200--与电脑S7通讯

硬件构成 PLC为西门子1211DCDCDC 电脑上位机用PYTHON编写 二者通讯用网线&#xff0c;通讯协议用S7 PLC上的数据 PLC上的数据是2个uint&#xff0c;在DB1&#xff0c;地址偏移分别是0和2 需要注意的是DB块要关闭优化的块访问&#xff0c;否则是没有偏移地址的 PLC中的数据内…

千万不能踏入的渠道管理五大误区!【附策略】

一、引言 在当今激烈的市场竞争环境中&#xff0c;有效的渠道管理是企业获得竞争优势的关键。然而&#xff0c;在实践过程中&#xff0c;不少企业因陷入管理误区而影响了市场拓展和品牌建设。本文旨在揭示渠道管理中常见的五大误区&#xff0c;并提供避免策略&#xff0c;帮助…

H2 Database Console未授权访问漏洞封堵

背景 H2 Database Console未授权访问&#xff0c;默认情况下自动创建不存在的数据库&#xff0c;从而导致未授权访问。各种未授权访问的教程&#xff0c;但是它怎么封堵呢&#xff1f; -ifExists 很简单&#xff0c;启动参数添加 -ifExists &#xff0c;它的含义&#xff1a…

《梦醒蝶飞:释放Excel函数与公式的力量》8.7 STDEV函数

8.7 STDEV函数 STDEV函数是Excel中用于计算一组数值的标准偏差的函数。标准偏差是统计学中的一个重要指标&#xff0c;用于衡量数据集中各数值偏离平均值的程度。它反映了数据的离散程度或波动大小。 8.7.1 函数简介 STDEV函数用于返回样本数据的标准偏差&#xff0c;标准偏…

巨头们涌入的医疗大模型,何时迎来最好的商业时代?_google医疗大模型 医疗大模型

当下极为火爆的大模型&#xff0c;在医疗赛道同样炙手可热。谷歌刚刚发布了准确率达 91.1%、性能远超 GPT-4 系列的多模态医学大模型 Med-Gemini&#xff0c;国内市场亦很热闹。自 2023 年以来&#xff0c;百度、腾讯、京东等诸多大厂都相继加码医疗大模型领域&#xff0c;与医…

Zabbix动作与媒介

目录 前言 1. 动作的基本概念 2. 动作的常见用途 一. 环境准备 二. 创建动作 三. 添加媒介 前言 在 Zabbix 中&#xff0c;动作&#xff08;Actions&#xff09;用于在特定事件发生时执行一系列预定义的操作&#xff0c;比如发送通知、执行脚本等。动作通常与触发器&…

竹云实力入选《现代企业零信任网络建设应用指南报告》代表性厂商

2024年7月3日&#xff0c;国内网络安全媒体安全牛正式发布《现代企业零信任网络建设应用指南报告(2024版)》。竹云凭借在零信任领域创新性的产品方案和优异的市场表现&#xff0c;实力入选代表性厂商。 伴随着云计算、AI、大数据等技术的发展&#xff0c;远程办公、业务协同、…

rs轨迹校验

最近发现有些网站的rs似乎上了轨迹校验&#xff0c;附图&#xff1a; 写了个解rscookie的插件&#xff0c;可以精准看到rs更改了那些校验点&#xff0c;需要做什么处理&#xff0c;就很舒服 有需要轨迹代码或者瑞数相关的可以联系 let v huaqu0727

STM32智能家居安防系统教程

目录 引言环境准备智能家居安防系统基础代码实现&#xff1a;实现智能家居安防系统 4.1 数据采集模块 4.2 数据处理与分析 4.3 控制系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;安防管理与优化问题解决方案与优化收尾与总结 1. 引言 智能家居安防系统利用STM32嵌…

【python基础】—如何理解安装程序时要配置Widows和DOS操作系统中的path环境变量?

文章目录 前言一、环境变量是什么&#xff1f;二、为什么需要设置环境变量&#xff1f;三、配置anaconda的环境变量 前言 在安装一些程序的时候&#xff0c; 我们总是需要将安装路径配置到正在使用电脑的环境变量里。为什么要进行这一步呢&#xff1f;本文主要解释Widows和DOS…

【qt】如何通过域名获得IP地址?

域名是什么呢?像www.baidu.com的baidu.com就是域名. 域名相当于是网站的门牌号. 域名可以通过 DNS 解析将其转换为对应的 IP 地址. 用我们获取IP地址的方式就可以,但是现在没有可以用另一种方法. 槽函数的实现: void MainWindow::lookupHost(const QHostInfo &hostInf…

【docker】容器内配置环境变量

背景&#xff1a; 我要把下面的环境变量写到bash脚本里&#xff0c;起名叫environment_start.sh。 目的&#xff1a; 用于每次进入容器dev_into.sh的时候&#xff0c;让系统获取到环境变量。 操作步骤&#xff1a; 先在容器外找个合适的位置写环境变量bash脚本&#xff0c…

从0到1构建渠道运营体系:实战案例与策略指南

引言 在当今竞争激烈的市场环境中&#xff0c;有效的渠道运营是企业实现产品或服务快速触达目标用户、提升市场份额的关键。从零开始构建一个高效的渠道运营体系&#xff0c;不仅需要深思熟虑的策略规划&#xff0c;还需要灵活应变的实战操作。本文将结合实战案例&#xff0c;…

特殊用途二极管+二极管故障检测+三极管(BJT)的工作原理+定时器的使用(小灯定时闪烁实现)

2024-7-5&#xff0c;星期五&#xff0c;17:27&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。今天没有什么特殊的事情发生&#xff0c;继续学习啦&#xff0c;加油加油&#xff01;&#xff01;&#xff01; 今日完成模电自选教材第二章内容的学习&#xff…

ES集成到ambari中出现的常见问题归总

1.elasticesearch用户名组的问题 KeyError: uelasticsearch Error: Error: Unable to run the custom hook script [/usr/bin/python, /var/lib/ambari-agent/cache/stack-hooks/before-ANY/scripts/hook.py, ANY, /var/lib/ambari-agent/data/command-102.json, /var/lib/amb…

QT实现GIF动图显示(小白版,可直接copy使用)

需要你自己提前设置好动图的位置&#xff0c;本例中存放于"/Users/PLA/PLA/PLA.gif widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMovie> #include <QLabel>class Widget : public QWidget {Q_OBJECTpublic:explicit Wid…

快递物流运输中的RFID智能锁控应用方案

一、物流货运管理的痛点分析 1.1 货物安全与监控难题 物流货运过程中&#xff0c;货物安全是首要关注的问题。传统的锁控方式存在诸多不足&#xff0c;例如易被撬锁、监控盲点以及难以实时追踪货物状态。据统计&#xff0c;每年因货物丢失或损坏导致的经济损失高达数十亿美元…

开源数字智能交互对话系统;通过图片生成高效肖像动画;在 Azure 中一键部署知识图谱;开源ChatGPT国内可用免费转发API

✨ 1: Digital Human Intelligent Dialogue System Linly-Talker是一个集成多种AI技术、支持图像和语音的智能交互对话系统。 Digital Human Intelligent Dialogue System&#xff0c;即数字人智能对话系统&#xff0c;是一个集成了最新人工智能技术的创新平台。该系统通过整…