Python统计分析

  • 1、引言
  • 2、统计学
  • 2.1、统计学的定义与作用
  • 2.2、数据的类型
  • 2.3、描述性统计
  • 2.4 、概率与概率分布
  • 2.5、假设检验
  • 2.6、回归分析
  • 2.7 代码示例
  • 3、总结


1、引言

小屌丝:鱼哥, 你说这个是咋整出来的了

小鱼:啥,发来看看

【统计分析】数据科学必备知识之:统计学基础_numpy

小屌丝:你看, 就是这个

小鱼:这个, 你在《数据分析》专栏就可以看到啊,

小屌丝:我看了啊, 但是, 没有想想要的内容

小鱼:… 这厉害了,你想要啥内容?

小屌丝:我想学一学统计学的内容

小鱼:这个…

小屌丝:咋了鱼哥,请把省略号的内容补充完

小鱼:以你的聪明才智,还用我说出来

小屌丝:这个… 那我知道了

小鱼:嗯,果然,还得是你

小屌丝:那必须的, 鱼哥,那你开讲吧

小鱼:奈斯

【统计分析】数据科学必备知识之:统计学基础_matplotlib_02

2、统计学

2.1、统计学的定义与作用

统计学是一门研究数据收集、整理、分析和解释的学科。它通过运用概率论、数理统计等方法,对数据进行量化分析,以揭示数据背后的规律和信息。

在数据科学中,统计学的作用主要体现在以下几个方面:

  • 数据描述与概括:通过统计指标(如均值、中位数、标准差等)对数据的集中趋势、离散程度等进行描述,使我们能够快速了解数据的基本特征。
  • 数据可视化:将统计数据以图表的形式展示出来,如柱状图、折线图、箱线图等,帮助我们更直观地理解数据的分布和趋势。
  • 假设检验:用于判断样本数据是否能够支持某个假设,从而对总体特征进行推断。
  • 回归分析:建立变量之间的数学关系,用于预测和解释因变量的变化。
  • 方差分析:比较多个总体的均值是否存在显著差异,常用于实验设计和数据分析。

2.2、数据的类型

在进行统计分析之前,我们需要了解数据的类型。数据可以分为以下几种:

  • 定量数据(数值型数据):可以用数值来表示的数据,分为离散型数据(如整数)和连续型数据(如实数)。
  • 定性数据(分类数据):不能用数值来表示的数据,只能归为不同的类别。例如,性别(男、女)、职业(教师、医生、工程师等)。

2.3、描述性统计

描述性统计是对数据的基本特征进行概括和描述的方法。以下是一些常用的描述性统计指标:

  1. 集中趋势
  • 均值(Mean):所有数据的平均值,计算公式为:【统计分析】数据科学必备知识之:统计学基础_数据分析_03,其中【统计分析】数据科学必备知识之:统计学基础_python_04为数据个数,【统计分析】数据科学必备知识之:统计学基础_数据分析_05为第【统计分析】数据科学必备知识之:统计学基础_matplotlib_06个数据。
  • 中位数(Median):将数据按照从小到大的顺序排列后,位于中间位置的数值。如果数据个数为奇数,则中位数为中间的那个数;如果数据个数为偶数,则中位数为中间两个数的平均值。
  • 众数(Mode):数据中出现次数最多的数值。
  1. 离散程度
  • 方差(Variance):反映数据的离散程度,计算公式为:【统计分析】数据科学必备知识之:统计学基础_pandas_07
  • 标准差(Standard Deviation):方差的平方根,【统计分析】数据科学必备知识之:统计学基础_数据分析_08
  • 极差(Range):数据中的最大值与最小值之差。
  1. 分布形态
  • 偏度(Skewness):描述数据分布的不对称程度。如果偏度大于 0,数据分布为右偏;如果偏度小于 0,数据分布为左偏;如果偏度等于 0,数据分布为对称分布。
  • 峰度(Kurtosis):描述数据分布的峰态。峰度大于 0 表示数据分布比正态分布更尖峰;峰度小于 0 表示数据分布比正态分布更平峰。

2.4 、概率与概率分布

概率是描述随机事件发生可能性大小的数值。在统计学中,我们经常使用概率分布来描述随机变量的取值规律。

  1. 离散型概率分布
  • 二项分布(Binomial Distribution):用于描述在【统计分析】数据科学必备知识之:统计学基础_python_04次独立重复试验中,成功次数的概率分布。
  • 泊松分布(Poisson Distribution):用于描述在一定时间或空间内,随机事件发生次数的概率分布。
  1. 连续型概率分布
  • 正态分布(Normal Distribution):也称为高斯分布,是最常见的概率分布之一。正态分布的概率密度函数为:【统计分析】数据科学必备知识之:统计学基础_数据分析_10,其中【统计分析】数据科学必备知识之:统计学基础_matplotlib_11为均值,【统计分析】数据科学必备知识之:统计学基础_numpy_12为标准差。
  • 均匀分布(Uniform Distribution):在给定区间内,随机变量的取值具有相等的概率。

