Python统计分析
描述性统计分析
分类变量:性别、民族、居住城市、是否违约、(等级变量:教育、学历、客户满意度、年龄段)
连续性变量:年龄,收入
总体:对客观事物研究时,总体是包含所有研究个体的集合,比如研究中国人的身高,那么所有中国人的身高就是总体,某一个中国人的身高就是个体。
样本:在总体里面抽样,经过抽样总体中的部分个体,就形成了样本,样本是总体的子集。
统计量:均值、标准差、中位数、分位数、众数。
离散程度(反应数据某些趋势):极差、四分位差、方差、变异系数。
import numpy as np
import pandas as pd
from scipy import stats
import os
os.chdir('/Users/songdi/Desktop/code/python')
data=pd.read_excel('trade.xlsx',encoding='utf-8')
data['sales'].mean() #均值
data['sales'].std() #标准差
data['sales'].median() #中位数
data['sales'].quantile([0,0.05,0.25,0.5,0.75]) #分位数
data['sales'].mode() #众数
data['sales'].mode()[1] #众数不止一个时可以取出某个
data['region'].value_counts() #分类变量
data['sales'].max()-data['sales'].min() #极差
data['sales'].quantile(0.75)-data['sales'].quantile(0.25) #四分位差
cv=data['sales'].std()/data['sales'].mean() #变异系数
点估计:用样本统计量去估计总体参数。(估计出一个值)
区间估计:区间估计用一个包括有真实值的区间范围来估计参数的取值范围。(估计出一个范围)
置信度和置信区间:样本均值包含在(1-a)%范围之内,a%的区间未包含均值。
样本均值近似正态分布:若样本数量足够大,产生的均值是近似符合正态分布的。
#点估计
data['sales'].mean() #均值
#区间估计 (中心极限定理)
n=len(data['sales']) #样本数量
se=stats.sem(data['sales']) #计算样本均值标准物,即data['sales'].std()/np.sqrt(n)
interval=stats.norm.interval(0.95,data['sales'].mean(),se) #求区间估计,即data['sales'].mean()-1.96*se到data['sales'].mean()+1.96*se
假设检验
(1)提出原假设和备择假设
(2)确定适当的检验统计量
(3)规定显著性水平
(4)计算检验统计量的值
(5)做出决策
import statsmodels.api as sm
#t检验
d1=sm.stats.DescrStatsW(data['sales'])
d1.ttest_mean(data['sales'].mean()) #t统计量,概率,自由度个数(即样本量-1)
#双样本t检验
data.groupby('region').mean()['sales']
region0=data[data['region']=='华北']['sales']
region1=data[data['region']=='华南']['sales']
leveneTestRes=stats.levene(region0,region1) #方差齐性检验
stats.stats.ttest_ind(region0,region1,equal_var=True)
卡方检验和方差分析
卡方检验主要用于分析两个分类变量之间的关系。(例:男女之间的教育水平是否有显著性差异)
方差分析用于分析多于两个分类的离散型变量与连续变量的关系。
#卡方检验
cross_table=pd.crosstab(data.trans_cost,data.sales,margins=True)
from scipy import stats
stats.chi2_contingency(cross_table) #显著性水平
pd.crosstab(data.trans_cost,data.sales,normalize='index')
#方差分析
from statsmodels.stats.anova import anova_lm
from statsmodels.formula.api import ols
model=ols('sales ~ C(region)',data=data.dropna()).fit()
anova_lm(model) #显著性水平
相关分析
Pearson相关系数:衡量两变量线性相关关系。
Spearman相关系数:对于有序变量而言,用Spearman更加准确一点。
Kendall相关系数:用于衡量两个变量的非线性关系。
import matplotlib.pyplot as plt
plt.scatter(x=data.trans_cost,y=data.sales,c='steelblue')
plt.show()
coor_pear=data[['trans_cost','sales']].corr(method='pearson') #Pearson相关系数
coor_pear.