处理异常值和缺失值及自动化探索性数据分析
立即解锁
发布时间: 2025-09-03 00:37:34 阅读量: 3 订阅数: 11 AIGC 


Python探索性数据分析实战
### 处理异常值和缺失值及自动化探索性数据分析
在数据分析过程中,异常值和缺失值是常见的问题,需要进行有效的处理。同时,自动化探索性数据分析(Automated EDA)可以帮助我们快速从大量数据中获取有价值的信息。本文将详细介绍处理缺失值的方法以及几种自动化探索性数据分析的技术。
#### 缺失值的类型
缺失值主要分为以下两种类型:
- **随机缺失(Missing at Random,MAR)**:数据缺失的概率可以由数据集中的其他变量解释。例如,一些蓝领工人在填写收入调查问卷时拒绝提供收入,因为他们认为自己的收入很低;而一些白领工人可能因为觉得自己的收入很高而拒绝提供。在分析这类调查时,收入变量中的缺失值将与调查中的职业类别变量或行业变量相关。
- **非随机缺失(Missing not at Random,MNAR)**:数据缺失的概率无法由数据集中的其他变量解释,而是与一些未观察到的值有关。这种类型的缺失通常存在系统性模式,处理起来非常具有挑战性。例如,在民意调查中,由于有偏差的抽样机制,一部分人被完全排除在外。
#### 识别缺失值
我们将使用阿姆斯特丹房价数据来演示如何识别和处理缺失值。首先,需要安装`missingno`库:
```bash
pip install missingno
```
以下是识别缺失值的具体步骤:
1. **导入相关库**:
```python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import missingno as msno
```
2. **加载数据并选择相关列**:
```python
houseprice_data = pd.read_csv("data/HousingPricesData.csv")
houseprice_data = houseprice_data[['Price', 'Area', 'Room']]
```
3. **查看数据集的基本信息**:
```python
houseprice_data.head()
houseprice_data.shape
```
输出结果如下:
```plaintext
Price Area Room
0 685000.0 64 3
1 475000.0 60 3
2 850000.0 109 4
3 580000.0 128 6
4 720000.0 138 5
(924, 3)
```
4. **使用`isnull`方法识别缺失值**:
```python
houseprice_data.isnull().sum()
```
输出结果显示`Price`列有 4 个缺失值,`Area`和`Room`列没有缺失值:
```plaintext
Price 4
Area 0
Room 0
```
5. **使用`info`方法识别缺失值**:
```python
houseprice_data.info()
```
输出结果如下:
```plaintext
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 924 entries, 0 to 923
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Price 920 non-null float64
1 Area 924 non-null int64
2 Room 924 non-null int64
dtypes: float64(1), int64(2)
memory usage: 21.8 KB
```
6. **使用`missingno`库的`bar`方法识别缺失值**:
```python
msno.bar(houseprice_data)
```
该方法会生成一个柱状图,显示每个变量中完整值的数量。
7. **使用`missingno`库的`matrix`方法识别缺失值**:
```python
msno.matrix(houseprice_data)
```
该方法会生成一个矩阵,显示每个变量中的完整值和缺失值。
#### 处理缺失值的方法
处理缺失值的方法主要有以下几种:
- **删除缺失值**:
- **列表删除(Listwise Deletion)**:删除包含一个或多个缺失值的所有观测值,也称为完全案例分析。
- **成对删除(Pairwise Deletion)**:仅使用每个变量的可用数据进行分析,包含缺失值的观测值也会参与分析。对于存在缺失值的变量,跳过该缺失值;对于没有缺失值的变量,使用其现有值进行分析。
- **删除包含缺失值的整个列**:当整个列都充满缺失值或列中的大多数值都缺失时,可以考虑使用这种方法。
以下是使用`pandas`库删除缺失值的具体步骤:
1. **导入相关库**:
```python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
```
2. **加载数据并选择相关列**:
```python
houseprice_data = pd.read_csv("data/HousingPricesData.csv")
houseprice_data = houseprice_data[['Price', 'Area', 'Room']]
```
3. **查看数据集的基本信息**:
```python
houseprice_data.head()
houseprice_data.shape
```
4. **识别缺失值**:
```python
houseprice_data.isnull().sum()
```
5. **使用`dropna`方法删除所有包含缺失值的行**:
```python
houseprice_data_drop_missing = houseprice_data.dropna()
houseprice_data_drop_missing.shape
```
输出结果显示删除缺失值后数据集的行数变为 920:
```plaintext
(920, 3)
```
6. **使用`dropna`方法删除指定列中包含缺失值的行**:
```python
houseprice_data_drop_subset = houseprice_data.dropna(subset = ['Price', 'Area'])
houseprice_data_drop_subset.shape
```
输出结果同样显示行数变为 920:
```plaintext
(920, 3)
```
7. **使用`drop`方法删除包含缺失值的整个列**:
```python
houseprice_data_drop_column = houseprice_data.drop(['Area'], axis=1)
houseprice_data_drop_column.shape
```
输出结果显示列数变为 2:
```plaintext
(924, 2)
```
- **替换缺失值**:
当缺失值较多且为随机缺失时,替换缺失值是一种更好的方法,也称为插补。常见的插补方法有以下几种:
- **统计量方
0
0
复制全文
相关推荐









