【实战演练】Python旅游数据分析与可视化实战案例
发布时间: 2024-06-24 21:29:47 阅读量: 2 订阅数: 24
![【实战演练】Python旅游数据分析与可视化实战案例](https://img-blog.csdnimg.cn/20190626155726199.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDc1NTE0OA==,size_16,color_FFFFFF,t_70)
# 2.1 数据清洗和转换
### 2.1.1 缺失值处理
缺失值是数据预处理中常见的挑战。处理缺失值的方法有多种,包括:
- **删除缺失值:**如果缺失值数量较少,且对数据分析影响不大,可以考虑直接删除缺失值。
- **填充缺失值:**使用其他数据填充缺失值,如:
- **均值填充:**用列中非缺失值的平均值填充缺失值。
- **中位数填充:**用列中非缺失值的中位数填充缺失值。
- **众数填充:**用列中非缺失值出现次数最多的值填充缺失值。
- **插值:**使用插值算法估计缺失值,如:
- **线性插值:**根据相邻非缺失值的线性关系估计缺失值。
- **多项式插值:**根据相邻非缺失值的非线性关系估计缺失值。
# 2. Python数据预处理与特征工程
### 2.1 数据清洗和转换
数据预处理是机器学习流程中至关重要的一步,它旨在将原始数据转换为适合建模和分析的形式。数据清洗和转换涉及以下关键任务:
#### 2.1.1 缺失值处理
缺失值是数据集中常见的问题,它们会对机器学习算法的性能产生负面影响。处理缺失值的方法有多种,包括:
- **删除缺失值:**如果缺失值数量较少且随机分布,则可以将其删除。
- **插补缺失值:**使用其他数据点来估计缺失值,例如使用平均值、中值或众数。
- **创建新特征:**将缺失值本身作为特征,指示该数据点中存在缺失值。
```python
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 删除缺失值
df = df.dropna()
# 使用平均值插补缺失值
df['age'] = df['age'].fillna(df['age'].mean())
```
#### 2.1.2 异常值处理
异常值是数据集中明显偏离其他值的数据点。它们可能由数据错误、传感器故障或其他原因引起。处理异常值的方法包括:
- **删除异常值:**如果异常值是由于错误或噪声引起的,则可以将其删除。
- **截断异常值:**将异常值截断到指定阈值,使其与其他值更一致。
- **转换异常值:**使用对数转换或其他变换将异常值转换为更接近其他值的范围。
```python
# 使用四分位数间距 (IQR) 检测异常值
iqr = df['price'].quantile(0.75) - df['price'].quantile(0.25)
lower_bound = df['price'].quantile(0.25) - 1.5 * iqr
upper_bound = df['price'].quantile(0.75) + 1.5 * iqr
# 删除异常值
df = df[(df['price'] > lower_bound) & (df['price'] < upper_bound)]
```
#### 2.1.3 数据类型转换
数据类型转换涉及将数据从一种类型转换为另一种类型。这对于确保数据与机器学习算法兼容至关重要。常见的数据类型转换包括:
- **数值型到分类型:**使用 one-hot 编码或标签编码将数值型特征转换为分类型特征。
- **分类型到数值型:**使用目标编码或平均值编码将分类型特征转换为数值型特征。
- **日期型到数值型:**使用时间戳或日期差将日期型特征转换为数值型特征。
```python
# 使用 one-hot 编码将性别特征转换为分类型特征
df = pd.get_dummies(df, columns=['gender'])
# 使用平均值编码将国家特征转换为数值型特征
df['country'] = df['country'].map(df['country'].value_counts().to_dict())
```
### 2.2 特征选择与降维
特征选择和降维是数据预处理的两个重要技术,它们可以提高机器学习模型的性能和可解释性。
#### 2.2.1 特征选择方法
特征选择涉及识别和选择与目标变量最相关的特征。常见的方法包括:
- **过滤法:**基于统计度量(例如相关性、信息增益)对特征进行评分和选择。
- **包裹法:**使用机器学习算法来评估特征子集的性能,并选择最佳子集。
- **嵌入法:**在训练机器学习模型的过程中,自动选择特征。
```python
# 使用相关系数选择特征
import numpy as np
corr = df.corr()
corr_target = abs(corr['target'])
relevant_features = corr_target[corr_target > 0.5].in
```
0
0