深入浅析Python科学计算库Scipy及安装步骤

一、Scipy 入门

1.1、Scipy 简介及安装

官网:http://www.scipy.org/SciPy

安装:在C:\Python27\Scripts下打开cmd执行:

执行:pip install scipy

1.2、安装Anaconda及环境搭建(举例演示)

创建环境:conda create -n env_name python=3.6

示例:   conda create -n Py_36 python=3.6  #创建名为Py_367的环境

列出所有环境:conda info -e

进入环境:   source activate Py_36  (OSX/LINUX系统)

activate Py_36          (windows系统)

1.3、jupyter 安装

jupyter简介:jupyter(Jupyter Notebook)是一个交互式笔记本

支持运行40多种编程语言

数据清理和转换,数值模拟,统计建模,机器学习等

jupyter 安装:conda install jupyter notebook

启动 jupyter:激活相应环境

在控制台执行 :jupyter notebook

notebook服务器运行地址:http://localhost:8888

新建(notebook,文本文件,文件夹)

关闭notebook:ctrl+c执行两次

jupyter notebook 使用:

快捷键:shift+Enter     运行本单元,选中下个单元

Ctrl+Enter      运行本单元,在其下方插入新单元
            Y              单元进入代码状态
            M              单元进入markdown状态
            A              在上方插入新单元
            B              在下方插入新单元
            X              剪切选中单元
            Shift+V        在上方粘贴单元

1.4、scipy的'hello word'

需求:将一个多维数组保存a.mat文件,后加载该mat文件,获取内容并打印

步骤1:导入scipy需要的模块

    from scipy import io    #(需要使用的模块)

步骤2:利用savemat保存数据

  io.savemat(file_name,mdict)
  io.savemat('a.mat',{''array:a})

步骤3:利用 loadmat载入数据

  io.loadmat(file_name)
  data = io.loadmat('a.mat')

举例1:

from scipy import io    #导入io
import numpy as np    #导入numpy并命名为np
arr = np.array([1,2,3,4,5,6])
io.savemat('test.mat',{'arr1':arr})
loadArr=io.loadmat('test.mat')

举例2

from matplotlib import pyplot as plt
from scipy import io
import numpy as np
matrix1 = np.arange(1,10).reshape(3,3)   #创建矩阵
io.savemat("matrix1.mat", {"array": matrix1}) #保存矩阵文件
data=io.loadmat('matrix1.mat')     #读取矩阵文件
print (data["array"])       #输出矩阵

p1 = np.random.normal(size = 10000) #新建随机数
plt.hist(p1)       #绘制柱形图
plt.show()       #显示

二、利用Scipy实现统计功能

需求:用Scipy的scipy.stats中的统计函数分析随机数
stats提供了产生连续性分布的函数
均匀分布(uniform)
                x=stats.uniform.rvs(size = 20) 生成20个[0,1]均匀分布随机数
-正态分布(norm)
                x=stats.norm.rvs(size = 20) 生成20个正态分布随机数
-贝塔分布(beta)
                x=stats.beta.rvs(size=20,a=3,b=4)生成20个服从参数a=3,b=4贝塔分布随机数
-离散分布
-伯努利分布(Bernoulli)
-几何分布(geom)
-泊松分布(poisson)
x=stats.poisson.rvs(0.6,loc=0,size = 20)生成20个服从泊松分布随机数

三、计算随机数均值和标准差

stats.norm.fit :利用正态分布去拟合生成的数据,得到其均值和标准差

四、计算随机数的偏度

1.概念:
                偏度(skewness)描述的是概率分布的偏度(非对称)程度。
                有两个返回值,第二个为p-value,即数据集服从正态分布的概率(0~1)

2 利用 stats.skewtest()计算偏度

五、计算随机数的峰度

1 概念:峰度(kurtosis)-描述的是概率分布曲线陡峭程度
2 利用 stats.kurtosis() 计算峰度
3 正态分布峰度值为3,excess_k为0
              低阔峰(platykurtic) 相对于正态分布来说更扁平 excess_k<0
              高狭峰(leptokurtic) 相对于正态分布来说更陡峭 excess_k>0

示例:(../Scipy/Test01/test1)

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

