7 数据归约基础

7 数据归约基础

数据归约是指在保持数据集重要特征的前提下,减少数据的规模。数据归约不仅可以提高数据挖掘的效率,还可以降低存储成本。下面,我们将探讨几种数据归约的方法及其应用案例。

数据选择

数据选择是从原始数据集中选择出相关性强的子集。常用的技巧包括:

  • 随机采样:从数据集中随机选择部分样本。
  • 分层采样:确保各个类别在样本中都有代表性。

案例:随机采样

假设我们有10000条用户数据,但我们只需要分析其中的4000条用户行为。可以使用Python中的pandas库进行随机采样:

1
2
3
4
5
6
7
8
9
10
11
import pandas as pd

# 生成示例数据
data = pd.DataFrame({
'用户ID': range(1, 10001),
'行为': ['点击', '浏览', '购买'] * 3333 + ['点击']
})

# 随机采样
sampled_data = data.sample(n=4000, random_state=1)
print(sampled_data)

数据特征选择

数据特征选择指的是从原始特征中选择出最有用的特征,从而减少数据维度。选择的标准通常包括信息增益、互信息等。

案例:特征选择

在一个用于信用卡欺诈检测的数据集中,可能有数十个特征。我们可以使用sklearn库中的特征选择工具来筛选最重要的特征:

1
2
3
4
5
6
7
8
9
10
11
12
13
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest, f_classif

# 加载数据
data = load_iris()
X, y = data.data, data.target

# 特征选择
selector = SelectKBest(score_func=f_classif, k=2)
X_new = selector.fit_transform(X, y)

print("原特征数:", X.shape[1])
print("选择后的特征数:", X_new.shape[1])

数据聚合

数据聚合是将多个数据点合并为一个数据点,常用于处理时间序列数据或分类数据。

案例:销售数据聚合

假设我们有一份销售数据,记录了每天的销售额。我们可以按月份对这些数据进行聚合,计算每月的总销售额:

1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd

# 生成示例销售数据
dates = pd.date_range('2023-01-01', '2023-12-31', freq='D')
sales = pd.DataFrame({
'日期': dates,
'销售额': (100 + pd.np.random.randn(len(dates))).cumsum()
})

# 按月份聚合
monthly_sales = sales.resample('M', on='日期').sum()
print(monthly_sales)

数据压缩

数据压缩是通过某种算法减少数据存储所需的空间,常用的算法有PCA(主成分分析)等。压缩不仅仅是减少存储空间,还可以提高模型效果。

案例:使用PCA压缩数据

我们来看看如何使用PCA进行数据压缩。假设我们有一个高维特征数据集,通过PCA我们可以将数据压缩到较低维度:

1
2
3
4
5
6
7
8
9
10
11
12
13
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris

# 加载数据
data = load_iris()
X = data.data

# PCA压缩
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)

print("原始维度:", X.shape[1])
print("压缩后的维度:", X_reduced.shape[1])

总结

数据归约是数据挖掘中的一个重要步骤,它通过多种方法减少数据集的大小,同时保留关键信息。在实际操作中,可以结合随机采样、特征选择、数据聚合和数据压缩等技巧,根据具体场景灵活应用。在未来的项目中,合理运用数据归约技术将大大提升数据分析和建模的效率。

描述性分析

描述性分析

描述性分析是数据挖掘中的重要步骤,主要用于对数据集进行初步的探索和总结。通过描述性分析,我们能够获取数据的基本特征,为后续的分析和建模奠定基础。

1. 数据概览

在进行描述性分析之前,首先对数据集进行概览非常重要。通过加载数据并查看前几行,可以初步了解数据的结构和内容。

1
2
3
4
5
6
7
import pandas as pd

# 加载数据
data = pd.read_csv('dataset.csv')

# 查看前5行
print(data.head())

在以上代码中,data.head() 方法展示了数据的前五行,帮助我们了解各个字段的类型和内容。

2. 数据摘要统计

摘要统计是描述性分析的核心部分,它可以帮助我们快速了解数据的基本特征,包括均值中位数标准差等。

1
2
3
# 获取摘要统计信息
summary = data.describe()
print(summary)

这里,data.describe() 方法会提供数值型字段的统计信息,包括计数、均值、标准差、最小值、最大值以及四分位数。这些指标能够帮助我们判断数据的分布情况。

案例:销售数据分析

假设我们有一个销售数据集,我们使用摘要统计来分析销售额的分布。

1
2
3
# 假设sales为销售额字段
sales_summary = data['sales'].describe()
print(sales_summary)

输出示例:

1
2
3
4
5
6
7
8
count     1000.000000
mean 500.000000
std 200.000000
min 100.000000
25% 300.000000
50% 500.000000
75% 700.000000
max 1000.000000

从输出中,我们可以看到销售额的基本分布情况。

3. 数据分布可视化

为了更好地理解数据,我们可以使用可视化工具来展示数据的分布。例如,使用直方图和箱线图来展示数据分布和离群值。

3.1 直方图

1
2
3
4
5
6
7
import matplotlib.pyplot as plt

plt.hist(data['sales'], bins=20, color='blue', alpha=0.7)
plt.title('Sales Distribution')
plt.xlabel('Sales Amount')
plt.ylabel('Frequency')
plt.show()

