抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > 关于统计学的相关函数

关于统计学的相关函数

时间:2023-01-01 17:34:20

相关推荐

python数据分析基础技术篇

python数据分析的概论1、numpy1、判断数据结构的类型2、常用数组,生成数据(满足某一分布)3、对数组进行操作4、 线性方程组和矩阵运算5、其他应用 2、matplotlib1、绘图库2、常见图表的展示 3、scipy[视频链接](/video/BV1mT4y1R7Wt?from=search&seid=3170446727710512807&spm_id_from=333.337.0.0)1、积分2、优化器1、拟合 3、插值1、一维插值的方法 4、线性计算和矩阵分解5、scipy的学习6、概率统计模块1、常见统计量2、参数估计3、假设检验

python数据分析的概论

1、数据分析的含义与目标

统计分析的方法

提取有用的信息

研究、概括、总结

2、Python与数据分析

特点:简洁、开发效率、运算速度慢、胶水特性(解决运算速度的问题,可以把c语言引入进来)

3、python数据分析的大家族

numpy : 数据结构的基础

关键词:开源、数据计算扩展

功能:ndarray、多维操作、线性代数

官网:numpy官网

scipy:强大的科学计算方法(矩阵分析、信号分析、数理分析…)

matplotlib:丰富的可视化套件

pandas:基础数据分析的套件

scikit-learn:强大的数据分析建模库

keras:人工神经网络

科学计算工具:Anaconda

1、numpy

1、判断数据结构的类型

#encode utf-8import numpy as np#如果运行的是主函数的话,执行下一句main()#如果作为模块被其他文件导入使用的话,我们就不执行后面的main()什么的。def main():lst=[[1,2,9],[2,6,2]]print(type(lst))nplst=np.array(lst) #nparray只能有一种数据类型print(type(nplst))nplst=np.array(lst,dtype=np.float64)print(nplst.shape) #形状print(nplst.ndim) #二维print(nplst.dtype) #数据类型print(nplst.itemsize)#每个元素所占字节,64位占8个字节print(nplst.size) #共多少个元素if __name__=='__main__':main()

2、常用数组,生成数据(满足某一分布)

import matplotlibimport numpy as np#some Arraysprint(np.zeros([2,4])) #1、输出零矩阵print(np.zeros([3,5]))print("Rand:")print(np.random.rand(2,4))#2、输出随机矩阵,其中各元素在0-1之间print(np.random.rand())#输出0-1之间的数print("RandInt:")print(np.random.randint(3,8,9))#3、输出3-8之间的9个整数print("Randn:")print(np.random.randn(2,4))#4、标准正态的随机数print("choice:")print(np.random.choice([1,6,33,8,9]))#5、生成1,6,33,8,9中的随机数print("Distribute:")print(np.random.beta(1,10,100))#6、生成贝塔分布、当然像均匀分布、二项分布这样子的分布也可以用随机函数表示出来

3、对数组进行操作

1、对 axis的解释

原数组

(1)axis=0

(2)axis=1

(3)axis=2

#对原生list进行操作lst=np.array([[[1,2,3,4],[4,5,6,7]],[[7,8,9,10],[10,11,12,13]],[[14,15,16,17],[18,19,20,21]]])#将该级别括号的元素相加#print(lst.shape) print(lst)#print(lst.sum())#print(lst.sum(axis=2,keepdims=True))print(lst.sum(axis=2,keepdims=True))

总结:

(1)保持括号不变,将元素相加

(2)找到进入的括号

(3)将括号内元素相加

2、对数组操作的代码

(1)对一维列表操作

(2)对二维列表进行操作

(3)对两个列表的操作

import matplotlibimport numpy as np# # 对列表本身操作# print(np.arange(1,11))#输出1到10的数组# print(np.arange(1,11).reshape([2,5]))#将数组变成2×5维# print(np.arange(1,11).reshape([2,-1]))#将数组变成2×5维,5可以缺省成为-1# #原生list是不可以直接加操作的# lst=np.arange(1,11).reshape([2,-1])# print("Exp")# print(np.exp(lst))#指数形式# print("Exp2")# print(np.exp2(lst))# print("sqrt")# print(np.sqrt(lst))# print("sin")# print(np.sin(lst))# print("log")# print(np.log(lst))lst=np.array([[[1,2,3,4],[1,2,3,5]],[[7,8,9,10],[10,11,12,13]],[[14,15,16,17],[18,19,20,21]]])#将该级别括号的元素相加#print(lst.shape) #print(lst)#print(lst.sum())#print(lst.sum(axis=2,keepdims=True))print(lst.sum(axis=2,keepdims=True)) print(lst.max(axis=2))print(lst.min(axis=2))

