【AI中数学-数理统计-综合实例-包括python实现】 揭开数据的面纱:真实样本数据的探索与可视化

第五章:数理统计-综合实例

1. 揭开数据的面纱:真实样本数据的探索与可视化

在人工智能(AI)应用中,数据是构建算法和模型的基石,而数理统计则为我们提供了理解和处理这些数据的工具。数据探索和可视化是数理统计中至关重要的步骤,它们不仅能帮助我们理解数据的分布、关系和趋势,还能够为后续的建模工作提供依据。

本节将通过五个实际案例,展示如何使用数理统计和可视化技术对真实样本数据进行探索。每个案例都包括具体的描述、分析步骤、所用算法、Python代码及详细注释,帮助读者更好地理解数据探索和可视化的核心思想与技巧。

案例1:客户购买行为的探索与可视化

1.1 案例描述

我们假设有一个电商平台的数据集,包含了多个客户的购买记录。数据集中包括了客户的基本信息(如年龄、性别、收入等)以及购买记录(如购买的商品种类、购买时间、购买金额等)。我们的目标是通过探索性数据分析(EDA)来了解客户购买行为的模式,从而为个性化营销提供数据支持。

1.2 案例分析

在这个案例中,我们将关注以下几个问题:

  • 客户的购买行为是否受到年龄、性别和收入等因素的影响?
  • 哪些商品类别在不同客户群体中受欢迎?
  • 客户的购买金额和购买频率之间是否存在关联?

通过这些问题,我们可以获得有关客户购买行为的重要洞察,从而为后续的模型建设奠定基础。

1.3 案例算法步骤
  1. 数据预处理:处理缺失值、异常值,并将类别变量进行编码。
  2. 描述性统计:计算并分析各变量的统计量(均值、标准差、分布等)。
  3. 可视化分析:绘制各类数据的分布图、箱型图、散点图等。
  4. 相关性分析:使用相关系数或热力图分析各特征之间的关系。
1.4 Python代码实现及详解
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 模拟生成客户购买数据
np.random.seed(42)
data = pd.DataFrame({
    'age': np.random.randint(18, 70, 5),
    'income': np.random.randint(3000, 10000, 5),
    'purchase_amount': np.random.uniform(50, 500, 5),
    'gender': np.random.choice(['Male', 'Female'], 5),
    'product_category': np.random.choice(['Electronics', 'Clothing', 'Home'], 5)
})

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

# 1.2 可视化:年龄分布
plt.figure(figsize=(10, 6))
sns.histplot(data['age'], bins=5, kde=True)
plt.title('客户年龄分布')
plt.xlabel('年龄')
plt.ylabel('频数')
plt.show()

# 1.3 可视化:购买金额与收入的关系
plt.figure(figsize=(10, 6))
sns.scatterplot(x=data['income'], y=data['purchase_amount'], hue=data['gender'])
plt.title('购买金额与收入的关系')
plt.xlabel('收入')
plt.ylabel('购买金额')
plt.show()

# 1.4 相关性分析:热力图
corr_matrix = data[['age', 'income', 'purchase_amount']].corr()
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('特征之间的相关性')
plt.show()
1.5 代码详解
  • data.fillna(data.mean(), inplace=True):填充数据中的缺失值,这里我们使用均值填充。
  • sns.histplot(data['age'], bins=5, kde=True):使用Seaborn绘制年龄的直方图,并添加核密度估计(KDE)曲线,展示年龄的分布情况。
  • sns.scatterplot(x=data['income'], y=data['purchase_amount'], hue=data['gender']):通过散点图展示收入与购买金额的关系,并根据性别进行分色。
  • sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt='.2f'):绘制相关性热力图,帮助分析特征之间的线性关系。

案例2:房价预测数据分析与可视化

2.1 案例描述

假设我们有一个房地产市场的数据集,包含房屋的各种特征(如面积、卧室数量、楼层、年份、地理位置等),以及每个房屋的销售价格。我们希望通过探索性数据分析,理解哪些特征与房价关系最密切,从而为建立房价预测模型提供指导。

2.2 案例分析

我们关注以下问题:

  • 房屋面积、卧室数量等特征与房价之间的关系如何?
  • 是否存在某些地理位置上的房价差异?
  • 哪些变量的分布是偏态的,需要进行转换?
2.3 案例算法步骤
  1. 数据清理:处理缺失值和异常值。
  2. 特征工程:对地理位置等类别特征进行编码。
  3. 描述性统计分析:分析数值特征的均值、方差等。
  4. 可视化:绘制各特征与房价的关系图、房价分布图等。
2.4 Python代码实现及详解
# 模拟生成房价数据
housing_data = pd.DataFrame({
    'area': np.random.randint(50, 200, 5),
    'bedrooms': np.random.randint(1, 5, 5),
    'floor': np.random.randint(1, 15, 5),
    'year_built': np.random.randint(1990, 2020, 5),
    'location': np.random.choice(['Downtown', 'Suburbs', 'Countryside'], 5),
    'price': np.random.randint(50, 500, 5)  # 单位:万元
})

