Press "Enter" to skip to content

在Python中应用描述性和推断性统计学

在Python中应用描述性和推断性统计学 四海 第1张

统计学是一个包括从收集数据和数据分析到数据解释的活动的领域。它是一个帮助相关方在面对不确定性时做出决策的研究领域。

统计学领域的两个主要分支是描述性统计和推论统计。描述性统计是一个与使用各种方式对数据进行总结的分支,例如摘要统计、可视化和表格。而推论统计更多地涉及基于数据样本对总体进行泛化。

本文将通过一个Python示例介绍描述性统计和推论统计中的一些重要概念。让我们开始吧。

描述性统计

如我之前提到的,描述性统计侧重于数据总结。它是将原始数据处理成有意义信息的科学。描述性统计可以通过图形、表格或摘要统计进行。然而,摘要统计是最常用的描述性统计方法,所以我们将重点关注这一点。

对于我们的示例,我们将使用以下数据集示例。

import pandas as pd
import numpy as np
import seaborn as sns

tips = sns.load_dataset('tips')
tips.head()

在Python中应用描述性和推断性统计学 四海 第2张

有了这些数据,我们将探索描述性统计。在摘要统计中,有两个最常用的:中心趋势度量和离散趋势度量。

中心趋势度量

中心趋势是数据分布或数据集的中心。中心趋势度量是获取或描述数据中心分布的活动。中心趋势度量将给出一个定义数据中心位置的单一值。

在中心趋势度量中,有三个常用的度量:

1. 平均值

平均值是一种产生代表我们数据中最常见值的单一值输出的方法。然而,平均值不一定是我们数据中观察到的值。

我们可以通过将数据中现有值的总和除以值的数量来计算平均值。我们可以用以下公式表示平均值:

在Python中应用描述性和推断性统计学 四海 第3张

在Python中,我们可以使用以下代码计算数据的平均值。

round(tips['tip'].mean(), 3)

2.998

使用pandas系列属性,我们可以获得数据的平均值。我们还将数据四舍五入,以便更容易阅读数据。

作为中心趋势度量的一种,平均值有一个缺点,即它受异常值的影响较大,这可能会使摘要统计结果产生偏差,不太能代表实际情况。在偏斜的情况下,我们可以使用中位数。

2. 中位数

中位数是数据排序后位于中间位置的单一值,表示数据的中间点位置(50%)。作为中心趋势度量,当数据呈偏斜分布时,中位数更可取,因为它可以代表数据的中心,而异常值或偏斜值不会对它产生强烈影响。

中位数通过将所有数据值按升序排列,并找到中间值来计算。对于奇数个数据值,中位数是中间值,但对于偶数个数据值,中位数是两个中间值的平均值。

我们可以使用以下代码用Python计算中位数。

tips['tip'].median()

2.9

3. 众数

众数是数据中出现频率最高或最常出现的值。数据可以有一个众数(单峰)、多个众数(多峰)或没有众数(如果没有重复值)。

众数通常用于分类数据,但也可用于数值数据。对于分类数据,可能只使用众数。这是因为分类数据没有任何数值来计算均值和中位数。

我们可以使用以下代码计算数据的众数。

tips['day'].mode()

 

在Python中应用描述性和推断性统计学 四海 第4张   结果是一个具有分类类型值的系列对象。’Sat’值是唯一一个显示出来的,因为它是数据的众数。

 

传播测量

 

传播测量(或变异性、离散度)是用于描述数据值的传播的度量。该度量提供了有关数据值在数据集内部如何变化的信息。它通常与中心趋势的测量一起使用,因为它们补充了整体数据信息。

传播测量还有助于了解我们的中心趋势测量输出的情况。例如,较高的数据传播可能表明观察数据和数据均值之间存在显著偏差,而数据均值可能不是最能代表数据的值。

以下是各种传播测量的使用方法。

  1. 范围 

范围是数据最大值(最大值)和最小值(最小值)之间的差异。它是最直接的测量,因为信息只使用数据的两个方面。

使用可能有限,因为它对数据分布的描述不太多,但如果我们对数据有一定的阈值要求,它可能有助于我们的假设。让我们尝试使用Python计算数据范围。

