1. Python 基础
- 函数定义
def
关键字:在 Python 中,def
是定义函数的关键字。例如def sepal_ratio(row):
,它开启了一个函数定义的语句块。其中sepal_ratio
是函数名,这个名称应该尽可能地反映函数的功能,方便代码的阅读和理解。- 函数参数:函数参数(如
row
)是函数接收外部数据的途径。参数的名称要有具体含义,在这里row
用于接收数据集中的一行数据。在函数内部,通过这个参数来访问和操作传递进来的数据。 - 参数名称的灵活性:函数参数名称可以根据需要修改,只要在函数内部对参数的引用也相应地修改即可。例如把
row
改成row1
,并在函数内部所有使用row
的地方替换为row1
,函数功能不变。
- 异常处理
try - except
结构:用于捕获和处理在代码执行过程中可能出现的异常情况。在sepal_ratio
函数中,try
块内放置正常的计算逻辑return row['sepal length (cm)'] / row['petal length (cm)']
。当执行这段代码时,如果出现ZeroDivisionError
(即除数为 0 的情况),程序会立即跳转到except
块,并执行其中的return np.nan
语句。np.nan
是numpy
库中的一个特殊值,表示 “不是一个数字(Not a Number)”,用于在数据处理中表示缺失值或无效的数值。
- 变量作用域:在函数内部定义的变量(如函数参数
row
),其作用域仅限于函数内部。这意味着在函数外部无法直接访问row
变量,除非通过函数返回值或者其他合适的方式将其传递出来。
2. numpy
库相关知识
np.c_
函数- 功能概述:
np.c_
是numpy
库中的一个函数,用于按列连接数组。在鸢尾花数据集的示例中df = pd.DataFrame(data=np.c_[iris['data'], iris['target']], columns = iris['feature_names']+['target'])
,iris['data']
包含了鸢尾花的特征数据(如长度、宽度等),是一个二维数组,iris['target']
是一个一维数组,表示类别标签。np.c_
函数将这两个数组按列拼接在一起,形成一个新的二维数组作为DataFrame
的数据部分。 - 应用场景:常用于将不同的数据组合在一起构建数据集,特别是当有特征数据和对应的标签数据,或者多个相关的数据数组需要合并为一个完整的数据集用于数据分析、机器学习模型训练等场景。
- 功能概述:
np.nan
和np.isnan
函数np.nan
的性质:np.nan
表示不是一个数字(Not a Number),用于表示数据中的缺失值或无效值。它具有一些特殊的数学性质,例如任何数与np.nan
进行算术运算(除了一些特殊的聚合函数会忽略它),结果通常还是np.nan
。np.isnan
函数:用于检查数组中的元素是否为np.nan
。例如,在更复杂的数据清洗或验证过程中,可以使用np.isnan
来定位数据中的缺失值位置,以便进行进一步的处理,如填充、删除或其他特殊的统计分析(比如计算非缺失值的统计量)。
numpy
数组的数值计算方法- 方差计算(
np.var
):方差是衡量数据离散程度的统计量。对于numpy
数组arr
,np.var(arr)
可计算其方差。方差的计算是基于每个元素与数组均值的差值的平方的平均值。它能帮助我们了解数据的分布情况,例如在数据分析中,通过计算特征的方差来评估特征值的分散程度,高方差可能表示数据的多样性较大,在特征选择等操作中有一定的指导意义。 - 标准差计算(
np.std
):标准差是另一种衡量数据离散程度的统计量,它是方差的平方根。对于numpy
数组arr
,使用np.std(arr)
计算。标准差与方差类似,但由于其与原始数据的单位相同,在实际应用中更直观。在数据预处理阶段,常根据标准差对数据进行标准化,使数据符合特定的分布要求,便于后续的模型训练和分析。
- 方差计算(
3. pandas
库相关操作
DataFrame
数据结构- 创建与结构理解:
DataFrame
是pandas
中用于处理二维表格数据的核心对象。它类似于电子表格或 SQL 中的表,可以包含不同类型的数据列。在示例中,通过从sklearn.datasets
加载鸢尾花数据集,并使用pandas.DataFrame
函数创建了df
这个DataFrame
。数据集中的特征名称(如sepal length (cm)
、sepal width (cm)
等)作为列名,数据集的数据作为表格中的数据,同时还包含一个target
列用于分类等用途。 - 列的访问与操作:可以通过类似
df['column_name']
的方式访问DataFrame
中的列。例如df['sepal_ratio']
用于访问名为sepal_ratio
的列,同时也可以通过这种方式对列进行赋值操作,如创建新列或修改已有列的值。
- 创建与结构理解:
apply
方法- 函数应用方向:
apply
方法用于将一个自定义函数应用到DataFrame
的每一行或每一列。axis
参数控制应用的方向,当axis = 1
时,表示沿着行方向应用函数。这意味着pandas
会将DataFrame
中的每一行数据打包成一个pandas.Series
对象,并将其传递给指定的函数(如sepal_ratio
函数)。 - 逐行计算与新列创建:通过
df['sepal_ratio'] = df.apply(sepal_ratio, axis = 1)
的操作,pandas
会逐行调用sepal_ratio
函数,计算每行数据的花萼长度和花瓣长度的比值,并将这些比值作为新的一列(sepal_ratio
列)添加到DataFrame
中。
- 函数应用方向:
groupby
方法- 分组操作原理:
groupby
方法用于对DataFrame
进行分组操作。例如dfGroup = df.groupby('target')
是按照df
中的'target'
列的值对数据进行分组。这意味着具有相同'target'
值的数据行将被分为一组。分组后的结果是一个DataFrameGroupBy
对象,它实际上是一种特殊的对象,包含了分组的信息和对每个分组进行操作的方法。 - 遍历分组数据:可以通过遍历
DataFrameGroupBy
对象来查看每个分组的数据情况。例如,使用for target_value, group in dfGroup:
循环,可以分别获取每个分组的键(target_value
,即'target'
列的值)和对应的分组数据(group
,是一个包含该组所有行的DataFrame
)。
- 分组操作原理:
- 分组后的聚合操作(计算平均值、方差、标准差等)
- 选择列与计算平均值(以
mean
为例):mean_sepal_ratio = dfGroup['sepal_ratio'].mean()
这行代码首先从分组对象dfGroup
中选择'sepal_ratio'
列,此时得到的是每个分组中的'sepal_ratio'
列数据。然后使用.mean()
方法计算每个分组中该列的平均值。类似地,可以使用.var()
和.std()
等方法计算分组后某列数据的方差和标准差,以进一步分析不同分组内数据的离散程度等特征。 - 结果对象的性质:计算得到的
mean_sepal_ratio
(或方差、标准差的计算结果)是一个Series
对象,其索引是分组的键(即target
的值),值是对应分组中'sepal_ratio'
列(或其他指定列)的平均值(或方差、标准差)。这个结果可以用于进一步的分析和展示,例如查看不同类别(根据'target'
列划分)下花萼长度和花瓣长度比值的平均差异、离散程度等情况。
- 选择列与计算平均值(以
4. 数据处理流程整体理解
- 整个数据处理流程是一个连贯的过程。首先定义一个用于计算每行数据比值的自定义函数
sepal_ratio
,在函数中考虑了可能出现的异常情况(除数为 0)并进行了合适的处理(返回np.nan
)。然后使用pandas
的apply
方法将这个函数应用到DataFrame
的每一行,从而创建一个新的列sepal_ratio
,记录每行数据的比值。接着,根据'target'
列的值使用groupby
方法对DataFrame
进行分组,最后通过选择分组后的'sepal_ratio'
列并计算平均值(或其他统计量如方差、标准差),得到了不同类别下比值的平均情况(或离散程度信息)。这个流程展示了如何在 Python 中结合函数定义、异常处理以及pandas
库的多种方法对数据进行自定义计算、添加新列、分组和分组聚合分析,是数据处理和分析中常见的操作流程。