#对多个列表进行操作

lst1=np.array([10,20,30,40])lst2=np.array([4,3,2,1])print("Add")print(lst1+lst2)print("Sub")print(lst1-lst2)print("Mu1")print(lst1*lst2)print("div")print(lst1/lst2)print("square")print(lst1**2)print("dot")#点乘,矩阵乘法print(np.dot(lst1.reshape([2,2]),lst2.reshape([2,2])))print("Cancatenate")print(np.concatenate((lst1,lst2),axis=0))#对列表进行叠加print(np.vstack((lst1,lst2)))#组装成二维数组print(np.hstack((lst1,lst2)))#对列表进行叠加print(np.split(lst1,4))#分开print(np.copy(lst1))#复制

4、 线性方程组和矩阵运算

补充

import numpy as np导入的是numpy包。通过np.linalg.xxx()来使用linalg的函数。

import numpy.linalg导入的是numpy中的linalg包。通过numpy.linalg.xxx()来使用linalg的函数。

from numpy.linalg import *是导入numpy.linalg下的所有函数。通过xxx()来使用linalg的函数。

import matplotlibimport numpy as npfrom numpy.linalg import *print(np.eye(3))#单位矩阵lst=np.array([[1.,2.],[3.,4.]])print("Inv:")print(inv(lst))#求逆print("T:")print(lst.transpose())print("det")#求行列式print(det(lst))print("Eig")print(eig(lst))#求特征值和特征向量y=np.array([[5.],[7.]]) #列向量print("solve")#求解方程print(solve(lst,y))

5、其他应用

#5 Othersprint("FFT:")print(np.fft.fft(np.array([1,1,2,3])))print("coef:")print(np.corrcoef([1,0,1],[0,2,1]))print("Poly:")#输出多项式print(np.poly1d([2,1,3]))

2、matplotlib

1、绘图库

#encoding=utf-8from cProfile import labelimport numpy as npdef main():#line绘图线import matplotlib.pyplot as pltx=np.linspace(-np.pi,np.pi,256,endpoint=True)#在-pi到pi之间包含256个点,包含最后一个点c,s=np.cos(x),np.sin(x)plt.figure(1)plt.plot(x,c,color='blue',linewidth=1.0,linestyle="-",label="cos",alpha=0.5)plt.plot(x,s,label="sin")#标签plt.title("COS&SIN")#边框线ax=plt.gca()ax.spines["right"].set_color("none")ax.spines["top"].set_color("none")ax.spines["left"].set_position(("data",0))ax.spines["bottom"].set_position(("data",0))#坐标轴,#坐标上刻度ax.xaxis.set_ticks_position("bottom")#刻度在哪边ax.yaxis.set_ticks_position("left")plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$',r'$-\pi/2$',r'$0$',r'$+\pi/2$',r'$+\pi$'])plt.yticks(np.linspace(-1,1,5,endpoint=True))#设置标签格式for label in ax.get_xticklabels()+ax.get_yticklabels():label.set_fontsize(20)label.set_bbox(dict(facecolor="red",edgecolor="blue",alpha=0.2))#设置标签的格式plt.legend(loc="upper left")#图例plt.grid()#网格线#显示范围# plt.axis([-1,1,-0.5,1])#进行填充plt.fill_between(x,np.abs(x)<0.5,c,c>0.4,color="green",alpha=0.25)#x的范围是-0.5-0.5;在范围内,c>0.8则从1开始,c<0.8则从0开始t=1#画线plt.plot([1,1],[0,np.cos(t)],"y",linewidth=3,linestyle="--")#加上注释plt.annotate("cos(1)",xy=(t,np.cos(1)),xycoords="data",xytext=(+10,+30),textcoords="offset points",arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.3"))plt.show()if __name__=='__main__':main()

2、常见图表的展示

