当前位置: 首页 > article >正文

数据分析练习——学习一般分析步骤

目录

一、准备工作

二、导入库和数据

1、导入必要的库:

2、模拟数据

三、数据分析过程

1、读取数据:

2、数据概览和描述性统计:

2.1、查看数据概览:

2.2、查看描述性统计:

3、数据清洗:

3.1、处理缺失值:

3.2、处理异常值:

3.3、处理重复数据:

4、EDA(探索性数据分析): 

4.1、相关性分析:查看数值型变量之间的相关性

4.2、分类数据分析:

4.3、数据分布分析:

4.4、双变量分析:分析两个变量之间的关系。例如,使用散点图查看 units_sold 和 price_per_unit 之间的关系

4.5、时间序列分析:如果数据包含时间信息,可以分析各个变量随时间的变化趋势。在我们的示例中,首先需要将 order_date 转换为 datetime 类型

4.6、多变量分析:分析多个变量之间的关系。例如,分析不同 product_category 的 units_sold 和 price_per_unit 之间的关系

4.7、箱线图分析

5、数据建模与分析

6、数据可视化

ps:据建模与分析、数据可视化显示结果的解释

7、结果解释和报告

四、学习过程中一些问题的回答 

1、通过训练模型并对测试数据进行预测,预测了什么,为什么要预测?

2、”评估这种关系的存在程度以及模型的预测能力“,如何评估以及为什么要评估?

3、为什么要找与项目需求和数据最适合的模型?


在这个实践项目中,我们将使用Python和一些常用的数据分析库(如Pandas、Matplotlib和Seaborn)进行数据分析。假设我们的目标是分析一个虚构的电商平台的销售数据,以获取关于产品销售、客户行为等方面的见解。

一、准备工作

首先,确保已经安装了Python及相关的数据分析库。在你的Python环境中安装以下库(如果尚未安装):

pip install pandas
pip install matplotlib
pip install seaborn
pip install scikit-learn

二、导入库和数据

1、导入必要的库:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

2、模拟数据

将以下CSV格式数据复制到名为"sales_data.csv"的文件中

order_id,product_id,product_category,user_id,order_date,units_sold,price_per_unit,sales_amount
10001,2001,A,3001,2023-01-02,5,100,500
10002,2002,B,3002,2023-01-03,2,150,300
10003,2003,C,3001,2023-01-04,7,200,1400
10004,2004,D,3003,2023-01-05,4,50,200
10005,2005,A,3004,2023-01-06,3,100,300
10006,2001,A,3005,2023-01-07,6,100,600
10007,2002,B,3006,2023-01-08,3,150,450
10008,2003,C,3001,2023-01-09,8,200,1600
10009,2004,D,3007,2023-01-10,2,50,100
10010,2005,A,3008,2023-01-11,4,100,400
10011,2001,A,3009,2023-01-12,5,100,500
10012,2002,B,3010,2023-01-13,1,150,150
10013,,C,3011,2023-01-14,3,200,600
10014,2004,D,3012,2023-01-15,6,50,300
10015,2005,A,3013,2023-01-16,4,100,400
10016,2001,A,3014,2023-01-17,7,100,700
10017,2002,B,3015,2023-01-18,1,150,150
10018,2003,C,3016,2023-01-19,5,200,1000
10019,2004,D,3017,2023-01-20,3,50,150
10020,2005,A,3018,2023-01-21,6,100,600
10021,2001,A,3019,2023-01-22,4,100,400
10022,2002,B,3020,2023-01-23,3,150,450
10023,2003,C,3021,2023-01-24,2,200,400
10024,2004,D,3022,2023-01-25,6,50,300
10025,2005,A,3023,2023-01-26,4,100,400
10026,2001,A,3024,2023-01-27,5,100,500
10027,2002,B,3025,2023-01-28,3,150,450
10028,2003,C,3026,2023-01-29,15,200,3000
10029,2004,D,3027,2023-01-30,2,5000,100

三、数据分析过程

1、读取数据:

data = pd.read_csv('sales_data.csv')

2、数据概览和描述性统计:

2.1、查看数据概览:

print(data.head())
print(data.info())

2.2、查看描述性统计:

print(data.describe())

3、数据清洗:

3.1、处理缺失值:

# 查看缺失值
print(data.isnull().sum())

# 用众数填充 product_category 缺失值
data['product_category'].fillna(data['product_category'].mode()[0], inplace=True)

# 删除 product_id 为空的行
data.dropna(subset=['product_id'], inplace=True)


3.2、处理异常值:

