关于统计学的相关函数

python数据分析基础技术篇

  • python数据分析的概论
  • 1、numpy
    • 1、判断数据结构的类型
    • 2、常用数组,生成数据(满足某一分布)
    • 3、对数组进行操作
    • 4、 线性方程组和矩阵运算
    • 5、其他应用
  • 2、matplotlib
    • 1、绘图库
    • 2、常见图表的展示
  • 3、scipy[视频链接](https://www.bilibili.com/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-8
import 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 matplotlib
	import numpy  as np
	#some Arrays
	print(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张图片(1)axis=0
关于统计学的相关函数_第2张图片(2)axis=1
关于统计学的相关函数_第3张图片(3)axis=2
关于统计学的相关函数_第4张图片

		#对原生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 matplotlib
		import 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 matplotlib
	import numpy  as np
	from 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 Others
		print("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-8
	from cProfile import label
	import numpy as np
	
	
	def  main():
	    #line绘图线
	    import matplotlib.pyplot  as plt
	    x=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-8
	from cProfile import label
	from matplotlib import projections
	import numpy as np
	def  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=256
	    x=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的官网

关于统计学的相关函数_第5张图片

1、积分

关于统计学的相关函数_第6张图片(1)一重积分
#encoding=utf-8

import numpy  as np

def main():
    #--integral
    from  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-8
	
	import numpy  as np
	
	def main():
	    #--integral
	    from  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、重积分
需要自己定限
关于统计学的相关函数_第7张图片

2、优化器

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

optimize模块中包含:
(1)leastsq拟合方法
(2)函数最小值方法
(3)解方程及方程组的方法fsolve

1、拟合

关于统计学的相关函数_第8张图片

#5、拟合直线
#encoding=UTF-8
import scipy as sp
import numpy  as np
import matplotlib
import matplotlib.pyplot  as plt
from scipy.optimize import leastsq

#完全随机设计实验
#两个样本均来自正态样本
#两个样本的方差相等
#H0:U1=U2;H1:U1!=U2
def 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.28830260655
    def func(p,x):
        k,b=p
        return 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、一维插值的方法

关于统计学的相关函数_第9张图片

	def main():
	    import numpy
	    import matplotlib.pyplot as plt
	    from scipy import interpolate
	    x=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]

3、假设检验

#4、参数检验
#encoding=UTF-8
import scipy.stats
import numpy  as np
#完全随机设计实验
#两个样本均来自正态样本
#两个样本的方差相等
#H0:U1=U2;H1:U1!=U2
def 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()

你可能感兴趣的:(python学习,数据挖掘,数据分析,python)