arr = stats.norm.rvs(size=900)
(mean,std) = stats.norm.fit(arr)
print('平均值',mean)  #mean平均值
print('std标准差',std)  #std标准差
(skewness,pvalue1) = stats.skewtest(arr)
print('偏度值')
print(skewness)
print('符合正态分布数据的概率为')
print(pvalue1)
(Kurtosistest,pvalue2) = stats.kurtosistest(arr)
print('Kurtosistest',Kurtosistest) #峰度
print('pvalue2',pvalue2)
(Normltest,pvalue3) = stats.normaltest(arr)
print('Normltest',Normltest)   #服从正太分布度
print('pvalue3',pvalue3)
num = stats.scoreatpercentile(arr,95) #某一百分比处的数值
print('在95%处的数值:')    #某一百分比处的数值
print num
indexPercent = stats.percentileofscore(arr,1) #某一数值处的百分比
print ('在数值1处的百分比:')     #某一数值处的百分比
print indexPercent
plt.hist(arr) #设置直方图
plt.show()  #显示图

六、正态分布程度检验

1 正态性检验(normality test),同样返回两个值,第二个返回p-values
2 利用 检验      stats.normaltest()
        一般情况     pvalue>0.05                表示服从正态分布

七、计算数据所在区域中某一百分比处的数值

1 利用scoreatpercentile 计算在某一百分比位置的数值
                格式:scoreatpercentile (数据集、百分比)
                                   stats.scoreatpercentile(name_arr,percent)
2 示例:求出95%所在位置的数值

 num = stats.scoreatpercentile(arr,95)
    print num

八、从某数值出发找到对应的百分比

利用percentileofscore计算在某数值对应的百分比
                格式:percentileofscore(数据集,数值)
                示例:indexPercent = stats.percentileofscore(arr,1)

九、直方图显示

import matplotlib.pyplot as plt

在Anaconda环境下(py36)C:\Users\lenovo>导入:conda install matplotlib
                plt.hist(arr) #设置直方图
                plt.show() #显示图

九、综合练习

1 求出考试分数的以下值:

均值          中位数       众数        极差          方差 
标准差        变异系数(均值/方差)       偏度          峰度

2 步骤1: 创建两个二维数组:[分数,出现次数]

arrEasy=np.array([[0,2],[2.5,4],[5,6],[7.5,9],[10,13],[12.5,16],[15,19],[17.5,23],
    [20,27],[22.5,31],[25,35],[27.5,40],[30,53],[32.5,68],[35,90],
    [37.5,110],[40,130],[42.5,148],[45,165],[47.5,182],[50,195],
    [52.5,208],[55,217],[57.5,226],[60,334],[62.5,342],[65,349],
    [67.5,500],[70,511],[72.5,300],[75,200],[77.5,80],[80,20]])
arrDiff=np.array([[0,20],[2.5,30],[5,45],[7.5,70],[10,100],[12.5,135],[15,170],
    [17.5,205],[20,226],[22.5,241],[25,251],[27.5,255],[30,256],
    [32.5,253],[35,249],[37.5,242],[40,234],[42.5,226],[45,217],
    [47.5,208],[50,195],[52.5,182],[55,165],[57.5,148],[60,130],
    [62.5,110],[65,40],[67.5,30],[70,20],[72.5,5],[75,5],[77.5,0],[80,0]])

步骤2:创建函数,将传入的多维数组扁平化->变成一维数组

方法1:

def createScore(arr):
 score = []   #所有学员分数
 row = arr.shape[0]
 for i in np.arange(0,row):
  for j in np.arange(0,int(arr[i][1])):
  score.append(arr[i][1]))
 score = np.array(score)
 return score

方法2

score_Easy, num_Easy = arrEasy[:,0],arrEasy[:,1] #所有行第一列;所有行第二列
score_Diff, num_Diff = arrDiff[:,0],arrDiff[:,1] #同上
print (score_Easy,num_Easy )
print (score_Diff,num_Diff )

步骤3:创建函数,根据传入数组,对其进行统计

def calStatValue(score):
 #集中趋势度量
 print('均值')
 print(np.mean(score))
 print('中位数')
 print(np.median(score))
 print('众数')
 print(stats.mode(score))
 #离散趋势度量
 print('极差')
 print(np.ptp(score))
 print('方差')
 print(np.var(score))
 print('标准差')
 print(np.std(score))
 print('变异系数')
 print(np.mean(score)/np.std(score))
 #偏度与峰度的度量
 print('偏度')
 print(stats.skewness(score))
 print('峰度')
 print(stats.Kurtosis(score))

