数据分析练习——学习一般分析步骤
目录
一、准备工作
二、导入库和数据
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_sold
受 price_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、结果解释和报告
在结果解释和报告阶段,您需要根据分析结果撰写一份报告,报告中应包括以下内容:
- 项目背景和目的:说明分析的背景、目的和应用场景。
- 数据来源和描述:简要介绍数据的来源、类型、结构和特点。
- 数据清洗和预处理:描述数据清洗和预处理过程中采取的方法和步骤,以及数据质量的改进情况。
- EDA 过程和结果:详细介绍 EDA 过程中使用的方法和技术
四、学习过程中一些问题的回答
1、通过训练模型并对测试数据进行预测,预测了什么,为什么要预测?
答:这次实例中通过训练线性回归模型并对测试数据进行预测,预测的是输出变量(也称为响应变量或因变量)的值,这些值可以是数字、类别或一些其他形式。预测的目的是根据已知的输入变量(也称为解释变量或自变量)的值来预测输出变量的值。例如,如果我们想预测房屋的销售价格,我们可以使用线性回归模型,其中输入变量可能包括房屋的大小、位置、年龄和卫生间数量等,输出变量是房屋的销售价格。这种预测有助于我们了解数据之间的关系,并提供有用的信息,例如房屋价格随着卫生间数量增加而增加等。
2、”评估这种关系的存在程度以及模型的预测能力“,如何评估以及为什么要评估?
答:要评估线性回归模型中变量之间的关系强度和预测能力,可以使用各种统计指标,例如R方值,均方误差(MSE),平均绝对误差(MAE)等。R方值衡量模型对数据的拟合程度,值介于0到1之间,越接近1表示模型拟合得越好。MSE和MAE衡量模型的预测误差,值越小表示模型预测得越准确。评估模型的目的是确定模型是否适合数据,以及它是否可以可靠地预测未来数据的值。
3、为什么要找与项目需求和数据最适合的模型?
答:选择最合适的模型是为了确保预测的准确性和可靠性。不同的模型适用于不同的数据类型和问题类型。例如,如果我们的数据包含二元分类问题(例如,区分垃圾邮件和正常邮件),则逻辑回归模型可能比线性回归模型更适合。在选择模型时,需要考虑数据的特点,例如数据的分布、是否存在非线性关系等。选择正确的模型可以帮助我们更好地理解数据,并提高预测的准确性和可靠性。
-----------------------------------------------------------------我是分割线--------------------------------------------------------------
看完了觉得不错就点个赞或者评论下吧,感谢!!!
如果本文哪里有误随时可以提出了,收到会尽快更正的