1.认识Scipy

SciPy(发音为 "Sigh Pie")是一个开源的 Python 算法库和数学工具包。

通常与 NumPy、Matplotlib 和 pandas 等库一起使用,这些库共同构成了 Python 的科学计算基础。

2.使用Scipy基本函数

2.1 引用Scipy函数

import scipy.stats as st

2.2 构建一个简单的随机算数函数

2.2.1 引用函数、创建方程

衰减公式 : e = a * e^(-b*x)+c:

import numpy as np
import matplotlib.pyplot as plt
import scipy
def y(x,a,b,c):
    return a * np.exp(-b * x) + c

2.2.2 构建数列

0~4之间的50个数:

xdata = np.linspace(0,4,50)
ydata = y(xdata,2.5,1.3,0.5)
print(xdata,ydata)

2.2.3 模拟噪声处理

ydata_noise = ydata + 0.5 * np.random.randn(xdata.size)
plt.plot(xdata,ydata_noise)
#plt.show() 测试

2.2.4 生成拟合曲线

params,pcov = scipy.optimize.curve_fit(y,xdata,ydata_noise)
plt.plot(xdata,y(xdata,*params))
plt.show()

3. 随机变量与变量分布

创建一个具备正态分布形态的随机变量

s1 = st.norm.rvs(loc=0, scale=1, size=100):

生成了100个正态分布的随机数,并存储在变量 s1 中。其中随机数满足条件:

loc=0 期望值;scale=1 方差(标准差);size=100 数量

import seaborn as sns
import matplotlib.pyplot as plt
import scipy.stats as st
s1 = st.norm.rvs(loc=0,scale=1,size=100)
s2 = st.norm.rvs(loc=1,scale=2,size=100)
s3 = st.norm.rvs(loc=2,scale=3,size=100)
sns.distplot(s1)
sns.distplot(s2)
sns.distplot(s3)
plt.legend(labels=[1,2,3])
plt.show()

 4.检测检验

4.1 分布图:总体VS样本

s0 = st.norm.rvs(72,1,1000)#测试总体概率
s1 = st.norm.rvs(68,0.8,100)#测试样本概率
sns.distplot(s0)
sns.distplot(s1)
plt.show()

4.2  置信区间、拒绝域

置信区间:总体概率为95%

拒绝域:概率p=5%=0.05,

>3*std:当类别数据>3个方差时,就是小概率事件,即,可以拒绝原假设,接收备择假设。

plt.figure(figsize=(10,5))#设置窗口尺寸
sns.distplot(st.norm.rvs(size=1000))
plt.show()

4.3 计算出现的频率

print(st.norm.cdf(-2))
print(st.norm.ppf(0.022))

4.4 简单计算p值的方法

zscore = (68-72)/0.8
print(zscore)

5. 流失vs非流失用户样本差异

5.1 数据预处理,提取月消费

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import scipy.stats as st

date = pd.read_csv('WA_Fn-UseC_-Telco-Customer-Churn.csv')
#按是否流失,提取月消费数据
churn0 = date[date['是否流失']=='No']['月消费']
churn1 = date[date['是否流失']=='Yes']['月消费']
print(churn0.head())

5.2 观察分布结构

5.2.1 频数分布

plt.figure(figsize=(15,5))
churn0.hist(bins=50)
churn1.hist(bins=50)
plt.legend(labels=['churn0','churn1'])
plt.show()

5.2.2 概率分布

plt.figure(figsize=(15,5))
sns.distplot(churn0.tolist())
sns.distplot(churn1.tolist())
plt.legend(labels=['churn0','churn1'])
plt.show()

5.2.3 双侧检查:

是否存在显著性差异

H0:非流失用户μ值 = 流失用户μ值 ---均值无显著性差异

H1:非流失用户μ值 ≠ 流失用户μ值 ---均值有显著性差异

5.2.3.1 :st.ks_2samp(s0, s1)

这个函数执行Kolmogorov-Smirnov测试,用于比较两个样本是否来自同一分布。

s0 = churn0.tolist()
s1 = churn1.tolist()
print(st.ks_2samp(s0, s1))
  • statistic=0.24859894401422267, 统计量,值越小分布越相似
  • pvalue=4.827359624586335e-75, 远远小于p值标准值0.05,拒绝H0接收H1
  • statistic_location=68.8, 统计量位置,检验统计量发生位置
  • statistic_sign=1 统计量符号 statistic_sign=1为正数 
5.2.3.2 :st.describe(s0/s1)

这个函数输出样本s1/s0的描述性统计信息

print(st.describe(s0))
print(st.describe(s1))
  • nobs=5174, 数量
  • minmax=(18.25, 118.75), 最大最小值
  • mean=61.26512369540008, 均值
  • variance=966.7527670734265,方差值
  • skewness=-0.025012288702718842, 偏度值
  • kurtosis=-1.3551511690013145)峰值

偏度值:统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征

峰值:概率密度分布曲线在平均值处峰值高低的特征数,如果峰度大于三,峰的形状比较尖 

Logo

永洪科技,连续七届荣获BI第一名的数据技术厂商,提供数据/智能分析、数据资产及治理、实施等能力。

更多推荐