直方图可以帮助我们观察销售额的分布情况,判断是否存在偏态或离群值。

3.2 箱线图

1
2
3
4
plt.boxplot(data['sales'])
plt.title('Sales Boxplot')
plt.ylabel('Sales Amount')
plt.show()

箱线图能够有效地展示数据的四分位数和离群值,使我们能够一目了然地识别数据中的异常情况。

4. 分类变量汇总

对于分类变量,我们可以使用计数和频率分析来总结各类别的分布情况。

1
2
3
# 假设有一个分类字段'category'
category_counts = data['category'].value_counts()
print(category_counts)

输出示例:

1
2
3
A    400
B 300
C 300

通过计数,我们可以很清楚地看到每一类别的数量,从而了解各类别的占比情况。

案例:产品类别分析

在销售数据中,可能存在多个产品类别,通过计数分析,我们可以了解到各类别产品的销售情况。

1
2
category_counts = data['product_category'].value_counts(normalize=True) * 100
print(category_counts)

通过设置 normalize=True,我们能够得到每个类别的百分比,从而更直观地比较不同类别的销售占比。

5. 相关性分析

相关性分析是理解数据变量间关系的另一重要分析步骤。我们可以使用相关系数矩阵来分析数值型变量之间的关系。

1
2
3
# 计算相关性矩阵
correlation_matrix = data.corr()
print(correlation_matrix)

5.1 热力图可视化

为了更好地展示相关性矩阵,我们可以使用热力图。

1
2
3
4
5
6
import seaborn as sns

plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, fmt='.2f', cmap='coolwarm')
plt.title('Correlation Matrix Heatmap')
plt.show()

热力图可以帮助我们直观地查看变量之间的相关性,识别可能的线性关系。

结论

描述性分析是数据挖掘的基础,它不仅帮助我们理解数据,还为后续的决策提供了依据。在实际应用中,灵活运用各种统计和可视化工具,有助于我们更加深入地洞察数据。在后续的学习过程中,可以尝试更多的数据分析工具和方法来丰富您的数据分析技能。

9 探索性数据分析(EDA)

9 探索性数据分析(EDA)

探索性数据分析(Exploratory Data Analysis, EDA)是数据分析过程中的一个重要环节,它通过多种图形化和统计方法帮助我们理解数据的基本特征和结构。下面,我们将通过一些案例和代码,深入探讨 EDA 的重要内容。

EDA 的目标

在进行 EDA 时,我们主要关注以下几个目标:

  • 理解数据的基本结构
  • 发现数据中的异常值
  • 检查变量之间的关系
  • 生成假设进行进一步分析

案例分析:泰坦尼克号数据集

我们以著名的《泰坦尼克号》数据集为例,该数据集包含有关泰坦尼克号乘客的信息,如性别、年龄、船票等。

1. 数据加载

首先,我们需要加载数据并查看数据的基本信息:

1
2
3
4
5
6
7
import pandas as pd

# 加载数据
data = pd.read_csv('titanic.csv')

# 查看数据的前几行
print(data.head())

2. 基本描述统计

描述性统计可以帮助我们快速了解数据的分布情况。

1
2
3
4
5
# 查看数据的基本信息
print(data.info())

# 描述统计
print(data.describe())

这里,使用 data.info() 可以查看数据类型和缺失值情况,而 data.describe() 则提供数值型变量的统计信息,如均值、标准差、最小值和最大值。

3. 缺失值处理

在数据处理过程中,缺失值是一个需要关注的问题。我们可以通过以下方式查看缺失值:

1
2
# 检查缺失值
print(data.isnull().sum())

输出结果展示了每个列的缺失情况。例如,如果“年龄”列有缺失值,我们可以考虑用均值或中位数填充它:

1
2
# 填充缺失的年龄值
data['Age'].fillna(data['Age'].median(), inplace=True)

4. 数据可视化

可视化是 EDA 中非常重要的一部分,可以帮助我们直观地理解数据。我们可以使用 matplotlibseaborn 来进行可视化。

1
2
3
4
5
6
7
import seaborn as sns
import matplotlib.pyplot as plt

# 绘制性别与生存率的关系
sns.barplot(x='Sex', y='Survived', data=data)
plt.title('Survival Rate by Gender')
plt.show()

在上述代码中,使用 sns.barplot 绘制了性别与生存率的关系,直观地展示了男女乘客的生存率差异。

5. 变量之间的关系

我们可以通过散点图和相关性矩阵来分析多个变量之间的关系。

1
2
3
4
5
6
7
8
9
10
# 散点图:年龄与票价关系
sns.scatterplot(x='Fare', y='Age', data=data, hue='Survived')
plt.title('Relationship between Fare and Age')
plt.show()

# 相关性矩阵
correlation_matrix = data.corr()
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('Correlation Matrix')
plt.show()

在散点图中,我们可以观察到不同生存状态的乘客在“票价”(Fare)和“年龄”(Age)上的分布情况。而通过相关性矩阵,我们可以直观地看到变量之间的相关程度。

小结

探索性数据分析(EDA)是数据挖掘过程中的关键步骤,通过上述方法和案例,我们可以有效地理解和处理数据。掌握 EDA 不仅有助于数据清洗和特征工程,也是后续建模和分析的基础。务必通过不断实践来提高 EDA 的能力和技巧。