tips['tip'].max() - tips['tip'].min()

 

9.0

 

2. 方差

 

方差是一种基于数据均值来衡量数据传播的测量。我们通过将每个值与数据均值的差的平方除以数据值的数量来计算方差。由于我们通常使用数据样本而不是总体,所以我们将数据值的数量减去一。样本方差的方程如下图所示。

  在Python中应用描述性和推断性统计学 四海 第5张  

方差可以解释为一个值,指示数据与均值和彼此之间的分散程度。方差越大,数据传播范围越广。然而,方差计算对异常值非常敏感,因为我们将得分与均值的偏差平方,这意味着我们给异常值更多的权重。

让我们尝试使用Python计算数据方差。

round(tips['tip'].var(),3)

 

1.914

 

上面的方差可能表明我们的数据方差很高,但我们可能想使用标准差来获得实际的数据传播测量值。

 

3. 标准差

 

标准差是衡量数据传播的最常用方法,它是通过取方差的平方根来计算的。

  在Python中应用描述性和推断性统计学 四海 第6张  

方差和标准差之间的区别在于它们的值提供的信息。方差值仅指示值与均值的分散程度,并且方差单位与原始值不同,因为我们对原始值进行了平方。然而,标准差值与原始数据值的单位相同,这意味着标准差值可以直接用于测量数据的传播。

让我们尝试使用以下代码计算标准差。

round(tips['tip'].std(),3)

 

1.384

 

标准差最常见的应用之一是估计数据间隔。我们可以使用经验法则或68-95-99.7法则来估计数据间隔。经验法则指出,估计数据的68%位于数据均值±一个标准差之内,95%位于均值±两个标准差之内,99.7%位于均值±三个标准差之内。在这个间隔之外,可以假定为异常值。

 

4. 四分位距

 

四分位距(Interquartile Range,简称IQR)是使用第一四分位数和第三四分位数之间的差异来计算的一种散布度量。四分位数本身是将数据分为四个不同部分的值。为了更好地理解,让我们看一下下面的图片。

  在Python中应用描述性和推断性统计学 四海 第7张  

四分位数是将数据分割而不是除法的结果。我们可以使用以下代码找到四分位数和IQR。

q1, q3= np.percentile(tips['tip'], [25 ,75])
iqr = q3 - q1

print(f'Q1: {q1}\nQ3: {q3}\nIQR: {iqr}')

 

Q1: 2.0

Q3: 3.5625

IQR: 1.5625

 

使用numpy的percentile函数,我们可以获取四分位数。通过减去第三四分位数和第一四分位数,我们得到IQR。

IQR可以用于通过获取IQR值并计算数据的上限/下限来识别数据异常值。上限公式为Q3 + 1.5 * IQR,而下限为Q1 – 1.5 * IQR。任何超过这个限制的值都被视为异常值。

为了更好地理解,我们可以使用箱线图来了解IQR异常值检测。

sns.boxplot(tips['tip'])

 

在Python中应用描述性和推断性统计学 四海 第8张  

上面的图片显示了数据的箱线图和数据的位置。上限后面的黑点是我们认为的异常值。

 

推论统计学

 

推论统计学是根据数据样本推广总体信息的一个分支。由于往往无法获得整个数据总体,我们需要从数据样本中进行推论。例如,我们想了解印度尼西亚人对人工智能的观点。然而,如果我们对印度尼西亚人口中的每个人进行调查,这个研究将需要很长时间。因此,我们使用代表总体的样本数据,并对印度尼西亚人口对人工智能的观点进行推论。

让我们探索我们可以使用的各种推论统计学方法。

 

1. 标准误差

 

标准误差是一种推论统计学的测量方法,用于估计给定样本统计量的真实总体参数。标准误差信息是样本统计量在重复实验中使用来自同一总体的数据样本时会变化的程度。

平均值的标准误差(SEM)是最常用的标准误差类型,因为它告诉我们在给定样本数据的情况下平均值将如何代表总体。要计算SEM,我们将使用以下方程式。

  在Python中应用描述性和推断性统计学 四海 第9张 作者提供的图片  