步骤4:创建函数,做一个简单的箱线图/柱形图

def drawGraghic(score)
 plt.boxplot([score],labels['score']) #箱线图
 plt.title('箱线图')
 plt.show()
 plt.hist(score,100)
 plt.show()

步骤5:

步骤6:

案例完整代码:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
def createScore(arr):
 score = []     #所有学员分数
 row = arr.shape[0]   #获取多少组元素
 for i in np.arange(0,row): #遍历所有元素组
  for j in np.arange(0,int(arr[i][1])):#从0开始填充次数,第i行第1列
   score.append(arr[i][0]))
 score = np.array(score)
 return score
_________________________________
使用切片获取分数
score_Easy, num_Easy = arrEasy[:,0],arrEasy[:,1] #所有行第一列;所有行第二列
score_Diff, num_Diff = arrDiff[:,0],arrDiff[:,1] #同上
print (score_Easy,num_Easy)   #查看分数,人数
print (score_Diff,num_Diff)   #同上
All_score_Easy = np.repeat(list(score_Easy),list(num_Easy)) #所有分数
All_score_Diff = np.repeat(list(score_Diff),list(num_Diff)) #所有分数
________________________________
def createOneScore():
 arrEasy=np.array([[0,2],[2.5,4],[5,6],[7.5,9],[10,13],[12.5,16],[15,19],[17.5,23],
    [20,27],[22.5,31],[25,35],[27.5,40],[30,53],[32.5,68],[35,90],
    [37.5,110],[40,130],[42.5,148],[45,165],[47.5,182],[50,195],
    [52.5,208],[55,217],[57.5,226],[60,334],[62.5,342],[65,349],
    [67.5,500],[70,511],[72.5,300],[75,200],[77.5,80],[80,20]])
 return createScore(arrOne)
def createTwoScore():
 arrDiff=np.array([[0,20],[2.5,30],[5,45],[7.5,70],[10,100],[12.5,135],[15,170],
    [17.5,205],[20,226],[22.5,241],[25,251],[27.5,255],[30,256],
    [32.5,253],[35,249],[37.5,242],[40,234],[42.5,226],[45,217],
    [47.5,208],[50,195],[52.5,182],[55,165],[57.5,148],[60,130],
    [62.5,110],[65,40],[67.5,30],[70,20],[72.5,5],[75,5],[77.5,0],[80,0]])
 return createScore(arrTwo)
def calStatValue(score):
 #集中趋势度量
 print('均值')
 print(np.mean(score))
 print('中位数')
 print(np.median(score))
 print('众数')
 print(stats.mode(score))
 #离散趋势度量
 print('极差')
 print(np.ptp(score))
 print('方差')
 print(np.var(score))
 print('标准差')
 print(np.std(score))
 print('变异系数')
 print(np.mean(score)/np.std(score))
 #偏度与峰度的度量
 (skewness,pvalue1) = stats.skewtest(score)
 print('偏度')
 print(stats.skewness(score))
 (Kurtosistest,pvalue2) = stats.kurtosistest(arr)
 print('峰度')
 print(stats.Kurtosis(score))
 return
#画图
def drawGraghic(score)
 plt.boxplot([score],labels['score']) #箱线图
 plt.title('箱线图')
 plt.show()
 plt.hist(score,100)
 plt.show()
 return

    总结

