【实战演练】Python市场营销数据分析与可视化实战案例
发布时间: 2024-06-24 21:20:42 阅读量: 136 订阅数: 117
![【实战演练】Python市场营销数据分析与可视化实战案例](https://pic3.zhimg.com/80/v2-a405b9d5e04c0102597e30a53a4c7e66_1440w.webp)
# 2.1 数据清洗与转换
数据清洗和转换是数据预处理的重要步骤,其目的是将原始数据转换为适合分析和建模的格式。
### 2.1.1 缺失值处理
缺失值是数据集中常见的问题,处理缺失值的方法有多种,包括:
- **删除法:**删除包含缺失值的记录或特征。
- **填充法:**使用统计方法(如均值、中位数或众数)或机器学习算法填充缺失值。
- **插补法:**使用相邻记录或其他相关特征的值进行插补。
### 2.1.2 异常值处理
异常值是指与数据集中其他值明显不同的值。异常值可能由错误或异常事件引起,需要谨慎处理。
处理异常值的方法包括:
- **删除法:**删除异常值记录或特征。
- **Winsorization:**将异常值替换为指定的分位数(例如,5%或95%)。
- **转换法:**使用对数或其他转换函数将异常值缩小到正常范围内。
# 2. 数据预处理与探索性分析
数据预处理是数据分析过程中的重要步骤,它可以提高数据质量,为后续的分析和建模做好准备。数据探索性分析则有助于我们了解数据的分布、特征和潜在模式,为制定数据分析策略提供依据。
### 2.1 数据清洗与转换
#### 2.1.1 缺失值处理
缺失值是数据分析中常见的问题,它可能导致偏差和不准确的分析结果。处理缺失值的方法有多种,包括:
- **删除缺失值:**如果缺失值较少,且对分析结果影响不大,可以考虑直接删除缺失值。
- **均值/中位数填充:**用缺失值的均值或中位数填充缺失值。
- **插值:**根据缺失值前后相邻的值进行插值,如线性插值或样条插值。
- **K近邻法:**根据与缺失值最相似的K个数据点进行插值。
```python
import pandas as pd
# 缺失值删除
df = df.dropna()
# 均值填充
df['age'].fillna(df['age'].mean(), inplace=True)
# 线性插值
df['height'].interpolate(method='linear', inplace=True)
```
#### 2.1.2 异常值处理
异常值是指与其他数据点明显不同的数据点,它们可能由数据录入错误或其他原因引起。处理异常值的方法包括:
- **删除异常值:**如果异常值对分析结果影响较大,可以考虑直接删除异常值。
- **Winsorization:**将异常值替换为指定的分位数(如5%或95%分位数)。
- **标准化:**通过减去均值并除以标准差,将异常值转化为接近于正态分布的数据。
```python
import numpy as np
# 异常值删除
df = df[df['age'] < np.percentile(df['age'], 99)]
# Winsorization
df['height'] = np.clip(df['height'], df['height'].quantile(0.05), df['height'].quantile(0.95))
# 标准化
df['weight'] = (df['weight'] - df['weight'].mean()) / df['weight'].std()
```
#### 2.1.3 数据标准化
数据标准化是指将数据转换为具有相同均值和标准差的分布。标准化的好处包括:
- 提高模型的收敛速度
- 避免某些特征对模型的影响过大
- 提高模型的泛化能力
```python
from sklearn.preprocessing import StandardScaler
# 数据标准化
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
```
### 2.2 数据探索与可视化
#### 2.2.1 数据分布分析
数据分布分析可以帮助我们了解数据的分布特征,如中心趋势、离散程度和形状。常用的数据分布分析方法包括:
- **直方图:**显示数据在不同区间内的频率分布。
- **箱线图:**显示数据的最小值、四分位数、中位数、三倍四分位数范围和最大值。
- **核密度估计:**通过平滑数据分布,生成连续的密度曲线。
```python
import matplotlib.pyplot as plt
import seaborn as sns
# 直方图
plt.hist(df['age'], bins=10)
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.show()
# 箱线图
sns.boxplot(data=df, x='age')
plt.xlabel('Age')
plt.ylabel('Value')
plt.show()
# 核密度估计
sns.kdeplot(df['height'], fill=True, color='b')
plt.xlabel('Height')
plt.ylabel('Density')
plt.show()
```
#### 2.2.2 数据相关性分析
数据相关性分析可以帮助我们了解不同变量之间的关系强度和方向。常用的数据相关性分析方法包括:
- **皮尔逊相关系数:**衡量两个连续变量之间的线性相关性,取值范围为[-1, 1]。
- **斯皮尔曼相关系数:**衡量两个连续变量或两个序数变量之间的单调相关性,取值范围为[-1, 1]。
- **肯德尔相关系数:**衡量两个序数变量之间的相关性,取值范围为[-1, 1]。
```python
import scipy.stats
# 皮尔逊相关系数
corr = scipy.stats.pearsonr(df['age'], df['height'])
print('皮尔逊相关系数:', corr[0])
# 斯皮尔曼相关系数
corr = scipy.stats.spearmanr(df['age'], df['height'])
print('斯皮尔曼相关系数:', corr[0])
# 肯德尔相关系数
corr = scipy.stats.kendalltau(df['age'], df['height'])
print('肯德尔相关系数:', corr[0])
```
#### 2.2.3 数据可视化技术
数据可视化技术可以帮助我们直观地展示数据分布、特征和模式。常用的数据可视化技术包括:
- **散点图:**显示两个连续变量
0
0