Python统计分析
- 1、引言
- 2、统计学
- 2.1、统计学的定义与作用
- 2.2、数据的类型
- 2.3、描述性统计
- 2.4 、概率与概率分布
- 2.5、假设检验
- 2.6、回归分析
- 2.7 代码示例
- 3、总结
1、引言
小屌丝:鱼哥, 你说这个是咋整出来的了
小鱼:啥,发来看看
小屌丝:你看, 就是这个
小鱼:这个, 你在《数据分析》专栏就可以看到啊,
小屌丝:我看了啊, 但是, 没有想想要的内容
小鱼:… 这厉害了,你想要啥内容?
小屌丝:我想学一学统计学的内容
小鱼:这个…
小屌丝:咋了鱼哥,请把省略号的内容补充完
小鱼:以你的聪明才智,还用我说出来
小屌丝:这个… 那我知道了
小鱼:嗯,果然,还得是你
小屌丝:那必须的, 鱼哥,那你开讲吧
小鱼:奈斯
2、统计学
2.1、统计学的定义与作用
统计学是一门研究数据收集、整理、分析和解释的学科。它通过运用概率论、数理统计等方法,对数据进行量化分析,以揭示数据背后的规律和信息。
在数据科学中,统计学的作用主要体现在以下几个方面:
- 数据描述与概括:通过统计指标(如均值、中位数、标准差等)对数据的集中趋势、离散程度等进行描述,使我们能够快速了解数据的基本特征。
- 数据可视化:将统计数据以图表的形式展示出来,如柱状图、折线图、箱线图等,帮助我们更直观地理解数据的分布和趋势。
- 假设检验:用于判断样本数据是否能够支持某个假设,从而对总体特征进行推断。
- 回归分析:建立变量之间的数学关系,用于预测和解释因变量的变化。
- 方差分析:比较多个总体的均值是否存在显著差异,常用于实验设计和数据分析。
2.2、数据的类型
在进行统计分析之前,我们需要了解数据的类型。数据可以分为以下几种:
- 定量数据(数值型数据):可以用数值来表示的数据,分为离散型数据(如整数)和连续型数据(如实数)。
- 定性数据(分类数据):不能用数值来表示的数据,只能归为不同的类别。例如,性别(男、女)、职业(教师、医生、工程师等)。
2.3、描述性统计
描述性统计是对数据的基本特征进行概括和描述的方法。以下是一些常用的描述性统计指标:
- 集中趋势
- 均值(Mean):所有数据的平均值,计算公式为:
,其中
为数据个数,
为第
个数据。
- 中位数(Median):将数据按照从小到大的顺序排列后,位于中间位置的数值。如果数据个数为奇数,则中位数为中间的那个数;如果数据个数为偶数,则中位数为中间两个数的平均值。
- 众数(Mode):数据中出现次数最多的数值。
- 离散程度
- 方差(Variance):反映数据的离散程度,计算公式为:
。
- 标准差(Standard Deviation):方差的平方根,
。
- 极差(Range):数据中的最大值与最小值之差。
- 分布形态
- 偏度(Skewness):描述数据分布的不对称程度。如果偏度大于 0,数据分布为右偏;如果偏度小于 0,数据分布为左偏;如果偏度等于 0,数据分布为对称分布。
- 峰度(Kurtosis):描述数据分布的峰态。峰度大于 0 表示数据分布比正态分布更尖峰;峰度小于 0 表示数据分布比正态分布更平峰。
2.4 、概率与概率分布
概率是描述随机事件发生可能性大小的数值。在统计学中,我们经常使用概率分布来描述随机变量的取值规律。
- 离散型概率分布
- 二项分布(Binomial Distribution):用于描述在
次独立重复试验中,成功次数的概率分布。
- 泊松分布(Poisson Distribution):用于描述在一定时间或空间内,随机事件发生次数的概率分布。
- 连续型概率分布
- 正态分布(Normal Distribution):也称为高斯分布,是最常见的概率分布之一。正态分布的概率密度函数为:
,其中
为均值,
为标准差。
- 均匀分布(Uniform Distribution):在给定区间内,随机变量的取值具有相等的概率。
2.5、假设检验
假设检验是一种基于样本数据对总体参数进行推断的方法。
它的基本思想是先提出一个假设(原假设),然后通过样本数据来检验这个假设是否成立。
如果样本数据与原假设之间的差异足够大,我们就拒绝原假设,接受备择假设;否则,我们就不能拒绝原假设。
假设检验的步骤如下:
- 1) 提出原假设和备择假设。
- 2) 选择合适的检验统计量。
- 3) 确定显著性水平
。
- 4) 根据样本数据计算检验统计量的值。
- 5) 比较检验统计量的值与临界值的大小,做出决策。
常见的假设检验包括:
- Z 检验:用于大样本(
)情况下,对总体均值的检验。
- t 检验:用于小样本(
)情况下,对总体均值的检验。
- 卡方检验(Chi-Square Test):用于对分类数据的独立性检验和拟合优度检验。
2.6、回归分析
回归分析是研究变量之间关系的一种统计方法。它可以帮助我们建立自变量和因变量之间的数学模型,从而对因变量进行预测和解释。
- 简单线性回归:只有一个自变量的线性回归模型,其数学表达式为:
,其中
为因变量,
为自变量,
为截距,
为斜率,
为误差项。
- 多元线性回归:有多个自变量的线性回归模型,其数学表达式为:
。
在进行回归分析时,我们需要对模型进行评估,常用的评估指标包括:
- 决定系数(R-squared):反映模型对数据的拟合程度,取值范围在
到
之间,越接近
表示模型拟合效果越好。
- 均方误差(Mean Squared Error,MSE):衡量模型预测值与实际值之间的平均误差。
- 均方根误差(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']
3、总结
统计学作为数据科学的重要组成部分,为我们提供了理解和分析数据的方法和工具。
通过学习统计学的基础知识,我们可以更好地描述数据特征、进行数据分析和建立预测模型。
在实际应用中,我们需要根据具体问题选择合适的统计方法,并结合领域知识进行深入分析。
我是小鱼:
- 博客专家;
- 阿里云 专家博主;
- 51CTO博客专家;
- 企业认证金牌面试官;
- 多个名企认证&特邀讲师等;
- 名企签约职场面试培训、职场规划师;
- 多个国内主流技术社区的认证专家博主;
- 多款主流产品(阿里云等)评测一等奖获得者;
关注小鱼,学习【数据分析】最新最全的领域知识。