# 分析 price_per_unit 异常值
sns.boxplot(x=data['price_per_unit'])
plt.show()

# 用四分位法去除异常值
Q1 = data['price_per_unit'].quantile(0.25)
Q3 = data['price_per_unit'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

data = data[(data['price_per_unit'] > lower_bound) & (data['price_per_unit'] < upper_bound)]

3.3、处理重复数据:

# 检查重复行
print(data.duplicated().sum())

# 删除重复行
data.drop_duplicates(inplace=True)

4、EDA(探索性数据分析): 

4.1、相关性分析:查看数值型变量之间的相关性

corr_matrix = data.corr()
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.show()

4.2、分类数据分析:

# 分析 product_category 的销售数量
category_units_sold = data.groupby('product_category')['units_sold'].sum()
category_units_sold.plot(kind='bar')
plt.show()

# 分析 product_category 的销售金额
category_sales_amount = data.groupby('product_category')['sales_amount'].sum()
category_sales_amount.plot(kind='bar')
plt.show()

4.3、数据分布分析:

# 分析 units_sold 数据分布
sns.histplot(data['units_sold'])
plt.show()

# 分析 price_per_unit 数据分布
sns.histplot(data['price_per_unit'])
plt.show()

# 分析 sales_amount 数据分布
sns.histplot(data['sales_amount'])
plt.show()

4.4、双变量分析:分析两个变量之间的关系。例如,使用散点图查看 units_sold 和 price_per_unit 之间的关系

sns.scatterplot(x='units_sold', y='price_per_unit', data=data)
plt.show()

4.5、时间序列分析:如果数据包含时间信息,可以分析各个变量随时间的变化趋势。在我们的示例中,首先需要将 order_date 转换为 datetime 类型

data['order_date'] = pd.to_datetime(data['order_date'])

# 按日期对销售额进行分组并求和
daily_sales = data.groupby('order_date')['sales_amount'].sum()

# 绘制销售额随时间变化的折线图
daily_sales.plot(kind='line')
plt.show()

4.6、多变量分析:分析多个变量之间的关系。例如,分析不同 product_category 的 units_sold 和 price_per_unit 之间的关系

sns.scatterplot(x='units_sold', y='price_per_unit', hue='product_category', data=data)
plt.show()

4.7、箱线图分析

# 分析 units_sold 箱线图
sns.boxplot(x=data['units_sold'])
plt.show()

# 分析 price_per_unit 箱线图
sns.boxplot(x=data['price_per_unit'])
plt.show()

# 分析 sales_amount 箱线图
sns.boxplot(x=data['sales_amount'])
plt.show()

5、数据建模与分析

还需要继续导入对应库:

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

以下示例将以一个简单的线性回归模型为例,对销售数据进行分析。

首先,我们假设 units_soldprice_per_unit 的影响。我们将使用 scikit-learn 库中的线性回归模型进行建模。

# 建立线性回归模型
X = data[['price_per_unit']]
y = data['units_sold']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练模型
reg = LinearRegression()
reg.fit(X_train, y_train)

# 预测
y_pred = reg.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print("Mean Squared Error: ", mse)
print("R2 Score: ", r2)

6、数据可视化

# 数据可视化
plt.scatter(X_test, y_test, color='blue', label='Actual')
plt.scatter(X_test, y_pred, color='red', label='Predicted')
plt.xlabel('Price Per Unit')
plt.ylabel('Units Sold')
plt.legend()
plt.show()

这个代码段包括了数据建模与分析、数据可视化的过程。我们首先使用 scikit-learn 库中的 train_test_split 函数将数据集划分为训练集和测试集。接着,我们使用 LinearRegression 类创建一个线性回归模型,使用训练集对模型进行训练。然后,我们使用训练好的模型对测试集进行预测,并计算均方误差 (MSE) 和决定系数 (R2) 来评估模型的性能。最后,我们将实际值与预测值进行可视化,以直观地观察模型的表现。

ps:据建模与分析、数据可视化显示结果的解释

在我们的示例中,我们通过线性回归模型探讨了 price_per_unit(商品单价)与 units_sold(销售数量)之间的关系。通过训练线性回归模型并对测试数据进行预测,我们可以评估这种关系的存在程度以及模型的预测能力。

在数据可视化部分,我们展示了一个散点图,其中蓝色点代表实际的数据点(测试集),红色点代表预测的数据点。这个图像可以帮助我们直观地了解模型的预测性能。横坐标表示商品单价,纵坐标表示销售数量。

如果红色预测点与蓝色实际点之间的距离较小,说明模型的预测性能较好,反之则表示预测性能较差。此外,我们还可以通过计算均方误差 (MSE) 和决定系数 (R2) 来量化模型的性能。

  • 均方误差 (MSE):衡量预测值与实际值之间差异的平均平方和。MSE 越小,表示模型预测的误差越小,性能越好。
  • 决定系数 (R2):衡量模型对数据的拟合程度。R2 的取值范围为 0 到 1,值越接近 1,表示模型拟合得越好,预测性能越好。

通过这些指标和可视化结果,您可以对线性回归模型的性能进行评估,并根据需要调整模型或尝试其他建模方法。在实际工作中,您可能需要尝试多种模型,并根据项目需求和数据特点选择最合适的模型。

7、结果解释和报告

在结果解释和报告阶段,您需要根据分析结果撰写一份报告,报告中应包括以下内容:

  1. 项目背景和目的:说明分析的背景、目的和应用场景。
  2. 数据来源和描述:简要介绍数据的来源、类型、结构和特点。
  3. 数据清洗和预处理:描述数据清洗和预处理过程中采取的方法和步骤,以及数据质量的改进情况。
  4. EDA 过程和结果:详细介绍 EDA 过程中使用的方法和技术

四、学习过程中一些问题的回答 

1、通过训练模型并对测试数据进行预测,预测了什么,为什么要预测?

答:这次实例中通过训练线性回归模型并对测试数据进行预测,预测的是输出变量(也称为响应变量或因变量)的值,这些值可以是数字、类别或一些其他形式。预测的目的是根据已知的输入变量(也称为解释变量或自变量)的值来预测输出变量的值。例如,如果我们想预测房屋的销售价格,我们可以使用线性回归模型,其中输入变量可能包括房屋的大小、位置、年龄和卫生间数量等,输出变量是房屋的销售价格。这种预测有助于我们了解数据之间的关系,并提供有用的信息,例如房屋价格随着卫生间数量增加而增加等。

2、”评估这种关系的存在程度以及模型的预测能力“,如何评估以及为什么要评估?

答:要评估线性回归模型中变量之间的关系强度和预测能力,可以使用各种统计指标,例如R方值,均方误差(MSE),平均绝对误差(MAE)等。R方值衡量模型对数据的拟合程度,值介于0到1之间,越接近1表示模型拟合得越好。MSE和MAE衡量模型的预测误差,值越小表示模型预测得越准确。评估模型的目的是确定模型是否适合数据,以及它是否可以可靠地预测未来数据的值。

3、为什么要找与项目需求和数据最适合的模型?

答:选择最合适的模型是为了确保预测的准确性和可靠性。不同的模型适用于不同的数据类型和问题类型。例如,如果我们的数据包含二元分类问题(例如,区分垃圾邮件和正常邮件),则逻辑回归模型可能比线性回归模型更适合。在选择模型时,需要考虑数据的特点,例如数据的分布、是否存在非线性关系等。选择正确的模型可以帮助我们更好地理解数据,并提高预测的准确性和可靠性。

-----------------------------------------------------------------我是分割线--------------------------------------------------------------

看完了觉得不错就点个赞或者评论下吧,感谢!!!

如果本文哪里有误随时可以提出了,收到会尽快更正的


http://www.kler.cn/a/6487.html

相关文章:

  • Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
  • Java操作Xml
  • [JAVA备忘录] Lambda 表达式简单介绍
  • MySQL 主从复制与高可用
  • 期权VIX指数构建与择时应用
  • Python中的上下文管理器:从资源管理到自定义实现
  • 代码随想录算法训练营第四十四天| 518. 零钱兑换 II、377. 组合总和 Ⅳ。
  • AJAX在PHP中的应用示例代码
  • Python垃圾回收机制详解
  • 研报精选230405
  • taro之--使用nutui
  • 【新2023Q2模拟题JAVA】华为OD机试 - 矩阵最值 or 计算二维矩阵的最大值
  • 如何实现接口调用的重试
  • RocketMQ消息文件过期原理
  • 面试官:谈谈你对MySQL事务的理解
  • 初识设计模式 - 适配器模式
  • 【python设计模式】8、桥接模式
  • Python入门教程+项目实战-7.2节: 循环控制结构
  • 【Python入门第四十二天】Python丨NumPy 数组裁切
  • 自定义starter
  • 【Ruby学习笔记】4.Ruby 类和对象及类案例
  • OBProxy 路由策略与使用运维-常见问题
  • FIFO的工作原理及其设计
  • 哈利波特c++千行代码
  • C语言程序环境和预处理
  • USB抓包分析