#encoding=utf-8from cProfile import labelfrom matplotlib import projectionsimport numpy as npdef main():import matplotlib.pyplot as plt#1、散点图fig=plt.figure()# ax=fig.add_subplot(3,3,1)#将图像画在3行3列的第一个位置上面# n=128# x=np.random.normal(0,1,n)#生成随机数# y=np.random.normal(0,1,n)# t=np.arctan2(y,x)#上色# # plt.axes([0.025,0.025,0.95,0.95])#散点范围# ax.scatter(x,y,s=5,c=t,alpha=.5)#散点的大小,c为颜色# plt.xlim(-1.5,1.5),plt.xticks([])#x的氛围# plt.ylim(-1.5,1.5),plt.yticks([])# plt.axis()# plt.title("scatter")# plt.xlabel("x")# plt.ylabel("y")# plt.show()#2、柱状图# fig.add_subplot(332)# n=12# x=np.arange(n)# y1=(1-x/float(n)*np.random.uniform(0.5,1.0,n))# y2=(1-x/float(n)*np.random.uniform(0.5,1.0,n))# plt.bar(x,+y1,facecolor="red",edgecolor="white")#向上的柱状图# plt.bar(x,-y2,facecolor="pink",edgecolor="white")#向下的柱状图# for x,y1,y2 in zip(x,y1,y2):##ha:对齐方式、va:垂直#plt.text(x+0.4,y1+0.04,'%.2f'%y1,ha='center',va='bottom')#0.4是移动的数字##ha:对齐方式、va:垂直#plt.text(x+0.4,-y2-0.04,'%.2f'%y2,ha='center',va='bottom')#0.4是移动的数字# plt.xlim(-.5,n)# plt.xticks(())# plt.ylim(-1.25,1.25)# plt.yticks(())#3、饼图# labels='A','B','C','D'# fracs=[15,30,45,10]# explode=[0,0.1,0,0]#每一块远离中心点的距离# plt.axes(aspect=1)#让比例变成1:17# plt.pie(x=fracs,labels=labels,autopct='%.0f%%',explode=explode,shadow=True)#所占比例、标签、在饼状图上面显示所占比例# plt.show()#4、极坐标# # r=np.arange(1,6,1)# #生成一个四边形# # r=np.empty(5)# # r.fill(5)#生成元素为5的数组# #生成一个八边形(注意边和角度要一一对应)# r=np.empty(9)# r.fill(5)#生成元素为5的数组# # theta=[0,np.pi/2,np.pi,3*np.pi/2,2*np.pi]# theta=[0,2*np.pi/8,2*2*np.pi/8,2*3*np.pi/8,2*4*np.pi/8,2*5*np.pi/8,2*6*np.pi/8,2*7*np.pi/8,2*8*np.pi/8]# ax=plt.subplot(111,projection="polar")#添加子图# ax.plot(theta,r,color='r',linewidth=3)#画图# ax.grid(True)# plt.show()#5、热图# from matplotlib import cm#上色用的# data=np.random.rand(9,3)#生成3✖3的随机数# cmap=cm.Blues#引入颜色# map=plt.imshow(data,interpolation='nearest',cmap=cmap,aspect='auto',vmin=0,vmax=1)# plt.show()#6、3D图# from mpl_toolkits.mplot3d import Axes3D#引入三维坐标系# ax=fig.add_subplot(111,projection="3d")# ax.scatter(1,1,3,s=100)# plt.show()#7、热力图def f(x,y):return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)n=256x=np.linspace(-3,3,n)y=np.linspace(-3,3,n)X,Y=np.meshgrid(x,y)plt.contourf(X,Y,f(X,Y),8,alpha=.75,cmap=plt.cm.hot)plt.show()if __name__=='__main__':main()

3、scipy视频链接

数值计算库

官网scipy的官网

1、积分

(1)一重积分

#encoding=utf-8

import numpy as npdef main():#--integralfrom scipy.integrate import quad,dblquad#先定义被积分的函数def myfunction(x,n,k):return k*x**n print(quad(myfunction,0,2,args=(2,3)))#将2,3传入到被积分的函数中,输出的是3x的平方从0到1的积分if __name__=='__main__':main()

(2)二重积分

#1、二重积分

#encoding=utf-8import numpy as npdef main():#--integralfrom scipy.integrate import quad,dblquad#先定义被积分的函数def f(x,y):return 4-x-y v,err=dblquad(f,0,2,0,1)print(v)if __name__=='__main__':main()

#2、重积分

需要自己定限

2、优化器

找到函数的局部或者全局最小以及求方程解的问题都属于优化问题

optimize模块中包含:

(1)leastsq拟合方法

(2)函数最小值方法

(3)解方程及方程组的方法fsolve

1、拟合

