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


Posted in Python onOctober 12, 2019

一、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,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python有证书的加密解密实现方法
Nov 19 Python
浅谈python为什么不需要三目运算符和switch
Jun 17 Python
利用python实现数据分析
Jan 11 Python
Python将图片转换为字符画的方法
Jun 16 Python
python3 unicode列表转换为中文的实例
Oct 26 Python
对python 命令的-u参数详解
Dec 03 Python
在Python运行时动态查看进程内部信息的方法
Feb 22 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
Nov 19 Python
利用python实现.dcm格式图像转为.jpg格式
Jan 13 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
利用scikitlearn画ROC曲线实例
Jul 02 Python
Python函数调用追踪实现代码
Nov 27 Python
Django1.11配合uni-app发起微信支付的实现
Oct 12 #Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 #Python
详解Python绘图Turtle库
Oct 12 #Python
Python中的list与tuple集合区别解析
Oct 12 #Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
Oct 12 #Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
Oct 12 #Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
Oct 12 #Python
You might like
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
Laravel数据库读写分离配置的方法
2019/10/13 PHP
Prototype Number对象 学习
2009/07/19 Javascript
jsTree树控件(基于jQuery, 超强悍)[推荐]
2009/09/01 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
javascript实现可键盘控制的抽奖系统
2016/03/10 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
土木工程专业自荐信
2013/10/04 职场文书
工程部主管岗位职责
2013/11/17 职场文书
打架检讨书50字
2014/01/11 职场文书
《姥姥的剪纸》教学反思
2014/02/25 职场文书
人代会标语
2014/06/30 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
论语读书笔记
2015/06/26 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python
Python实现列表拼接和去重的三种方式
2021/07/02 Python
python 多态 协议 鸭子类型详解
2021/11/27 Python