Python统计分析常用的30个经典操作以及代码演示

  • 这些操作将涵盖数据预处理、描述性统计、数据可视化、假设检验、回归分析和时间序列分析等领域.我们将使用Python的numpy、pandas、matplotlib、seaborn和statsmodels等库来实现这些操作.

以下是具体的操作步骤和示例代码:

1. 导入必要的库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
from statsmodels.formula.api import ols
from statsmodels.tsa.arima.model import ARIMA

2. 生成模拟数据

# 生成随机数据
np.random.seed(42)
data = pd.DataFrame({
    'A': np.random.normal(loc=0, scale=1, size=100),
    'B': np.random.normal(loc=5, scale=2, size=100),
    'C': np.random.exponential(scale=1, size=100)
})

数据预处理

3. 缺失值处理

data.loc[::10, 'A'] = np.nan  # 引入一些缺失值
data.fillna(data.mean(), inplace=True)  # 填充缺失值

4. 数据标准化

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)
data_scaled = pd.DataFrame(data_scaled, columns=data.columns)

描述性统计

5. 计算均值和标准差

mean = data.mean()
std_dev = data.std()

6. 计算中位数和四分位数

median = data.median()
quantiles = data.quantile([0.25, 0.5, 0.75])

7. 计算相关系数

correlation_matrix = data.corr()

数据可视化

8. 绘制直方图

data.hist(figsize=(10, 6), bins=20)
plt.show()

9. 绘制箱线图

sns.boxplot(data=data)
plt.show()

10. 绘制散点图

sns.pairplot(data)
plt.show()

11. 绘制热力图

sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.show()

假设检验

12. 单样本t检验

t_stat, p_val = stats.ttest_1samp(data['A'], 0)
13. 两样本t检验
t_stat, p_val = stats.ttest_ind(data['A'], data['B'])
14. 配对样本t检验
t_stat, p_val = stats.ttest_rel(data['A'], data['B'])
15. 卡方检验
from scipy.stats import chi2_contingency
contingency_table = pd.crosstab(np.random.choice(['A', 'B', 'C'], size=100), np.random.choice(['X', 'Y'], size=100))
chi2, p, dof, expected = chi2_contingency(contingency_table)

回归分析

16. 简单线性回归

model = ols('B ~ A', data=data).fit()
summary = model.summary()

17. 多元线性回归

model = ols('C ~ A + B', data=data).fit()
summary = model.summary()

18. 逻辑回归

from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression()
log_reg.fit(data[['A', 'B']], np.random.choice([0, 1], size=100))

时间序列分析

19. 时间序列分解

from statsmodels.tsa.seasonal import seasonal_decompose
result = seasonal_decompose(data['A'], model='additive', period=12)
result.plot()
plt.show()

20. 自相关图

from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
plot_acf(data['A'])
plot_pacf(data['A'])
plt.show()

21. ARIMA模型

model = ARIMA(data['A'], order=(2, 0, 2)).fit()
forecast = model.forecast(steps=20)
plt.plot(np.arange(100), data['A'], label='实际数据')
plt.plot(np.arange(100, 120), forecast, label='预测数据')
plt.legend()
plt.show()

聚类分析

22. K均值聚类

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3)
data['Cluster'] = kmeans.fit_predict(data)
sns.scatterplot(data=data, x='A', y='B', hue='Cluster', palette='viridis')
plt.show()

降维

23. 主成分分析(PCA)

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca_components = pca.fit_transform(data.drop('Cluster', axis=1))
plt.scatter(pca_components[:, 0], pca_components[:, 1], c=data['Cluster'], cmap='viridis')
plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.title('PCA')
plt.show()

非参数统计

24. Mann-Whitney U检验

u_stat, p_val = stats.mannwhitneyu(data['A'], data['B'])

25. Kruskal-Wallis检验

h_stat, p_val = stats.kruskal(data['A'], data['B'], data['C'])

机器学习模型评估

26. 混淆矩阵

from sklearn.metrics import confusion_matrix
y_true = np.random.choice([0, 1], size=100)
y_pred = np.random.choice([0, 1], size=100)
conf_matrix = confusion_matrix(y_true, y_pred)
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues')
plt.show()

27. ROC曲线

from sklearn.metrics import roc_curve, auc
fpr, tpr, thresholds = roc_curve(y_true, y_pred)
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, label=f'ROC曲线 (AUC = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], linestyle='--')
plt.xlabel('假阳性率')
plt.ylabel('真阳性率')
plt.title('ROC曲线')
plt.legend()
plt.show()

28. 交叉验证

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier()
scores = cross_val_score(clf, data[['A', 'B']], y_true, cv=5)

29. 超参数调优

from sklearn.model_selection import GridSearchCV
param_grid = {'n_estimators': [10, 50, 100]}
grid_search = GridSearchCV(clf, param_grid, cv=5)
grid_search.fit(data[['A', 'B']], y_true)

30. 提取特征重要性

clf.fit(data[['A', 'B']], y_true)
feature_importances = clf.feature_importances_
plt.bar(data.columns[:2], feature_importances)
plt.xlabel('特征')
plt.ylabel('重要性')
plt.title('特征重要性')
plt.show()
  • 以上是30个常用的统计分析操作的示例代码.你可以根据需要在本地运行并调整这些代码.如果你有任何问题或需要进一步的解释,请告诉我!

  • 感谢大家的关注和支持!想了解更多Python编程精彩知识内容,请关注我的 微信公众号:python小胡子,有最新最前沿的的python知识和人工智能AI与大家共享,同时,如果你觉得这篇文章对你有帮助,不妨点个赞,并点击关注.动动你发财的手,万分感谢!!!

  • 原创文章不易,求点赞、在看、转发或留言,这样对我创作下一个精美文章会有莫大的动力!

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python茶水实验室

你的关注,是我创作的最大动力.

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值