# 2.1 房屋面积与房价的关系
plt.figure(figsize=(10, 6))
sns.scatterplot(x=housing_data['area'], y=housing_data['price'])
plt.title('房屋面积与房价的关系')
plt.xlabel('房屋面积 (平方米)')
plt.ylabel('房价 (万元)')
plt.show()

# 2.2 地理位置与房价的关系
plt.figure(figsize=(10, 6))
sns.boxplot(x=housing_data['location'], y=housing_data['price'])
plt.title('不同地理位置的房价分布')
plt.xlabel('地理位置')
plt.ylabel('房价 (万元)')
plt.xticks(rotation=45)
plt.show()

# 2.3 房价的分布情况
plt.figure(figsize=(10, 6))
sns.histplot(housing_data['price'], bins=5, kde=True)
plt.title('房价分布')
plt.xlabel('房价 (万元)')
plt.ylabel('频数')
plt.show()
2.5 代码详解
  • sns.scatterplot(x=housing_data['area'], y=housing_data['price']):使用散点图展示房屋面积与房价的关系。
  • sns.boxplot(x=housing_data['location'], y=housing_data['price']):通过箱型图展示不同地理位置的房价分布情况。
  • sns.histplot(housing_data['price'], bins=5, kde=True):展示房价的分布情况,并叠加KDE曲线,分析房价的偏态性。

案例3:社交媒体情感分析

3.1 案例描述

我们有一组社交媒体评论数据,目标是分析这些评论的情感倾向(如正面、负面或中性)。通过探索性数据分析,我们希望了解评论长度、发布频率、用户活跃度等特征对情感分析结果的影响。

3.2 案例分析
  • 评论的情感分布如何?是否有偏向某一情感?
  • 评论长度与情感之间是否存在某种关系?
  • 用户活跃度(如发帖频率)与情感是否有关联?
3.3 案例算法步骤
  1. 文本数据预处理:清洗评论内容,去除停用词和标点符号。
  2. 描述性统计:分析评论长度、发布频率等变量。
  3. 可视化分析:展示情感分布、评论长度与情感的关系。
3.4 Python代码实现及详解
from textblob import TextBlob

# 模拟生成社交媒体评论数据
comments = pd.DataFrame({
    'comment': [
        'I love this product, it is amazing!',
        'Worst purchase I ever made, totally regret it.',
        'Not bad, but could be improved.',
        'Absolutely fantastic! Will buy again.',
        'It was okay, not great but not terrible.'
    ]
})

# 3.1 评论情感分析
comments['sentiment'] = comments['comment'].apply(lambda x: TextBlob(x).sentiment.polarity)
comments['sentiment_label'] = comments['sentiment'].apply(lambda x: 'positive' if x > 0 else ('negative' if x < 0 else 'neutral'))

# 3.2 情感分布
plt.figure(figsize=(8, 6))
sns.countplot(x='sentiment_label', data=comments)
plt.title('评论情感分布')
plt.xlabel('情感')
plt.ylabel('评论数量')
plt.show()

# 3.3 评论长度与情感的关系
comments['comment_length'] = comments['comment'].apply(len)
plt.figure(figsize=(10, 6))
sns.scatterplot(x=comments['comment_length'], y=comments['sentiment'], hue=comments['sentiment_label'])
plt.title('评论长度与情感的关系')
plt.xlabel('评论长度')
plt.ylabel('情感得分')
plt.show()
3.5 代码详解
  • TextBlob(x).sentiment.polarity:使用 TextBlob 库来计算每条评论的情感得分。polarity 返回一个浮动值,范围从 -1(负面情感)到 +1(正面情感)。
  • comments['sentiment_label']:根据情感得分将评论分类为 positive(正面)、negative(负面)或 neutral(中性)。
  • sns.countplot(x='sentiment_label', data=comments):绘制情感分布的条形图,展示正面、负面和中性评论的数量。
  • comments['comment_length'] = comments['comment'].apply(len):计算每条评论的长度(字符数)。
  • sns.scatterplot(x=comments['comment_length'], y=comments['sentiment'], hue=comments['sentiment_label']):通过散点图展示评论长度与情感得分的关系,并根据情感标签对评论进行颜色区分。

案例4:股票市场波动分析

4.1 案例描述

假设我们有一个股票市场的数据集,记录了某股票在过去五个交易日的收盘价。通过探索性数据分析,我们希望分析股票价格的波动性,并了解股票收盘价的分布情况及其变化趋势。

4.2 案例分析

我们关注以下几个问题:

  • 股票价格在过去五天的变化趋势如何?
  • 股票价格的波动性如何?是否存在较大的波动日?
  • 股票价格的分布是否偏态?
