深入浅析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中的魔法方法深入理解
Jul 09 Python
python爬虫入门教程--利用requests构建知乎API(三)
May 25 Python
Python 判断是否为质数或素数的实例
Oct 30 Python
浅谈Python实现贪心算法与活动安排问题
Dec 19 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
简单谈谈Python的pycurl模块
Apr 07 Python
pyqt5利用pyqtDesigner实现登录界面
Mar 28 Python
Python后台开发Django会话控制的实现
Apr 15 Python
Python 中Django安装和使用教程详解
Jul 03 Python
运用PyTorch动手搭建一个共享单车预测器
Aug 06 Python
python3的数据类型及数据类型转换实例详解
Aug 20 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 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
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
PHP中uploaded_files函数使用方法详解
2011/03/09 PHP
php解决和避免form表单重复提交的几种方法
2016/08/31 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
node 文件上传接口的转发的实现
2019/09/23 Javascript
原生JavaScript实现刮刮乐
2020/09/29 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
c++生成dll使用python调用dll的方法
2014/01/20 Python
python实现定时同步本机与北京时间的方法
2015/03/24 Python
谈谈python中GUI的选择
2018/03/01 Python
python中yaml配置文件模块的使用详解
2018/04/27 Python
python解析xml简单示例
2019/06/21 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
python制作朋友圈九宫格图片
2019/11/03 Python
基于python调用psutil模块过程解析
2019/12/20 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
北京银河万佳Java面试题
2012/03/21 面试题
自考毕业自我鉴定范文
2013/10/27 职场文书
开业主持词
2014/03/21 职场文书
水电施工员岗位职责
2015/04/11 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang
Vue图片裁剪组件实例代码
2021/07/02 Vue.js
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript