数据科学项目:数据总结、描述与可视化

数据科学项目的核心任务是总结、描述和可视化数据。要创建最佳的模型,必须深入了解数据及其属性。通过探索数据的特征和属性,可以使用描述性统计来获得洞察和数值总结,这有助于更有效地理解和处理数据,以完成机器学习任务。描述性统计是数据分析的默认过程,没有描述性统计分析,探索性数据分析(EDA)是不完整的。

数据收集与清洗

在开始分析之前,需要完成数据收集和清洗过程。将从特定来源收集数据,并且只使用测试数据进行分析。以下是清洗训练数据的代码示例。

# Python代码示例 # 假设已经导入了必要的库和数据集 # 以下是处理空值的代码 # 选择替换空值,而不是删除包含空值的行或列 # 首先,找到Item_Identifier及其对应的Item_Weight # 然后,用相应item_identifier的已知Item_weight替换Item_Weight中的空值 # 对于Item_Visibility,认为0可视为空值,并采取上述步骤 # 由于Outlet_Size对分析和模型预测不太重要,选择删除该列 # 将Item_fat_content列中的LF和reg替换为Low Fat和Regular Fat # 计算商店的年龄,并将这些值保存在Outlet_years列中,然后删除Outlet_Establishment_year列

从代码中可以了解到,处理空值有多种策略,包括删除包含空值的行、删除包含空值的列或替换空值。在数据量不大的情况下,前两种策略是可行的。选择第三种策略来解决空值问题。

描述性统计分析

描述性统计分析包括中心趋势的度量和离散程度的度量。中心趋势的度量是通过均值、中位数和众数来寻找数值和分类数据的中心。

使用Python计算数据集属性的均值、中位数、计数和众数。计数并不直接帮助找到数据集属性的中心,但它用于均值、中位数和众数的计算。还计算了分类变量每个类别的总计数,以及数值列数据的总计数。

# 以下是计算分类列类别及其计数的代码 # 循环遍历分类列以绘制类别及其计数

从输出分析中,可以了解到数据是否平衡。例如,可以从图中看出,Fruits和Vegetables类别的行数远多于Seafood类别。还可以假设,在Fruits和Vegetables类别下的销售量远多于Seafood类别。

列中值的总和除以该列的总行数称为均值,也称为平均值。使用train.mean()计算训练数据集数值列的均值。以下是分类列的代码示例。

# 计算分类列的均值 print(train[['Item_Outlet_Sales','Outlet_Type']].groupby(['Outlet_Type']).agg({'Item_Outlet_Sales':'mean'}))

输出分析显示,平均商店年龄为15年,平均商店销售量为2100。Outlet_Type类别中,超市类型3的销售量远高于杂货店类别。还可以假设,超市类别比杂货店类别更受欢迎。

属性的中心值称为中位数。计算中位数值的方法是首先将列数据按升序或降序排序,然后找到总行数并除以2。输出值是该列的中位数。中位数将数据点分为两部分,意味着50%的数据点位于中位数之上,50%位于中位数之下。通常,同一数据的中位数和均值是不同的。中位数不受异常值的影响。由于异常值,均值和中位数之间的差异会增加。

# 计算数值列的中位数 print(train[['Item_Outlet_Sales','Outlet_Type']].groupby(['Outlet_Type']).agg({'Item_Outlet_Sales':'median'}))

大多数观察结果与均值观察结果相同。均值和中位数之间的差异是由于异常值造成的。在分类变量中也可以观察到这种差异。

众数是列中出现次数最多的数据点。每个列只有一个均值和中位数,但属性可以有多个众数值。使用train.mode()计算数据集数值列的众数。以下是分类列的代码示例。

# 计算分类列的众数 print(train[['Item_Outlet_Sales','Outlet_Type','Outlet_Identifier','Item_Identifier']].groupby(['Outlet_Type']).agg(lambda x:x.value_counts().index[0]))

输出分析显示,Outlet_Type的众数值为超市类型1。超市类型1类别中最畅销的商品或众数值是FDZ15。Item_Identifier FDH50是Outlet_Type类别中最畅销的商品。

离散程度的度量解释了数据集中属性值的多样性。它也被称为扩散度量。从这个统计数据中,可以了解数据是如何从一个点扩散到另一个点的。以下是属于离散程度度量的统计数据。

列中最大值和最小值之间的差称为范围。以下是计算范围的代码。

# 计算数值列的范围 for i in num_col: print(f"Column: {i} Max_Value: {max(train[i])} Min_Value: {min(train[i])} Range: {round(max(train[i]) - min(train[i]),2)}")

输出分析显示,Item_MRP和Item_Outlet_sales的范围很高,可能需要转换。在超市类型3类别下,Item_MRP的变化很大。

可以通过计算多个百分位的摘要来描述列值的扩散。中位数也被称为数据的第50百分位数。以下是不同的百分位数。最小值等于第0百分位数。最大值等于第100百分位数。第一四分位数等于第25百分位数。第三四分位数等于第75百分位数。以下是计算四分位数的代码。

# 计算四分位数

第三四分位数和第一四分位数之间的差也称为四分位距(IQR)。此外,大多数数据点落在IQR之下。

标准差值告诉所有数据点与均值的偏离程度。标准差受异常值的影响,因为它使用均值进行计算。

# 计算标准差 for i in num_col: print(i , round(train[i].std(),2))

Pandas还提供了一个快捷方式来计算所有上述统计值。

# 使用Pandas计算描述性统计值 Train.describe()

方差是标准差的平方。在异常值的情况下,方差值变得大且明显。因此,它也受异常值的影响。

# 计算方差 for i in num_col: print(i , round(train[i].var(),2)) # 计算偏度 train.skew()
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485