深入浅析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 相关文章推荐
Django admin美化插件suit使用示例
Dec 12 Python
python机器学习之神经网络(一)
Dec 20 Python
python获取文件路径、文件名、后缀名的实例
Apr 23 Python
替换python字典中的key值方法
Jul 06 Python
python之super的使用小结
Aug 13 Python
python opencv实现图像边缘检测
Apr 29 Python
python实现七段数码管和倒计时效果
Nov 23 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
Jan 13 Python
Jupyter notebook 启动闪退问题的解决
Apr 13 Python
python小白学习包管理器pip安装
Jun 09 Python
python如何将图片转换素描画
Sep 08 Python
移除Selenium中window.navigator.webdriver值
Jun 10 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
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
javascript 面向对象编程 function也是类
2009/09/17 Javascript
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
js控制淡入淡出示例代码
2013/11/12 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
深入探讨JavaScript String对象
2015/03/09 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
python实现翻转棋游戏(othello)
2019/07/29 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
python global和nonlocal用法解析
2020/02/03 Python
Python实现分数序列求和
2020/02/25 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
Python使用tkinter实现小时钟效果
2021/02/22 Python
英国独特礼物想法和个性化礼物网站:notonthehighstreet.com
2018/04/16 全球购物
校园网站的创业计划书范文
2013/12/30 职场文书
2014年班组长工作总结
2014/11/20 职场文书
优秀党员个人总结
2015/02/14 职场文书
自我检讨书怎么写
2015/05/07 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
Python 可迭代对象 iterable的具体使用
2021/08/07 Python