#5、拟合直线#encoding=UTF-8import scipy as spimport numpy as npimport matplotlibimport matplotlib.pyplot as pltfrom scipy.optimize import leastsq#完全随机设计实验#两个样本均来自正态样本#两个样本的方差相等#H0:U1=U2;H1:U1!=U2def main():##样本数据(x,y),需要转换成数组(列表)形式xi=np.array([160,165,158,172,159,176,160,162,171])yi=np.array([58,63,57,65,62,66,58,59,62])##需要拟合的函数:指定函数的形状k=0.42116973935 b=-8.28830260655def func(p,x):k,b=preturn k*x+b##偏差函数:x,y都是列表:这里的x,y和xi,yi是一一对应的def error(p,x,y):return func(p,x)-y#k,b的初始值,可以任意设定,经过几次试验,发现p0的值会影响cost的值:Para[1]p0=[1,20]#把error函数中除了p0以外的参数打包到args中(使用需要)Para=leastsq(error,p0,args=(xi,yi))#读取结果k,b=Para[0]print("k=",k,"b=",b)# #画样本点# plt.figure(figsize=(8,6))#指定图像比例:8:6# plt.scatter(xi,yi,color='green',label="样本数据",linewidth=2)matplotlib.rcParams['font.sans-serif']=['SimHei']#解决中文乱码#画拟合直线x=np.linspace(150,190,100)##在150-190直接画100个连续点#linspace主要是建立等差数列y=k*x+b##函数式plt.plot(x,y,color='red',label="拟合直线",linewidth=2)plt.legend()#绘制图例plt.show()if __name__=='__main__':main()

3、插值

注意插值和拟合的区别:插值要使得所有的点都在线上,拟合是使得点离直线的距离之和最小

1、一维插值的方法

def main():import numpyimport matplotlib.pyplot as pltfrom scipy import interpolatex=numpy.arange(0,10)print(x)y=numpy.exp(-x/3.0)f=interpolate.interp1d(x,y)xnew=numpy.arange(0,9,0.1)ynew=f(xnew)#使用的插值的函数plt.plot(x,y,'o',xnew,ynew,'*')plt.show()if __name__=='__main__':main()

4、线性计算和矩阵分解

5、scipy的学习

6、概率统计模块

1、常见统计量

# #3、统计趋势的描述# #encoding=utf-8# import numpy as np# def main():# import numpy as np# import scipy.stats# #抗体滴度为1:10,1:20,1:40,1:80,1:160,1:320,1:640,1:1280# #分别对应人数f为:4,3,10,10,11,15,14,2# Didu=np.array([10,20,40,80,160,320,640,1280])# Repeat_f=np.array([4,3,10,10,11,15,14,2])# Data=Didu.repeat(Repeat_f)# print(Data)# print(Data.mean())#平均数# print(scipy.stats.gmean(Data))#几何平均数# print(scipy.stats.iqr(Data))#四分位数间距# print(scipy.stats.variation(Data))#变异系数# print(scipy.stats.skew(Data))#偏度# print(scipy.stats.kurtosis(Data))#峰度# if __name__=='__main__':#main()

2、参数估计

# #4、参数估计# #encoding=UTF-8# import scipy.stats# #若某市某年18岁男生身高服从# #g:总共100个、每次10个、均值:167.7、置信度:1-0.05# #总体方差未知,小样本、服从t分布# def main():# #encoding=UTF-8# g,n,u,s,a=100,10,167.7,5.3,0.05# records=[]# for i in range(g):#进行100次,每次10个数据# #每次样本的均值和标准差# data=scipy.stats.norm.rvs(loc=167.7,scale=5.3,size=n)# # print(data)# mean,xsem=data.mean(),scipy.stats.sem(data)# # print(mean,xsem)# #1-a置信区间CI为# records.append([mean-scipy.stats.t.isf(a/2,n-1)*xsem,mean+scipy.stats.t.isf(a/2,n-1)*xsem])#在相应的数组后加上相应的元素# #置信区间包含住总体均值的概率# count=0# for i in range(g):# if records[i][0]<u<records[i][1]:#count+=1# print("概率为:",count/g)# # print(records)# if __name__=='__main__':#main()

3、假设检验

#4、参数检验#encoding=UTF-8import scipy.statsimport numpy as np#完全随机设计实验#两个样本均来自正态样本#两个样本的方差相等#H0:U1=U2;H1:U1!=U2def main():#待测两个样本均来自正态样本data=np.array([[-0.7,-5.6,2,2.8,0.7,3.5,4,5,8,7.1,-0.5,2.5,-1.6,1.7,3,0.4,4.5,4.6,2.5,6,-1.4],[3.7,6.5,5,5.2,0.8,0.2,0.6,3.4,6.6,-1.1,6,3.8,2,1,6,2,2.2,1.2,3.1,1.7,-2]])data.shape#equal var 参数表示,两样本总体方差是否相等,默认为True#方法1:现有两组样本,直接计算print(scipy.stats.ttest_ind(data[0],data[1]))if __name__=='__main__':main()

如果觉得《关于统计学的相关函数》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。