平均值的标准误差将使用标准偏差进行计算。数据的标准误差越小,样本数量越高,其中较小的SE意味着我们的样本很好地代表了数据总体。

要获取平均值的标准误差,我们可以使用以下代码。

from scipy.stats import sem

round(sem(tips['tip']),3)

 

0.089

 

我们经常将SEM与数据平均值一起报告,其中真实的平均数估计将在mean±SEM范围内。

data_mean = round(tips['tip'].mean(),3)
data_sem = round(sem(tips['tip']),3)
print(f'真实的总体平均数估计在{data_mean+data_sem}到{data_mean-data_sem}的范围内')

真实的总体均值估计在3.087到2.9090000000000003的范围内

2. 置信区间

置信区间也用于估计真实的总体参数,但它引入了置信水平。置信水平用于以一定的置信百分比估计真实的总体参数范围。

在统计学中,置信度可以描述为概率。例如,具有90%置信水平的置信区间意味着真实的总体均值估计有90次在置信区间的上限和下限值之间。置信区间的计算使用以下公式。

在Python中应用描述性和推断性统计学 四海 第10张 Image by Author

上述公式除了Z之外都是熟悉的符号。Z符号是通过定义置信水平(例如95%)并使用Z临界值表确定Z值(95%置信水平的Z值为1.96)获得的Z分数。此外,如果样本小于30,则应使用t分布表。

我们可以使用以下代码使用Python获得置信区间。

import scipy.stats as st

st.norm.interval(confidence=0.95, loc=data_mean, scale=data_sem)

(2.8246682963727068, 3.171889080676473)

上述结果可以解释为我们的数据真实的总体均值在95%置信水平下落在2.82到3.17的范围内。

3. 假设检验

假设检验是从数据样本中推断总体的推理统计方法。估计的总体可以是总体参数或概率。

在假设检验中,我们需要有一个称为零假设(H0)和备择假设(Ha)的假设。零假设和备择假设总是相反的。然后,假设检验过程将使用样本数据来确定是否可以拒绝零假设,或者我们未能拒绝它(这意味着我们接受备择假设)。

当我们执行假设检验方法来判断是否必须拒绝零假设时,我们需要确定显著性水平。显著性水平是允许在测试中发生的第一类错误(当H0为真时拒绝H0)的最大概率。通常,显著性水平为0.05或0.01。

为了从样本中得出结论,假设检验使用P值来测量在假设零假设为真的情况下样本结果的可能性。当P值小于显著性水平时,我们拒绝零假设;否则,我们不能拒绝它。

假设检验是一种可以在任何总体参数上执行的方法,也可以在多个参数上执行。例如,下面的代码将对两个不同的总体执行t检验,以确定此数据是否与另一个显著不同。

st.ttest_ind(tips[tips['sex'] == 'Male']['tip'], tips[tips['sex'] == 'Female']['tip'])

Ttest_indResult(statistic=1.387859705421269, pvalue=0.16645623503456755)

在t检验中,我们比较两组之间的均值(成对测试)。t检验的零假设是两组均值之间没有差异,而备择假设是两组均值之间存在差异。

t检验的结果显示,男性和女性之间的小费金额没有显著差异,因为P值高于0.05的显著性水平。这意味着我们未能拒绝零假设,并得出结论两组均值之间没有差异。

当然,上述测试只是简化了假设检验的示例。在执行假设检验时,我们还需要了解许多假设,并且有许多测试可供我们选择以满足我们的需求。

结论

 

统计学领域有两个主要的分支,我们需要了解:描述性统计和推断性统计。描述性统计关注如何总结数据,而推断性统计则处理数据的泛化,以便对总体进行推断。在本文中,我们讨论了描述性统计和推断性统计,并提供了使用Python代码的示例。Cornellius Yudha Wijaya是一名数据科学助理经理和数据作者。在全职工作于Allianz Indonesia期间,他喜欢通过社交媒体和写作媒体分享Python和数据技巧。

Leave a Reply

Your email address will not be published. Required fields are marked *