2.5、假设检验

假设检验是一种基于样本数据对总体参数进行推断的方法。
它的基本思想是先提出一个假设(原假设【统计分析】数据科学必备知识之:统计学基础_pandas_13),然后通过样本数据来检验这个假设是否成立。
如果样本数据与原假设之间的差异足够大,我们就拒绝原假设,接受备择假设【统计分析】数据科学必备知识之:统计学基础_python_14;否则,我们就不能拒绝原假设。

假设检验的步骤如下:

  • 1) 提出原假设和备择假设。
  • 2) 选择合适的检验统计量。
  • 3) 确定显著性水平【统计分析】数据科学必备知识之:统计学基础_python_15
  • 4) 根据样本数据计算检验统计量的值。
  • 5) 比较检验统计量的值与临界值的大小,做出决策。

常见的假设检验包括:

  • Z 检验:用于大样本(【统计分析】数据科学必备知识之:统计学基础_pandas_16)情况下,对总体均值的检验。
  • t 检验:用于小样本(【统计分析】数据科学必备知识之:统计学基础_numpy_17)情况下,对总体均值的检验。
  • 卡方检验(Chi-Square Test):用于对分类数据的独立性检验和拟合优度检验。

2.6、回归分析

回归分析是研究变量之间关系的一种统计方法。它可以帮助我们建立自变量和因变量之间的数学模型,从而对因变量进行预测和解释。

  1. 简单线性回归:只有一个自变量的线性回归模型,其数学表达式为:【统计分析】数据科学必备知识之:统计学基础_matplotlib_18,其中【统计分析】数据科学必备知识之:统计学基础_python_19为因变量,【统计分析】数据科学必备知识之:统计学基础_matplotlib_20为自变量,【统计分析】数据科学必备知识之:统计学基础_numpy_21为截距,【统计分析】数据科学必备知识之:统计学基础_matplotlib_22为斜率,【统计分析】数据科学必备知识之:统计学基础_numpy_23为误差项。
  2. 多元线性回归:有多个自变量的线性回归模型,其数学表达式为:【统计分析】数据科学必备知识之:统计学基础_pandas_24

在进行回归分析时,我们需要对模型进行评估,常用的评估指标包括:

  1. 决定系数(R-squared):反映模型对数据的拟合程度,取值范围在【统计分析】数据科学必备知识之:统计学基础_python_25【统计分析】数据科学必备知识之:统计学基础_pandas_26之间,越接近【统计分析】数据科学必备知识之:统计学基础_pandas_26表示模型拟合效果越好。
  2. 均方误差(Mean Squared Error,MSE):衡量模型预测值与实际值之间的平均误差。
  3. 均方根误差(Root Mean Squared Error,RMSE):均方误差的平方根。

2.7 代码示例

#统计学分析(标准误差、置信区间、t检验、p值)
import pandas as pd
import numpy as np

# 读取CSV文件并设置索引列
pd.read_csv("c4_epa_air_quality.csv", index_col=0)

# 显示前10行数据
epa_data.head(10)

# 描述性统计分析 'state_name' 列
epa_data["state_name"].describe()

# 计算 'aqi' 列的均值
np.mean(epa_data["aqi"])

# 计算 'aqi' 列的中位数
np.median(epa_data["aqi"])

# 计算 'aqi' 列的最小值
np.min(epa_data["aqi"])

# 计算 'aqi' 列的最大值
np.max(epa_data["aqi"])

# 计算 'aqi' 列的标准差
np.std(epa_data["aqi"], ddof=1)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as smfrom scipy import stats
# 读取修改后的CSV文件
data = pd.read_csv("modified_c4_epa_air_quality.csv")

# 显示前10行数据
data.head(10)
# 快速创建直方图
data['aqi_log'].hist()

# 计算 'aqi_log' 列的标准差和均值
std_aqi_log = data['aqi_log'].std()mean_aqi_log = data['aqi_log'].mean()

# 1倍标准差:覆盖大约68%的数据。
lower_limit = mean_aqi_log - 1 * std_aqi_log
upper_limit = mean_aqi_log + 1 * std_aqi_log

# 判断产生1和0布尔值,然后取平均值mean,获得位于这个区间数值的占比的百分数
((data['aqi_log'] >= lower_limit) & (data['aqi_log'] <= upper_limit)).mean() * 100
# 2倍标准差:覆盖大约95%的数据。
lower_limit = mean_aqi_log - 2 * std_aqi_log
upper_limit = mean_aqi_log + 2 * std_aqi_log

# 判断产生1和0布尔值,然后取平均值mean,获得位于这个区间数值的占比的百分数
((data['aqi_log'] >= lower_limit) & (data['aqi_log'] <= upper_limit)).mean() * 100

