1. 程式人生 > 實用技巧 >Laravel 實現關係模型取出需要的欄位

Laravel 實現關係模型取出需要的欄位

一、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,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對碼農教程網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!