《统计学简易速速上手小册》第2章:数据探索与可视化(2024 最新版)

在这里插入图片描述

文章目录

  • 2.1 数据清洗和预处理
    • 2.1.1 基础知识
    • 2.1.2 主要案例:电商平台的顾客购买历史数据清洗
    • 2.1.3 拓展案例 1:社交媒体用户行为的数据清洗
    • 2.1.4 拓展案例 2:金融交易数据的预处理
  • 2.2 探索性数据分析(EDA)
    • 2.2.1 基础知识
    • 2.2.2 主要案例:电信客户流失分析
    • 2.2.3 拓展案例 1:电影评分数据分析
    • 2.2.4 拓展案例 2:网站用户行为日志分析
  • 2.3 数据可视化技术
    • 2.3.1 基础知识
    • 2.3.2 主要案例:销售数据的可视化分析
    • 2.3.3 拓展案例 1:用户行为数据的可视化
    • 2.3.4 拓展案例 2:金融市场数据的可视化

2.1 数据清洗和预处理

在数据科学的世界里,数据清洗和预处理就像是准备一顿美味佳肴之前的准备工作。没有人喜欢在沙拉里吃到沙子,对吧?这就是为什么数据清洗至关重要的原因。让我们深入了解一下如何打扫我们的“数据厨房”,确保我们的分析是基于干净、整洁的数据进行的。

2.1.1 基础知识

  • 缺失数据处理:面对缺失数据,我们有几个选择:删除含有缺失值的记录,填充缺失值(例如,使用平均数、中位数或众数),或者使用模型预测缺失值。
  • 异常值检测和处理:异常值可能会扭曲数据分析的结果。我们可以通过各种方法来识别异常值,如 IQR 方法或 Z 分数方法,并决定是删除它们、替换它们,还是保留它们。
  • 数据标准化和归一化:这些技术用于将数据缩放到一个标准范围内,特别是在处理具有不同量级的特征时非常重要。
  • 数据编码:将分类数据转换为数值数据,以便于分析。常见的方法包括独热编码(One-Hot Encoding)和标签编码(Label Encoding)。

2.1.2 主要案例:电商平台的顾客购买历史数据清洗

场景:一家电商平台想要分析其顾客的购买历史,以便进行市场细分和个性化推荐。

步骤

  1. 处理缺失值:检查顾客信息和购买记录中的缺失值,并填充或删除。
  2. 识别并处理异常值:识别不合理的购买金额(如负数或异常高的值)并进行处理。
  3. 标准化数据:对顾客的购买频率和金额进行标准化处理,以便进行比较。

Python 示例

import pandas as pd
from sklearn.preprocessing import StandardScaler# 加载数据
data = pd.read_csv('customer_purchase_history.csv')# 处理缺失值,这里我们选择填充缺失值
data.fillna(data.mean(), inplace=True)# 识别并处理异常值,这里我们将购买金额为负数的记录设为 NaN,然后填充平均值
data['purchase_amount'] = data['purchase_amount'].apply(lambda x: x if x >= 0 else None)
data.fillna(data.mean(), inplace=True)# 数据标准化
scaler = StandardScaler()
data[['purchase_frequency', 'purchase_amount']] = scaler.fit_transform(data[['purchase_frequency', 'purchase_amount']])print(data.head())

2.1.3 拓展案例 1:社交媒体用户行为的数据清洗

场景:一家社交媒体公司希望分析用户的行为数据,以优化其内容推荐算法。

步骤

  1. 处理缺失值:对用户的互动数据(如点赞、评论数)中的缺失值进行处理。
  2. 数据编码:将用户的活动类型(如“点赞”、“评论”、“分享”)转换为数值数据,以便分析。

Python 示例

from sklearn.preprocessing import OneHotEncoder# 假设 user_behavior 是包含用户行为数据的 DataFrame
user_behavior = pd.DataFrame({'activity': ['like', 'comment', 'share', 'like', 'comment'],'activity_count': [5, None, 2, 3, None]
})# 处理缺失值
user_behavior.fillna({'activity_count': user_behavior['activity_count'].mean()}, inplace=True)# 数据编码
encoder = OneHotEncoder(sparse=False)
encoded_activity = encoder.fit_transform(user_behavior[['activity']])
encoded_df = pd.DataFrame(encoded_activity, columns=encoder.get_feature_names(['activity']))# 合并编码后的 DataFrame
user_behavior_encoded = pd.concat([user_behavior, encoded_df], axis=1)print(user_behavior_encoded)