# 3倍标准差:覆盖大约99.7%的数据。
lower_limit = mean_aqi_log - 3 * std_aqi_log
upper_limit = mean_aqi_log + 3 * std_aqi_log

# 判断产生1和0布尔值,然后取平均值mean,获得位于这个区间数值的占比的百分数
((data['aqi_log'] >= lower_limit) & (data['aqi_log'] <= upper_limit)).mean() * 100

# 计算z_score,z_score等于0表示数据点等于均值,大于小于0表示偏离均值程度
data['z_score'] = stats.zscore(data['aqi_log'], ddof=1)data.head()

# 在正态分布中,约有 99.7% 的数据点的 z-score 绝对值小于或等于 3。这意味着,z-score 绝对值大于 3 的数据点占比约 0.3%,通常被视为异常值。
data[(data['z_score'] > 3) | (data['z_score'] < -3)]data[data['z_score'].abs() > 3]

import statsmodels.api as smfrom scipy import stats
# 读取CSV文件并设置索引列
epa_data = pd.read_csv("c4_epa_air_quality.csv", index_col=0)

# 显示前几行数据
epa_data.head()

# 抽样50个,replace=True表示可以放回
sampled_data = epa_data.sample(n=50, replace=True, random_state=42)

# 初始化估计列表
estimate_list = []

# 进行10000次抽样,计算每次抽样的均值并存储在列表中
for i in range(10000):    
	estimate_list.append(epa_data['aqi'].sample(n=50, replace=True).mean())

# 将估计列表转换为DataFrame
estimate_df = pd.DataFrame(data={'estimate': estimate_list})estimate_df

# 计算样本均值的均值
mean_sample_means = estimate_df['estimate'].mean()mean_sample_means

# 绘制样本均值的直方图
estimate_df['estimate'].hist()

# 计算标准误差,用标准差/样本数量的平方根# 样本量n越大,标准误差越小,说明估计越精确# 这是中心极限定理的一个重要应用,它告诉我们样本均值的分布的离散程度。
standard_error = sampled_data['aqi'].std() / np.sqrt(len(sampled_data))

# 绘制样本的直方密度图
plt.figure(figsize=(8, 5))plt.hist(estimate_df['estimate'], bins=25, density=True, alpha=0.4, label="Histogram")

import pandas as pdimport numpy as np
# 读取CSV文件
aqi = pd.read_csv('c4_epa_air_quality.csv')

# 定义感兴趣的州
rre_states = ['California', 'Florida', 'Michigan', 'Ohio', 'Pennsylvania', 'Texas']

# 筛选感兴趣的州的数据
aqi_rre = aqi[aqi['state_name'].isin(rre_states)]

# 按州分组并计算每个州的AQI均值和计数
aqi_rre.groupby(['state_name']).agg({"aqi": "mean", "state_name": "count"})

# 绘制箱线图
sns.boxplot(x=aqi_rre["state_name"], y=aqi_rre["aqi"])

# 筛选加利福尼亚州的数据
aqi_ca = aqi[aqi['state_name'] == 'California']

# 计算加利福尼亚州的AQI均值
sample_mean = aqi_ca['aqi'].mean()

# 设置置信水平
confidence_level = 0.95

# 设置z值
z_value = 1.96

# 计算标准误差
standard_error = aqi_ca['aqi'].std() / np.sqrt(aqi_ca.shape[0])

# 计算置信区间的边界
margin_of_error = standard_error * z_value
upper_ci_limit = sample_mean + margin_of_error
lower_ci_limit = sample_mean - margin_of_error(lower_ci_limit, upper_ci_limit)

# 使用scipy计算置信区间
from scipy import stats
stats.norm.interval(alpha=confidence_level, loc=sample_mean, scale=standard_error)

# 筛选洛杉矶的数据
ca_la = aqi[aqi['county_name'] == 'Los Angeles']

# 筛选加利福尼亚州其他县的数据
ca_other = aqi[(aqi['state_name'] == 'California') & (aqi['county_name'] != 'Los Angeles')]

# 设置显著性水平
significance_level = 0.05

# 进行独立样本t检验
stats.ttest_ind(a=ca_la['aqi'], b=ca_other['aqi'], equal_var=False)

# 筛选纽约州的数据
ny = aqi[aqi['state_name'] == 'New York']

【统计分析】数据科学必备知识之:统计学基础_pandas_28

3、总结

统计学作为数据科学的重要组成部分,为我们提供了理解和分析数据的方法和工具。

通过学习统计学的基础知识,我们可以更好地描述数据特征、进行数据分析和建立预测模型。

在实际应用中,我们需要根据具体问题选择合适的统计方法,并结合领域知识进行深入分析。

我是小鱼

  • 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)评测一等奖获得者

关注小鱼,学习【数据分析】最新最全的领域知识。