4.3 案例算法步骤
  1. 数据可视化:绘制股票收盘价的时间序列图,展示价格变化趋势。
  2. 统计分析:计算股票价格的均值、标准差等统计量,分析波动性。
  3. 分布分析:绘制股票价格的直方图,判断价格分布是否呈现偏态。
4.4 Python代码实现及详解
# 模拟生成股票收盘价数据
stock_data = pd.DataFrame({
    'date': pd.date_range(start='2025-01-01', periods=5, freq='D'),
    'closing_price': np.random.uniform(100, 200, 5)
})

# 4.1 股票价格时间序列图
plt.figure(figsize=(10, 6))
plt.plot(stock_data['date'], stock_data['closing_price'], marker='o', color='b')
plt.title('股票收盘价变化趋势')
plt.xlabel('日期')
plt.ylabel('收盘价')
plt.xticks(rotation=45)
plt.show()

# 4.2 股票价格波动性分析:标准差
price_std = stock_data['closing_price'].std()
print(f'股票价格的标准差(波动性):{price_std:.2f}')

# 4.3 股票价格分布情况:直方图
plt.figure(figsize=(10, 6))
sns.histplot(stock_data['closing_price'], bins=5, kde=True)
plt.title('股票价格分布')
plt.xlabel('收盘价')
plt.ylabel('频数')
plt.show()
4.5 代码详解
  • pd.date_range(start='2025-01-01', periods=5, freq='D'):生成五个连续日期的数据,模拟一个股票的收盘价。
  • plt.plot(stock_data['date'], stock_data['closing_price'], marker='o', color='b'):使用折线图绘制股票收盘价的变化趋势,标出每个点的收盘价。
  • stock_data['closing_price'].std():计算股票收盘价的标准差,衡量股票价格的波动性。
  • sns.histplot(stock_data['closing_price'], bins=5, kde=True):绘制股票价格的直方图,并叠加核密度估计(KDE)曲线,分析价格分布情况。

案例5:电商网站用户活跃度分析

5.1 案例描述

我们有一个电商网站的数据集,记录了每个用户在过去一个月内的登录次数、浏览的商品数量以及是否进行了购买。我们希望通过这些数据分析网站用户的活跃度,并了解哪些因素会影响用户的购买行为。

5.2 案例分析

我们关注以下几个问题:

  • 用户的登录频率和浏览商品的数量是否与购买行为相关?
  • 哪些用户群体更活跃?活跃度如何影响购买决策?
  • 用户活跃度的分布是否呈现正态分布?
5.3 案例算法步骤
  1. 数据分析:计算每个用户的活跃度(如登录次数、浏览商品数量等)。
  2. 相关性分析:分析活跃度和购买行为之间的关系。
  3. 可视化:展示活跃度和购买行为的分布情况。
5.4 Python代码实现及详解
# 模拟生成用户活跃度数据
user_data = pd.DataFrame({
    'user_id': range(1, 6),
    'logins': np.random.randint(1, 20, 5),
    'browsed_items': np.random.randint(5, 30, 5),
    'purchased': np.random.choice([0, 1], 5)  # 0 表示未购买,1 表示已购买
})

# 5.1 活跃度与购买行为的关系:散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(x=user_data['logins'], y=user_data['browsed_items'], hue=user_data['purchased'])
plt.title('用户登录次数与浏览商品数量的关系')
plt.xlabel('登录次数')
plt.ylabel('浏览商品数量')
plt.show()

# 5.2 购买行为与活跃度分析:相关性
correlation = user_data[['logins', 'browsed_items', 'purchased']].corr()
print('活跃度与购买行为之间的相关性:\n', correlation)

# 5.3 活跃度分布情况:登录次数与浏览商品数量的分布
plt.figure(figsize=(10, 6))
sns.histplot(user_data['logins'], bins=5, kde=True, color='blue', label='Logins')
sns.histplot(user_data['browsed_items'], bins=5, kde=True, color='orange', label='Browsed Items')
plt.title('用户活跃度分布')
plt.xlabel('频率')
plt.ylabel('用户数量')
plt.legend()
plt.show()
5.5 代码详解
  • sns.scatterplot(x=user_data['logins'], y=user_data['browsed_items'], hue=user_data['purchased']):使用散点图展示用户的登录次数与浏览商品数量的关系,并根据是否购买进行颜色区分。
  • user_data[['logins', 'browsed_items', 'purchased']].corr():计算登录次数、浏览商品数量和购买行为之间的相关性。
  • sns.histplot(user_data['logins'], bins=5, kde=True, color='blue', label='Logins'):绘制用户登录次数的分布,并叠加KDE曲线。
  • sns.histplot(user_data['browsed_items'], bins=5, kde=True, color='orange', label='Browsed Items'):绘制用户浏览商品数量的分布,并叠加KDE曲线。

这些案例展示了如何通过数理统计的分析手段和可视化技术,深入探索和理解真实样本数据。通过这些案例的分析,我们可以发现数据中的潜在模式,为后续的模型构建和预测提供有价值的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值