以上所述是小编给大家介绍的Python科学计算库—Scipy,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • Python中利用Scipy包的SIFT方法进行图片识别的实例教程

    scipy scipy包包含致力于科学计算中常见问题的各个工具箱.它的不同子模块相应于不同的应用.像插值,积分,优化,图像处理,,特殊函数等等. scipy可以与其它标准科学计算程序库进行比较,比如GSL(GNU C或C++科学计算库),或者Matlab工具箱.scipy是Python中科学计算程序的核心包;它用于有效地计算numpy矩阵,来让numpy和scipy协同工作. 在实现一个程序之前,值得检查下所需的数据处理方式是否已经在scipy中存在了.作为非专业程序员,科学家总是喜欢重新发明造

  • python scipy求解非线性方程的方法(fsolve/root)

    使用scipy.optimize模块的root和fsolve函数进行数值求解线性及非线性方程,下面直接贴上代码,代码很简单 from scipy.integrate import odeint import numpy as np import matplotlib.pyplot as plt from scipy.optimize import root,fsolve #plt.rc('text', usetex=True) #使用latex ## 使用scipy.optimize模块的roo

  • python安装scipy的方法步骤

    Scipy高级科学计算库:和Numpy联系很密切,Scipy一般都是操控Numpy数组来进行科学计算.统计分析,所以可以说是基于Numpy之上了. Scipy库的安装 pip install scipy Scipy有很多子模块可以应对不同的应用,例如插值运算,优化算法等等.SciPy则是在NumPy的基础上构建的更为强大,应用领域也更为广泛的科学计算包.正是出于这个原因,SciPy需要依赖NumPy的支持进行安装和运行. SciPy是世界上著名的Python开源科学计算库,建立在Numpy之上.

  • Python编程深度学习计算库之numpy

    NumPy是python下的计算库,被非常广泛地应用,尤其是近来的深度学习的推广.在这篇文章中,将会介绍使用numpy进行一些最为基础的计算. NumPy vs SciPy NumPy和SciPy都可以进行运算,主要区别如下 最近比较热门的深度学习,比如在神经网络的算法,多维数组的使用是一个极为重要的场景.如果你熟悉tensorflow中的tensor的概念,你会非常清晰numpy的作用.所以熟悉Numpy可以说是使用python进行深度学习入门的一个基础知识. 安装 liumiaocn:tmp

  • 详解Python中的Numpy、SciPy、MatPlotLib安装与配置

    用Python来编写机器学习方面的代码是相当简单的,因为Python下有很多关于机器学习的库.其中下面三个库numpy,scipy,matplotlib,scikit-learn是常用组合,分别是科学计算包,科学工具集,画图工具包,机器学习工具集. numpy :主要用来做一些科学运算,主要是矩阵的运算.NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组.它将常用的数学函数都进行数组化,使得这些数学函数能够直接对数组进行操作,将本来需要在Python级别进行的循

  • Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算

    使用numpy可以做很多事情,在这篇文章中简单介绍一下如何使用numpy进行方差/标准方差/样本标准方差/协方差的计算. variance: 方差 方差(Variance)是概率论中最基础的概念之一,它是由统计学天才罗纳德·费雪1918年最早所提出.用于衡量数据离散程度,因为它能体现变量与其数学期望(均值)之间的偏离程度.具有相同均值的数据,而标准差可能不同,而通过标准差的大小则能更好地反映出数据的偏离度. 计算:一组数据1,2,3,4,其方差应该是多少? 计算如下: 均值=(1+2+3+4)/

  • python中的插值 scipy-interp的实现代码

    具体代码如下所示: import numpy as np from matplotlib import pyplot as plt from scipy.interpolate import interp1d x=np.linspace(0,10*np.pi,num=20) y=np.sin(x) f1=interp1d(x,y,kind='linear')#线性插值 f2=interp1d(x,y,kind='cubic')#三次样条插值 x_pred=np.linspace(0,10*np.

  • 深入浅析Python科学计算库Scipy及安装步骤

    一.Scipy 入门 1.1.Scipy 简介及安装 官网:http://www.scipy.org/SciPy 安装:在C:\Python27\Scripts下打开cmd执行: 执行:pip install scipy 1.2.安装Anaconda及环境搭建(举例演示) 创建环境:conda create -n env_name python=3.6 示例:   conda create -n Py_36 python=3.6  #创建名为Py_367的环境 列出所有环境:conda info

  • python科学计算之scipy——optimize用法

    写在前面 SciPy的optimize模块提供了许多数值优化算法,下面对其中的一些记录. 非线性方程组求解 SciPy中对非线性方程组求解是fslove()函数,它的调用形式一般为fslove(fun, x0),fun是计算非线性方程组的误差函数,它需要一个参数x,fun依靠x来计算线性方程组的每个方程的值(或者叫误差),x0是x的一个初始值. """ 计算非线性方程组: 5x1+3 = 0 4x0^2-2sin(x1x2)=0 x1x2-1.5=0 ""

  • Python科学计算之Pandas详解

    起步 Pandas最初被作为金融数据分析工具而开发出来,因此 pandas 为时间序列分析提供了很好的支持. Pandas 的名称来自于面板数据(panel data)和python数据分析 (data analysis) .panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型. 在我看来,对于 Numpy 以及 Matplotlib ,Pandas可以帮助创建一个非常牢固的用于数据挖掘与分析的基础.而Scipy当然是另一个主要的也十分出色的科学计

  • Python科学计算之NumPy入门教程

    前言 NumPy是Python用于处理大型矩阵的一个速度极快的数学库.它允许你在Python中做向量和矩阵的运算,而且很多底层的函数都是用C写的,你将获得在普通Python中无法达到的运行速度.这是由于矩阵中每个元素的数据类型都是一样的,这也就减少了运算过程中的类型检测. 矩阵基础 在 numpy 包中我们用数组来表示向量,矩阵和高阶数据结构.他们就由数组构成,一维就用一个数组表示,二维就是数组中包含数组表示. 创建 # coding: utf-8 import numpy as np a =

  • Python科学计算包numpy用法实例详解

    本文实例讲述了Python科学计算包numpy用法.分享给大家供大家参考,具体如下: 1 数据结构 numpy使用一种称为ndarray的类似Matlab的矩阵式数据结构管理数据,比python的列表和标准库的array类更为强大,处理数据更为方便. 1.1 数组的生成 在numpy中,生成数组需要指定数据类型,默认是int32,即整数,可以通过dtype参数来指定,一般用到的有int32.bool.float32.uint32.complex,分别代表整数.布尔值.浮点型.无符号整数和复数 一

  • python科学计算之narray对象用法

    写在前面 最近在系统的看一些python科学计算开源包的内容,虽然以前是知道一些的,但都属于零零碎碎的,希望这次能把常用的一些函数.注意项整理下.小白的一些废话,高手请略过^ _ ^.文章中的函数仅仅是为了自己好理解,并没有按照官方文档上的函数声明形式记录. numpy.narray numpy.narray创建 numpy.narray的构造方式挺多的,这里就不一一说明,因为一般情况下,在进行科学计算时是通过给定的数据文件来读取的,而读取时使用的是pandas,具体可参考官方文档,或者参见这位

  • python科学计算之numpy——ufunc函数用法

    写在前面 ufunc是universal function的缩写,意思是这些函数能够作用于narray对象的每一个元素上,而不是针对narray对象操作,numpy提供了大量的ufunc的函数.这些函数在对narray进行运算的速度比使用循环或者列表推导式要快很多,但请注意,在对单个数值进行运算时,python提供的运算要比numpy效率高. 四则运算 numpy提供的四则ufunc有如下一些: numpy提供的四则运算unfunc能够大大的提高计算效率,但如果运算式复杂,且参与运算的narra

  • python编程PyAutoGUI库使用与安装简介

    如何通过python代码解放双手,或者通过代码实现自动的电脑鼠标or键盘操作呢? python的PyAutoGUI库是一个很好地选择. 首先根据下面这个网址下载PyAutoGUI https://pypi.org/project/PyAutoGUI/ 因为我使用的python的IDE是Pycharm,所以在Pycharm的terminal里输入下列代码: pip install PyAutoGUI 安装成功~~ 然后在Pycharm的setting的project interprer里把PyAu

  • python中dlib库的详细安装方法

    一.下载dlib 下载自己需要的. 二.安装需要的库 准备安装dlib前安装的库: 更新 pip.setuptools.wheel pip install --upgrade pip pip install --upgrade setuptools pip install --upgrade wheel 可以使用镜像:-i pip install cmake -i pip install boost i 三.安装dlib win + R => cmd # pip install (前面下载的dl

  • Python科学计算环境推荐——Anaconda

    Anaconda是一个和Canopy类似的科学计算环境,但用起来更加方便.自带的包管理器conda也很强大. 首先是下载安装.Anaconda提供了Python2.7和Python3.4两个版本,同时如果需要其他版本,还可以通过conda来创建.安装完成后可以看到,Anaconda提供了Spyder,IPython和一个命令行.下面来看一下conda. 输入 conda list 来看一下所有安装时自带的Python扩展.粗略看了一下,其中包括了常用的 Numpy , Scipy , matpl

随机推荐