2.1.4 拓展案例 2:金融交易数据的预处理

场景:一家银行想要分析客户的交易数据,以识别欺诈行为。

步骤

  1. 异常值检测:识别异常大的交易金额,这可能表明欺诈行为。
  2. 数据归一化:对交易金额进行归一化处理,以便模型更好地处理。

Python 示例

from sklearn.preprocessing import MinMaxScaler# 假设 transactions 是包含交易金额的 DataFrame
transactions = pd.DataFrame({'amount': [50, 20000, 100, 150, 200000, 75]
})# 异常值处理:这里我们简单地使用 IQR 方法
Q1 = transactions['amount'].quantile(0.25)
Q3 = transactions['amount'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQRtransactions_filtered = transactions[(transactions['amount'] >= lower_bound) & (transactions['amount'] <= upper_bound)]# 数据归一化
scaler = MinMaxScaler()
transactions_filtered['normalized_amount'] = scaler.fit_transform(transactions_filtered[['amount']])print(transactions_filtered)

通过这些案例,我们可以看到,无论是处理缺失值、异常值,还是进行数据标准化和编码,Python 都为数据清洗和预处理提供了强大的工具和库。这些步骤虽然看起来像是厨房里的杂务,但却是确保我们的“数据佳肴”美味可口的关键所在。

在这里插入图片描述


2.2 探索性数据分析(EDA)

探索性数据分析(EDA)是数据分析过程中一步极其有趣且充满好奇的探索。这就像是数据的自我介绍,让你在深入建模和假设检验之前,先对数据有个初步的了解和感觉。EDA 的核心在于“探索”和“分析”——通过可视化和基本统计来揭示数据的隐藏结构和特征。

2.2.1 基础知识

  • 单变量分析:关注单一变量的分布情况,通过绘制直方图、箱线图等方式来观察其分布特征。
  • 多变量分析:分析变量之间的关系,例如使用散点图观察两个连续变量之间的关系,或是通过交叉表探索分类变量之间的联系。
  • 缺失值和异常值的处理:在 EDA 过程中,识别并处理缺失值和异常值,以防它们扭曲分析结果。
  • 基本统计量:计算均值、中位数、标准差等统计量,为数据分布提供量化描述。

2.2.2 主要案例:电信客户流失分析

场景:电信公司希望通过分析客户的使用数据和个人信息,来识别可能流失的客户。

步骤

  1. 单变量分析:分析客户月消费金额和使用时长的分布情况。
  2. 多变量分析:探索月消费金额与客户流失率之间的关系。
  3. 缺失值处理:检查数据集中的缺失值并决定如何处理它们。

Python 示例

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns# 加载数据集
data = pd.read_csv('telecom_churn_data.csv')# 单变量分析:月消费金额的分布
plt.figure(figsize=(8, 6))
sns.histplot(data['MonthlyCharges'], kde=True)
plt.title('Distribution of Monthly Charges')
plt.xlabel('Monthly Charges')
plt.ylabel('Frequency')
plt.show()# 多变量分析:月消费金额与客户流失的关系
plt.figure(figsize=(8, 6))
sns.boxplot(x='Churn', y='MonthlyCharges', data=data)
plt.title('Monthly Charges by Churn Status')
plt.xlabel('Churn Status')
plt.ylabel('Monthly Charges')
plt.show()

2.2.3 拓展案例 1:电影评分数据分析

场景:一个电影推荐系统希望通过分析电影的评分数据来提高推荐质量。

步骤

  1. 单变量分析:分析电影评分的分布情况。
  2. 多变量分析:探索电影类型与评分之间的关系。

Python 示例

# 加载数据集
movie_data = pd.read_csv('movies_ratings.csv')# 单变量分析:电影评分的分布
plt.figure(figsize=(8, 6))
sns.histplot(movie_data['rating'], bins=20, kde=True)
plt.title('Distribution of Movie Ratings')
plt.xlabel('Rating')
plt.ylabel('Frequency')
plt.show()# 多变量分析:电影类型与评分的关系
plt.figure(figsize=(12, 6))
sns.boxplot(x='genre', y='rating', data=movie_data)
plt.xticks(rotation=45)
plt.title('Movie Ratings by Genre')
plt.xlabel('Genre')
plt.ylabel('Rating')
plt.show()

2.2.4 拓展案例 2:网站用户行为日志分析

场景:一个网站运营团队想要通过分析用户的访问日志来优化网站布局和内容。

步骤

  1. 单变量分析:分析用户访问时长的分布情况。

  2. 多变量分析:探索用户访问时长与访问页面数量之间的关系。

Python 示例

# 加载数据集
web_log_data = pd.read_csv('web_user_log.csv')# 单变量分析:用户访问时长的分布
plt.figure(figsize=(8, 6))
sns.histplot(web_log_data['visit_duration'], bins=30, kde=True)
plt.title('Distribution of Visit Duration')
plt.xlabel('Visit Duration (seconds)')
plt.ylabel('Frequency')
plt.show()# 多变量分析:用户访问时长与访问页面数量的关系
plt.figure(figsize=(8, 6))
sns.scatterplot(x='visit_duration', y='pages_visited', data=web_log_data)
plt.title('Visit Duration vs. Pages Visited')
plt.xlabel('Visit Duration (seconds)')
plt.ylabel('Pages Visited')
plt.show()

通过这些案例,我们可以看到 EDA 如何帮助我们从不同角度理解数据,揭示数据背后的故事。无论是通过单变量还是多变量分析,EDA 都是数据分析过程中不可或缺的一步,为后续的深入分析和建模打下坚实的基础。

在这里插入图片描述


2.3 数据可视化技术

数据可视化是将复杂的数据集转换成图形或图像形式的过程,它是数据分析不可或缺的一部分。通过可视化,我们可以直观地看到数据的模式、趋势和异常值,这有助于我们更快地理解数据并做出决策。

2.3.1 基础知识

  • 基本图表:如条形图、折线图、散点图等,适用于展示数据的分布、趋势和关系。
  • 复杂图表:如箱线图、热力图、树状图等,用于展示数据的深层结构和多维度关系。
  • 可视化库:Python 提供了多个强大的可视化库,如 Matplotlib、Seaborn、Plotly,它们支持创建从简单到复杂的各种图表。
  • 可视化原则:在设计图表时,应保持简洁、明确的目标,合理使用颜色和标记,确保图表易于理解且信息量大。

2.3.2 主要案例:销售数据的可视化分析

场景:一家公司希望通过可视化分析其产品的销售数据,以识别销售趋势和季节性模式。

步骤

  1. 使用折线图展示销售趋势:折线图能清晰展示销售额随时间的变化趋势。
  2. 使用条形图比较不同产品的销售量:条形图适合比较类别数据。
  3. 使用热力图分析产品销售的季节性模式:热力图可以展示销售量在不同月份的分布情况。

Python 示例

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns# 加载数据
sales_data = pd.read_csv('sales_data.csv')# 折线图展示销售趋势
plt.figure(figsize=(10, 6))
plt.plot(sales_data['Month'], sales_data['Sales'])
plt.title('Sales Trend Over Time')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.xticks(rotation=45)
plt.show()# 条形图比较不同产品的销售量
plt.figure(figsize=(10, 6))
sns.barplot(x='Product', y='Sales', data=sales_data)
plt.title('Sales by Product')
plt.xlabel('Product')
plt.ylabel('Sales')
plt.show()# 热力图分析产品销售的季节性模式
sales_pivot = sales_data.pivot("Month", "Product", "Sales")
plt.figure(figsize=(12, 6))
sns.heatmap(sales_pivot, annot=True, fmt=".1f", cmap='YlGnBu')
plt.title('Seasonal Sales Patterns by Product')
plt.xlabel('Product')
plt.ylabel('Month')
plt.show()

2.3.3 拓展案例 1:用户行为数据的可视化

场景:一款应用希望通过可视化用户的活跃时间和行为模式,来优化用户体验。

步骤

  1. 使用散点图展示用户活跃时间分布
  2. 使用箱线图分析用户行为的离散程度

Python 示例

# 假设 user_data 包含用户行为数据
user_data = pd.read_csv('user_behavior.csv')# 散点图展示用户活跃时间分布
plt.figure(figsize=(10, 6))
sns.scatterplot(x='Hour', y='ActivityCount', data=user_data)
plt.title('User Activity Distribution by Hour')
plt.xlabel('Hour of Day')
plt.ylabel('Activity Count')
plt.show()# 箱线图分析用户行为的离散程度
plt.figure(figsize=(10, 6))
sns.boxplot(x='ActivityType', y='ActivityCount', data=user_data)
plt.title('Dispersion of User Behavior')
plt.xlabel('Type ofActivity')
plt.ylabel('Activity Count')
plt.show()

2.3.4 拓展案例 2:金融市场数据的可视化

场景:金融分析师需要可视化股票价格和交易量的变化,以便进行市场分析。

步骤

  1. 使用折线图展示股票价格变化趋势
  2. 使用条形图展示交易量变化

Python 示例

# 假设 stock_data 包含股票市场数据
stock_data = pd.read_csv('stock_data.csv')# 折线图展示股票价格变化趋势
plt.figure(figsize=(10, 6))
plt.plot(stock_data['Date'], stock_data['Price'])
plt.title('Stock Price Trend')
plt.xlabel('Date')
plt.ylabel('Price')
plt.xticks(rotation=45)
plt.show()# 条形图展示交易量变化
plt.figure(figsize=(10, 6))
plt.bar(stock_data['Date'], stock_data['Volume'])
plt.title('Trading Volume Over Time')
plt.xlabel('Date')
plt.ylabel('Volume')
plt.xticks(rotation=45)
plt.show()

通过这些案例,我们可以看到数据可视化在揭示数据趋势、模式和异常值方面的强大能力。无论是分析销售数据、用户行为还是金融市场,适当的可视化技术都能帮助我们更加直观和有效地理解数据,为决策提供有力支持。

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

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

相关文章

项目02《游戏-13-开发》Unity3D

基于 项目02《游戏-12-开发》Unity3D &#xff0c; 任务 &#xff1a;宠物系统 及 人物头像血条 首先在主面板MainPanel预制体中新建一个Panel&#xff0c; 命名为PlayerInfo 新建Image&#xff0c;作为头像 新建Slider&#xff0c;作为血条 对Panel组件添加一个水…

Java核心设计模式:代理设计模式

一、生活中常见的代理案例 房地产中介&#xff1a;客户手里没有房源信息&#xff0c;找一个中介帮忙商品代购&#xff1a;代理者一般有好的资源渠道&#xff0c;降低购物成本&#xff08;如海外代购&#xff0c;自己不用为了买东西出国&#xff09; 二、为什么要使用代理 对…

编程揭秘刘谦春晚魔术(约瑟夫环问题Josephus)

哈喽~各位过年好哇&#xff01; 相信大家应该都看了春晚刘谦表演的魔术吧&#xff0c;大家当时有没有跟着做成功呢&#xff0c;其实背后的原理很简单&#xff0c;现在我们来逐句分析&#xff0c;一起探索其中的原理吧&#xff01; 首先&#xff0c;有四张牌假设为1&#xff0…

【Rust】——猜数游戏

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

MySQL篇----第十七篇

系列文章目录 文章目录 系列文章目录前言一、对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题二、解释 MySQL 外连接、内连接与自连接的区别三、Myql 中的事务回滚机制概述前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分…

redis之布隆过滤

目录 1、redis之布隆过滤 2、布隆过滤器原理 3、布隆过滤器使用步骤 初始化bitmap 添加占坑位 判断是否存在圜 1、redis之布隆过滤 布隆过滤&#xff1a;有一个初值都为0的bit数组和多个哈希函数构成&#xff0c;用来快速判断集合中是否存在某个元素。目的&#xff1a;减…

顶级思维方式——认知篇三(财富与金钱)

目录 1、 什么是财富/财富的定义&#xff1f; 2、财富的影响 3、 财富意味着什么&#xff1f; 4、财富与幸福的关系 5、物质财富如何使用才有实际意义&#xff1f; 6、金钱的运作方式 7、【物质财富自由】后的选择 1、 什么是财富/财富的定义&#xff1f; 财富是一个多维…

c++之说_14|左值引用与右值引用

提起左右值引用我就头疼 左值&#xff1a; 1、在内存中开辟了空间的便叫左值 2、左值不一定可以赋值 如字符串常量 3、左值可以取地址 右值&#xff1a; 1、在内存中没有开辟空间的 2、右值无法取地址 如&#xff1a; 立即数&#xff08;1&#xff0c;2&#xff0c;3…

移动端web开发布局

目录 flex布局&#xff1a; flex布局父项常见属性&#xff1a; flex布局子项常见属性&#xff1a; REM适配布局&#xff1a; 响应式布局&#xff1a; flex布局&#xff1a; 需要先给父类盒子设置display&#xff1a;flex flex是flexiblebox的缩写&#xff0c;意为"弹…

面试经典150题——三数之和

​"The road to success and the road to failure are almost exactly the same." - Colin R. Davis 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力方法 因为三个数相加为0&#xff0c;那么说明其中两个加数的和与另一个加数为相反数则满足题意。所以可以得到…

猫头虎分享已解决Bug || IndexError: index 3 is out of bounds for axis 0 with size 3

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

解决挂梯子 无法正常上网 的问题

方法&#xff1a; 打开 控制面板 &#x1f449; 网络和Internet &#x1f449; Internet选项 &#x1f449; 连接 &#x1f449; 局域网设置 &#x1f449; 代理服务器 &#x1f449; 取消选项 有问题可参考下图

案例:三台主机实现 级联复制

介绍&#xff1a;级联复制架构 级联复制架构 是一种特殊的主从结构&#xff0c;之前聊到的几种主从结构都只有两层&#xff0c;但级联复制架构中会有三层&#xff0c;关系如下&#xff1a; 也就是在级联复制架构中&#xff0c;存在两层从库&#xff0c;这实际上属于一主多从架…

Failed to construct ‘RTCIceCandidate‘ sdpMid and sdpMLineIndex are both null

最近在搞webrtc&#xff0c;在编写函数处理远端传递来的candidate时报错了&#xff0c;具体信息如下。国内关于webrtc的资料很少&#xff0c;所以去国外社区转了一圈&#xff0c;回来记录一下报错的解决方案 其实这个bug也好解决&#xff0c;根据报错信息可以判断是RTCIceCand…

C语言第二十二弹---指针(六)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1. 回调函数是什么&#xff1f; 2、qsort使用举例 2.1、使用qsort函数排序整型数据 2.2 使用qsort排序结构体数据 3、qsort函数的模拟实现 总结 1. 回…

龙年,大吉

&#xff08;1&#xff09; 没有成功的企业&#xff0c;只有时代的企业。这就是人们老说的&#xff1a;天道酬勤。虽然这句话被人说滥了&#xff0c;虽然这句话被人说到反感了&#xff0c;但事实就是这样。 得道者多助。 &#xff08;2&#xff09; 人有三大运、三小运。 三大运…

Python基础语法(内置Python, pycharm配置方式)

一.工具安装与配置 1.Python解释器的安装 官网网址:https://www.python.org/ 选择downloads即可(Windows用户点击Windows, 苹果用户点击macOS) 找到最新版本, 并选择 Download Windows installer (64-bit) 下载完成后可在得到一个安装包进行安装(安装时间较长) 安装完成后…

【JMX】JAVA监控的基石

目录 1.概述 2.MBean 2.1.Standard MBean 2.2.Dynamic MBean 2.3.Model Bean 2.4.Dynamic MBean和Model Bean的区别 2.5.MXBean 2.6.Open Bean 3.控制台 1.概述 什么是JMX&#xff0c;首先来看一段对话&#xff1a; Java Management Extensions&#xff08;JMX&#…

【Wio Terminal教程】使用LCD屏幕(4)

使用LCD屏幕&#xff08;4&#xff09; 一、TFT LCD的API例子1、实用图形2、数据显示3、字体4、作为背景显示 二、如何在Wio Terminal上使用LVGL图形库1、安装Seeed_Arduino_LvGL2、示例1. Bench Mark2. Stress Test3.资源 一、TFT LCD的API例子 本节为TFT LCD库的例子提供了一…

ERROR: Could not build wheels for roslz4

Python bugs 最近在安装python的rosbag包时出现了诸多问题&#xff0c;特别记录下。 python版本&#xff1a;3.11 系统版本&#xff1a;Windows10 x86_64 使用conda虚拟环境进行包管理。 运行命令 pip3 install roslz4 --extra-index-url https://rospypi.github.io/simple…