深入淺析Python科學(xué)計算庫Scipy及安裝步驟
一、Scipy 入門
1.1、Scipy 簡介及安裝
官網(wǎng):http://www.scipy.org/SciPy
安裝:在C:\Python27\Scripts下打開cmd執(zhí)行:
執(zhí)行:pip install scipy
1.2、安裝Anaconda及環(huán)境搭建(舉例演示)
創(chuàng)建環(huán)境:conda create -n env_name python=3.6
示例: conda create -n Py_36 python=3.6 #創(chuàng)建名為Py_367的環(huán)境
列出所有環(huán)境:conda info -e
進入環(huán)境: source activate Py_36 (OSX/LINUX系統(tǒng))
activate Py_36 (windows系統(tǒng))
1.3、jupyter 安裝
jupyter簡介:jupyter(Jupyter Notebook)是一個交互式筆記本
支持運行40多種編程語言
數(shù)據(jù)清理和轉(zhuǎn)換,數(shù)值模擬,統(tǒng)計建模,機器學(xué)習(xí)等
jupyter 安裝:conda install jupyter notebook
啟動 jupyter:激活相應(yīng)環(huán)境
在控制臺執(zhí)行 :jupyter notebook
notebook服務(wù)器運行地址:http://localhost:8888
新建(notebook,文本文件,文件夾)
關(guān)閉notebook:ctrl+c執(zhí)行兩次
jupyter notebook 使用:
快捷鍵:shift+Enter 運行本單元,選中下個單元
Ctrl+Enter 運行本單元,在其下方插入新單元
Y 單元進入代碼狀態(tài)
M 單元進入markdown狀態(tài)
A 在上方插入新單元
B 在下方插入新單元
X 剪切選中單元
Shift+V 在上方粘貼單元
1.4、scipy的'hello word'
需求:將一個多維數(shù)組保存a.mat文件,后加載該mat文件,獲取內(nèi)容并打印
步驟1:導(dǎo)入scipy需要的模塊
from scipy import io #(需要使用的模塊)
步驟2:利用savemat保存數(shù)據(jù)
io.savemat(file_name,mdict) io.savemat('a.mat',{''array:a})
步驟3:利用 loadmat載入數(shù)據(jù)
io.loadmat(file_name) data = io.loadmat('a.mat')
舉例1:
from scipy import io #導(dǎo)入io import numpy as np #導(dǎo)入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) #創(chuàng)建矩陣 io.savemat("matrix1.mat", {"array": matrix1}) #保存矩陣文件 data=io.loadmat('matrix1.mat') #讀取矩陣文件 print (data["array"]) #輸出矩陣 p1 = np.random.normal(size = 10000) #新建隨機數(shù) plt.hist(p1) #繪制柱形圖 plt.show() #顯示
二、利用Scipy實現(xiàn)統(tǒng)計功能
需求:用Scipy的scipy.stats中的統(tǒng)計函數(shù)分析隨機數(shù)
stats提供了產(chǎn)生連續(xù)性分布的函數(shù)
均勻分布(uniform)
x=stats.uniform.rvs(size = 20) 生成20個[0,1]均勻分布隨機數(shù)
-正態(tài)分布(norm)
x=stats.norm.rvs(size = 20) 生成20個正態(tài)分布隨機數(shù)
-貝塔分布(beta)
x=stats.beta.rvs(size=20,a=3,b=4)生成20個服從參數(shù)a=3,b=4貝塔分布隨機數(shù)
-離散分布
-伯努利分布(Bernoulli)
-幾何分布(geom)
-泊松分布(poisson)
x=stats.poisson.rvs(0.6,loc=0,size = 20)生成20個服從泊松分布隨機數(shù)
三、計算隨機數(shù)均值和標(biāo)準(zhǔn)差
stats.norm.fit :利用正態(tài)分布去擬合生成的數(shù)據(jù),得到其均值和標(biāo)準(zhǔn)差
四、計算隨機數(shù)的偏度
1.概念:
偏度(skewness)描述的是概率分布的偏度(非對稱)程度。
有兩個返回值,第二個為p-value,即數(shù)據(jù)集服從正態(tài)分布的概率(0~1)
2 利用 stats.skewtest()計算偏度
五、計算隨機數(shù)的峰度
1 概念:峰度(kurtosis)-描述的是概率分布曲線陡峭程度
2 利用 stats.kurtosis() 計算峰度
3 正態(tài)分布峰度值為3,excess_k為0
低闊峰(platykurtic) 相對于正態(tài)分布來說更扁平 excess_k<0
高狹峰(leptokurtic) 相對于正態(tài)分布來說更陡峭 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標(biāo)準(zhǔn)差',std) #std標(biāo)準(zhǔn)差 (skewness,pvalue1) = stats.skewtest(arr) print('偏度值') print(skewness) print('符合正態(tài)分布數(shù)據(jù)的概率為') 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) #某一百分比處的數(shù)值 print('在95%處的數(shù)值:') #某一百分比處的數(shù)值 print num indexPercent = stats.percentileofscore(arr,1) #某一數(shù)值處的百分比 print ('在數(shù)值1處的百分比:') #某一數(shù)值處的百分比 print indexPercent plt.hist(arr) #設(shè)置直方圖 plt.show() #顯示圖
六、正態(tài)分布程度檢驗
1 正態(tài)性檢驗(normality test),同樣返回兩個值,第二個返回p-values
2 利用 檢驗 stats.normaltest()
一般情況 pvalue>0.05 表示服從正態(tài)分布
七、計算數(shù)據(jù)所在區(qū)域中某一百分比處的數(shù)值
1 利用scoreatpercentile 計算在某一百分比位置的數(shù)值
格式:scoreatpercentile (數(shù)據(jù)集、百分比)
stats.scoreatpercentile(name_arr,percent)
2 示例:求出95%所在位置的數(shù)值
num = stats.scoreatpercentile(arr,95) print num
八、從某數(shù)值出發(fā)找到對應(yīng)的百分比
利用percentileofscore計算在某數(shù)值對應(yīng)的百分比
格式:percentileofscore(數(shù)據(jù)集,數(shù)值)
示例:indexPercent = stats.percentileofscore(arr,1)
九、直方圖顯示
import matplotlib.pyplot as plt
在Anaconda環(huán)境下(py36)C:\Users\lenovo>導(dǎo)入:conda install matplotlib
plt.hist(arr) #設(shè)置直方圖
plt.show() #顯示圖
九、綜合練習(xí)
1 求出考試分數(shù)的以下值:
均值 中位數(shù) 眾數(shù) 極差 方差
標(biāo)準(zhǔn)差 變異系數(shù)(均值/方差) 偏度 峰度
2 步驟1: 創(chuàng)建兩個二維數(shù)組:[分數(shù),出現(xiàn)次數(shù)]
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:創(chuàng)建函數(shù),將傳入的多維數(shù)組扁平化->變成一維數(shù)組
方法1:
def createScore(arr): score = [] #所有學(xué)員分數(shù) 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:創(chuàng)建函數(shù),根據(jù)傳入數(shù)組,對其進行統(tǒng)計
def calStatValue(score): #集中趨勢度量 print('均值') print(np.mean(score)) print('中位數(shù)') print(np.median(score)) print('眾數(shù)') print(stats.mode(score)) #離散趨勢度量 print('極差') print(np.ptp(score)) print('方差') print(np.var(score)) print('標(biāo)準(zhǔn)差') print(np.std(score)) print('變異系數(shù)') print(np.mean(score)/np.std(score)) #偏度與峰度的度量 print('偏度') print(stats.skewness(score)) print('峰度') print(stats.Kurtosis(score))
步驟4:創(chuàng)建函數(shù),做一個簡單的箱線圖/柱形圖
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 = [] #所有學(xué)員分數(shù) row = arr.shape[0] #獲取多少組元素 for i in np.arange(0,row): #遍歷所有元素組 for j in np.arange(0,int(arr[i][1])):#從0開始填充次數(shù),第i行第1列 score.append(arr[i][0])) score = np.array(score) return score _________________________________ 使用切片獲取分數(shù) score_Easy, num_Easy = arrEasy[:,0],arrEasy[:,1] #所有行第一列;所有行第二列 score_Diff, num_Diff = arrDiff[:,0],arrDiff[:,1] #同上 print (score_Easy,num_Easy) #查看分數(shù),人數(shù) print (score_Diff,num_Diff) #同上 All_score_Easy = np.repeat(list(score_Easy),list(num_Easy)) #所有分數(shù) All_score_Diff = np.repeat(list(score_Diff),list(num_Diff)) #所有分數(shù) ________________________________ 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('中位數(shù)') print(np.median(score)) print('眾數(shù)') print(stats.mode(score)) #離散趨勢度量 print('極差') print(np.ptp(score)) print('方差') print(np.var(score)) print('標(biāo)準(zhǔn)差') print(np.std(score)) print('變異系數(shù)') 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
總結(jié)
以上所述是小編給大家介紹的Python科學(xué)計算庫—Scipy,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
python selenium 獲取標(biāo)簽的屬性值、內(nèi)容、狀態(tài)方法
今天小編就為大家分享一篇python selenium 獲取標(biāo)簽的屬性值、內(nèi)容、狀態(tài)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06Python+Selenium實現(xiàn)自動化的環(huán)境搭建的步驟(圖文)
這篇文章主要介紹了Python+Selenium實現(xiàn)自動化的環(huán)境搭建的步驟(圖文),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09pytorch中交叉熵損失函數(shù)的使用小細節(jié)
這篇文章主要介紹了pytorch中交叉熵損失函數(shù)的使用細節(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02Pytorch實現(xiàn)tensor序列化和并行化的示例詳解
這篇文章主要介紹了Pytorch實現(xiàn)tensor序列化和并行化,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,感興趣的同學(xué)們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12