python有個符號計算的庫叫sympy,可以直接用這個庫求導(dǎo)數(shù)然后解導(dǎo)數(shù)=0的方程,參考代碼如下:
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、波密網(wǎng)絡(luò)推廣、小程序設(shè)計、波密網(wǎng)絡(luò)營銷、波密企業(yè)策劃、波密品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供波密建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
from sympy import *
x = symbols('x')
y = (x-3)**2+2*sin(x)-3*x+1
eq = diff(y, x)
solve(eq, x)
1. 常用函數(shù)庫
? scipy包中的stats模塊和statsmodels包是python常用的數(shù)據(jù)分析工具,scipy.stats以前有一個models子模塊,后來被移除了。這個模塊被重寫并成為了現(xiàn)在獨立的statsmodels包。
?scipy的stats包含一些比較基本的工具,比如:t檢驗,正態(tài)性檢驗,卡方檢驗之類,statsmodels提供了更為系統(tǒng)的統(tǒng)計模型,包括線性模型,時序分析,還包含數(shù)據(jù)集,做圖工具等等。
2. 小樣本數(shù)據(jù)的正態(tài)性檢驗
(1) 用途
?夏皮羅維爾克檢驗法 (Shapiro-Wilk) 用于檢驗參數(shù)提供的一組小樣本數(shù)據(jù)線是否符合正態(tài)分布,統(tǒng)計量越大則表示數(shù)據(jù)越符合正態(tài)分布,但是在非正態(tài)分布的小樣本數(shù)據(jù)中也經(jīng)常會出現(xiàn)較大的W值。需要查表來估計其概率。由于原假設(shè)是其符合正態(tài)分布,所以當P值小于指定顯著水平時表示其不符合正態(tài)分布。
?正態(tài)性檢驗是數(shù)據(jù)分析的第一步,數(shù)據(jù)是否符合正態(tài)性決定了后續(xù)使用不同的分析和預(yù)測方法,當數(shù)據(jù)不符合正態(tài)性分布時,我們可以通過不同的轉(zhuǎn)換方法把非正太態(tài)數(shù)據(jù)轉(zhuǎn)換成正態(tài)分布后再使用相應(yīng)的統(tǒng)計方法進行下一步操作。
(2) 示例
(3) 結(jié)果分析
?返回結(jié)果 p-value=0.029035290703177452,比指定的顯著水平(一般為5%)小,則拒絕假設(shè):x不服從正態(tài)分布。
3. 檢驗樣本是否服務(wù)某一分布
(1) 用途
?科爾莫戈羅夫檢驗(Kolmogorov-Smirnov test),檢驗樣本數(shù)據(jù)是否服從某一分布,僅適用于連續(xù)分布的檢驗。下例中用它檢驗正態(tài)分布。
(2) 示例
(3) 結(jié)果分析
?生成300個服從N(0,1)標準正態(tài)分布的隨機數(shù),在使用k-s檢驗該數(shù)據(jù)是否服從正態(tài)分布,提出假設(shè):x從正態(tài)分布。最終返回的結(jié)果,p-value=0.9260909172362317,比指定的顯著水平(一般為5%)大,則我們不能拒絕假設(shè):x服從正態(tài)分布。這并不是說x服從正態(tài)分布一定是正確的,而是說沒有充分的證據(jù)證明x不服從正態(tài)分布。因此我們的假設(shè)被接受,認為x服從正態(tài)分布。如果p-value小于我們指定的顯著性水平,則我們可以肯定地拒絕提出的假設(shè),認為x肯定不服從正態(tài)分布,這個拒絕是絕對正確的。
4.方差齊性檢驗
(1) 用途
?方差反映了一組數(shù)據(jù)與其平均值的偏離程度,方差齊性檢驗用以檢驗兩組或多組數(shù)據(jù)與其平均值偏離程度是否存在差異,也是很多檢驗和算法的先決條件。
(2) 示例
(3) 結(jié)果分析
?返回結(jié)果 p-value=0.19337536323599344, 比指定的顯著水平(假設(shè)為5%)大,認為兩組數(shù)據(jù)具有方差齊性。
5. 圖形描述相關(guān)性
(1) 用途
?最常用的兩變量相關(guān)性分析,是用作圖描述相關(guān)性,圖的橫軸是一個變量,縱軸是另一變量,畫散點圖,從圖中可以直觀地看到相關(guān)性的方向和強弱,線性正相關(guān)一般形成由左下到右上的圖形;負面相關(guān)則是從左上到右下的圖形,還有一些非線性相關(guān)也能從圖中觀察到。
(2) 示例
(3) 結(jié)果分析
?從圖中可以看到明顯的正相關(guān)趨勢。
6. 正態(tài)資料的相關(guān)分析
(1) 用途
?皮爾森相關(guān)系數(shù)(Pearson correlation coefficient)是反應(yīng)兩變量之間線性相關(guān)程度的統(tǒng)計量,用它來分析正態(tài)分布的兩個連續(xù)型變量之間的相關(guān)性。常用于分析自變量之間,以及自變量和因變量之間的相關(guān)性。
(2) 示例
(3) 結(jié)果分析
?返回結(jié)果的第一個值為相關(guān)系數(shù)表示線性相關(guān)程度,其取值范圍在[-1,1],絕對值越接近1,說明兩個變量的相關(guān)性越強,絕對值越接近0說明兩個變量的相關(guān)性越差。當兩個變量完全不相關(guān)時相關(guān)系數(shù)為0。第二個值為p-value,統(tǒng)計學(xué)上,一般當p-value0.05時,可以認為兩變量存在相關(guān)性。
7. 非正態(tài)資料的相關(guān)分析
(1) 用途
?斯皮爾曼等級相關(guān)系數(shù)(Spearman’s correlation coefficient for ranked data ),它主要用于評價順序變量間的線性相關(guān)關(guān)系,在計算過程中,只考慮變量值的順序(rank, 值或稱等級),而不考慮變量值的大小。常用于計算類型變量的相關(guān)性。
(2) 示例
(3) 結(jié)果分析
?返回結(jié)果的第一個值為相關(guān)系數(shù)表示線性相關(guān)程度,本例中correlation趨近于1表示正相關(guān)。第二個值為p-value,p-value越小,表示相關(guān)程度越顯著。
8. 單樣本T檢驗
(1) 用途
?單樣本T檢驗,用于檢驗數(shù)據(jù)是否來自一致均值的總體,T檢驗主要是以均值為核心的檢驗。注意以下幾種T檢驗都是雙側(cè)T檢驗。
(2) 示例
(3) 結(jié)果分析
?本例中生成了2列100行的數(shù)組,ttest_1samp的第二個參數(shù)是分別對兩列估計的均值,p-value返回結(jié)果,第一列1.47820719e-06比指定的顯著水平(一般為5%)小,認為差異顯著,拒絕假設(shè);第二列2.83088106e-01大于指定顯著水平,不能拒絕假設(shè):服從正態(tài)分布。
9. 兩獨立樣本T檢驗
(1) 用途
?由于比較兩組數(shù)據(jù)是否來自于同一正態(tài)分布的總體。注意:如果要比較的兩組數(shù)據(jù)不滿足方差齊性, 需要在ttest_ind()函數(shù)中添加參數(shù)equal_var = False。
(2) 示例
(3) 結(jié)果分析
?返回結(jié)果的第一個值為統(tǒng)計量,第二個值為p-value,pvalue=0.19313343989106416,比指定的顯著水平(一般為5%)大,不能拒絕假設(shè),兩組數(shù)據(jù)來自于同一總結(jié),兩組數(shù)據(jù)之間無差異。
10. 配對樣本T檢驗
(1) 用途
?配對樣本T檢驗可視為單樣本T檢驗的擴展,檢驗的對象由一群來自正態(tài)分布獨立樣本更改為二群配對樣本觀測值之差。它常用于比較同一受試對象處理的前后差異,或者按照某一條件進行兩兩配對分別給與不同處理的受試對象之間是否存在差異。
(2) 示例
(3) 結(jié)果分析
?返回結(jié)果的第一個值為統(tǒng)計量,第二個值為p-value,pvalue=0.80964043445811551,比指定的顯著水平(一般為5%)大,不能拒絕假設(shè)。
11. 單因素方差分析
(1) 用途
?方差分析(Analysis of Variance,簡稱ANOVA),又稱F檢驗,用于兩個及兩個以上樣本均數(shù)差別的顯著性檢驗。方差分析主要是考慮各組之間的平均數(shù)差別。
?單因素方差分析(One-wayAnova),是檢驗由單一因素影響的多組樣本某因變量的均值是否有顯著差異。
?當因變量Y是數(shù)值型,自變量X是分類值,通常的做法是按X的類別把實例成分幾組,分析Y值在X的不同分組中是否存在差異。
(2) 示例
(3) 結(jié)果分析
?返回結(jié)果的第一個值為統(tǒng)計量,它由組間差異除以組間差異得到,上例中組間差異很大,第二個返回值p-value=6.2231520821576832e-19小于邊界值(一般為0.05),拒絕原假設(shè), 即認為以上三組數(shù)據(jù)存在統(tǒng)計學(xué)差異,并不能判斷是哪兩組之間存在差異 。只有兩組數(shù)據(jù)時,效果同 stats.levene 一樣。
12. 多因素方差分析
(1) 用途
?當有兩個或者兩個以上自變量對因變量產(chǎn)生影響時,可以用多因素方差分析的方法來進行分析。它不僅要考慮每個因素的主效應(yīng),還要考慮因素之間的交互效應(yīng)。
(2) 示例
(3) 結(jié)果分析
?上述程序定義了公式,公式中,"~"用于隔離因變量和自變量,”+“用于分隔各個自變量, ":"表示兩個自變量交互影響。從返回結(jié)果的P值可以看出,X1和X2的值組間差異不大,而組合后的T:G的組間有明顯差異。
13. 卡方檢驗
(1) 用途
?上面介紹的T檢驗是參數(shù)檢驗,卡方檢驗是一種非參數(shù)檢驗方法。相對來說,非參數(shù)檢驗對數(shù)據(jù)分布的要求比較寬松,并且也不要求太大數(shù)據(jù)量??ǚ綑z驗是一種對計數(shù)資料的假設(shè)檢驗方法,主要是比較理論頻數(shù)和實際頻數(shù)的吻合程度。常用于特征選擇,比如,檢驗?zāi)腥撕团嗽谑欠窕加懈哐獕荷嫌袩o區(qū)別,如果有區(qū)別,則說明性別與是否患有高血壓有關(guān),在后續(xù)分析時就需要把性別這個分類變量放入模型訓(xùn)練。
?基本數(shù)據(jù)有R行C列, 故通稱RC列聯(lián)表(contingency table), 簡稱RC表,它是觀測數(shù)據(jù)按兩個或更多屬性(定性變量)分類時所列出的頻數(shù)表。
(2) 示例
(3) 結(jié)果分析
?卡方檢驗函數(shù)的參數(shù)是列聯(lián)表中的頻數(shù),返回結(jié)果第一個值為統(tǒng)計量值,第二個結(jié)果為p-value值,p-value=0.54543425102570975,比指定的顯著水平(一般5%)大,不能拒絕原假設(shè),即相關(guān)性不顯著。第三個結(jié)果是自由度,第四個結(jié)果的數(shù)組是列聯(lián)表的期望值分布。
14. 單變量統(tǒng)計分析
(1) 用途
?單變量統(tǒng)計描述是數(shù)據(jù)分析中最簡單的形式,其中被分析的數(shù)據(jù)只包含一個變量,不處理原因或關(guān)系。單變量分析的主要目的是通過對數(shù)據(jù)的統(tǒng)計描述了解當前數(shù)據(jù)的基本情況,并找出數(shù)據(jù)的分布模型。
?單變量數(shù)據(jù)統(tǒng)計描述從集中趨勢上看,指標有:均值,中位數(shù),分位數(shù),眾數(shù);從離散程度上看,指標有:極差、四分位數(shù)、方差、標準差、協(xié)方差、變異系數(shù),從分布上看,有偏度,峰度等。需要考慮的還有極大值,極小值(數(shù)值型變量)和頻數(shù),構(gòu)成比(分類或等級變量)。
?此外,還可以用統(tǒng)計圖直觀展示數(shù)據(jù)分布特征,如:柱狀圖、正方圖、箱式圖、頻率多邊形和餅狀圖。
15. 多元線性回歸
(1) 用途
?多元線性回歸模型(multivariable linear regression model ),因變量Y(計量資料)往往受到多個變量X的影響,多元線性回歸模型用于計算各個自變量對因變量的影響程度,可以認為是對多維空間中的點做線性擬合。
(2) 示例
(3) 結(jié)果分析
?直接通過返回結(jié)果中各變量的P值與0.05比較,來判定對應(yīng)的解釋變量的顯著性,P0.05則認為自變量具有統(tǒng)計學(xué)意義,從上例中可以看到收入INCOME最有顯著性。
16. 邏輯回歸
(1) 用途
?當因變量Y為2分類變量(或多分類變量時)可以用相應(yīng)的logistic回歸分析各個自變量對因變量的影響程度。
(2) 示例
(3) 結(jié)果分析
?直接通過返回結(jié)果中各變量的P值與0.05比較,來判定對應(yīng)的解釋變量的顯著性,P0.05則認為自變量具有統(tǒng)計學(xué)意義。
極差是指一組數(shù)據(jù)內(nèi)的最大值和最小值之間的差異。
平均差是說明集中趨勢的,標準差是說明一組數(shù)據(jù)的離中趨勢的。
一組數(shù)據(jù)中各數(shù)據(jù)與平均數(shù)的差的平方和的平均數(shù)叫做這組數(shù)據(jù)的方差;
極差越大,平均差的代表性越小,反之亦然;標準差越大,平均差的代表性越小,反之亦然。
方差的算術(shù)平方根=標準差
python作為數(shù)據(jù)分析的利器,求極差、平均數(shù)、中位數(shù)、眾數(shù)與方差是很常用的,然而,在python進行統(tǒng)計往往要使用外部的python庫numpy,這個庫不難裝,然而,如果單純只是求極差、平均數(shù)、中位數(shù)、眾數(shù)與方差,還是自己寫比較好,因為,給一個.py程序別人的機器,別人的機器上沒有python庫numpy,又要別人折騰一番,這很不好。不過看情況咯,如果你要處理上億級的數(shù)據(jù),還是配置一下外部的python庫numpy吧。
先給大家回歸一下極差、平均數(shù)、中位數(shù)、眾數(shù)與方差是什么鬼:
1、極差:最大值與最小值之差。它是標志值變動的最大范圍。英文:range
公式:R=Xmax-Xmin(其中,Xmax為最大值,Xmin為最小值)
2、平均數(shù):一組數(shù)據(jù)中所有數(shù)據(jù)之和再除以數(shù)據(jù)的個數(shù)。反映數(shù)據(jù)集中趨勢的一項指標。英文:average
公式:
3、中位數(shù):對于有限的數(shù)集,可以通過把所有觀察值高低排序后找出正中間的一個作為中位數(shù)。如果觀察值有偶數(shù)個,通常取最中間的兩個數(shù)值的平均數(shù)作為中位數(shù)。英文:median
公式:從小到大排序為??則N為奇數(shù)時,N為偶數(shù)時,?
4、眾數(shù):眾數(shù)是樣本觀測值在頻數(shù)分布表中頻數(shù)最多的那一組的組中值,主要應(yīng)用于大面積普查研究之中。英文:mode
例如:1,2,3,3,4的眾數(shù)是3。
但是,如果有兩個或兩個以上個數(shù)出現(xiàn)次數(shù)都是最多的,那么這幾個數(shù)都是這組數(shù)據(jù)的眾數(shù)。
例如:1,2,2,3,3,4的眾數(shù)是2和3。
還有,如果所有數(shù)據(jù)出現(xiàn)的次數(shù)都一樣,那么這組數(shù)據(jù)沒有眾數(shù)。
例如:1,2,3,4,5沒有眾數(shù)。
5、方差:方差是實際值與期望值之差平方的平均值,方差是在概率論和統(tǒng)計方差衡量隨機變量或一組數(shù)據(jù)是離散程度的度量。英文:variance
公式:或者(就是在《概率論與數(shù)理統(tǒng)計》中那條,方差就是平方的期望-期望的平方)
因此,根據(jù)上述的理論,得到如下的代碼:
[python]?view plain?copy
#-*-coding:utf-8-*-
import?time;
import?random;
class?Math:
#求極差
@staticmethod
def?range(l):
return?max(l)-min(l);
#求平均數(shù)
@staticmethod
def?avg(l):
return?float(sum(l))/len(l);
#求中位數(shù)
@staticmethod
def?median(l):
l=sorted(l);#先排序
if?len(l)%2==1:
return?l[len(l)/2];
else:
return?(l[len(l)/2-1]+l[len(l)/2])/2.0;
#求眾數(shù)
@staticmethod
def?mode(l):
#統(tǒng)計list中各個數(shù)值出現(xiàn)的次數(shù)
count_dict={};
for?i?in?l:
if?count_dict.has_key(i):
count_dict[i]+=1;
else:
count_dict[i]=1;
#求出現(xiàn)次數(shù)的最大值
max_appear=0
for?v?in?count_dict.values():
if?vmax_appear:
max_appear=v;
if?max_appear==1:
return;
mode_list=[];
for?k,v?in?count_dict.items():
if?v==max_appear:
mode_list.append(k);
return?mode_list;
#求方差
@staticmethod
def?variance(l):#平方的期望-期望的平方
s1=0;
s2=0;
for?i?in?l:
s1+=i**2;
s2+=i;
return?float(s1)/len(l)-(float(s2)/len(l))**2;
#求方差2
@staticmethod
def?variance2(l):#平方-期望的平方的期望
ex=float(sum(l))/len(l);
s=0;
for?i?in?l:
s+=(i-ex)**2;
return?float(s)/len(l);
#主函數(shù),測試
arr=[1,2,3,2,3,1,4];
print?"極差為:{0}".format(Math.range(arr));
print?"平均數(shù)為:{0:.2f}".format(Math.avg(arr));
print?"中位數(shù)為:{0}".format(Math.median(arr));
print?"眾數(shù)為:{0}".format(Math.mode(arr));
print?"方差為:{0:.2f}".format(Math.variance(arr));
print?"方差為:{0:.2f}".format(Math.variance2(arr));
print;
#性能測試
arraylist=[];
for?i?in?range(1,1000000):
arraylist.append(i);
random.shuffle(arraylist);
time_start=time.time();
print?"方差為:{0:.2f}".format(Math.variance(arraylist));
time_end=time.time();
print?"{0}s".format(time_end-time_start);
time_start=time.time();
print?"方差為:{0:.2f}".format(Math.variance2(arraylist));
time_end=time.time();
print?"{0}s".format(time_end-time_start);
運行結(jié)果如下:
關(guān)于這個程序有幾點說明的:
(1)開頭引入time與random主要是為了最后部分測試兩種求方差的方式那種性能較優(yōu)使用,一般情況下使用上述我自定義的Math類,無須引入任何python包。
(2)求任何一個統(tǒng)計量,用到除法,注意先將int先轉(zhuǎn)float,否則精度損失嚴重,你是得到不到最后的正確答案的。
(3)python中自帶有求list所有元素之和的sum,求list中的最值max,min,對list中的元素進行從小到大的排序sort()都用了,其余只能讓我們自己現(xiàn)實了。
(4)這里無須考慮如果形式參數(shù)被傳入一個字符串數(shù)組怎么辦,因為這些工具類都是我們自己使用了,自己控制好要傳遞的數(shù)值,無須考慮這么多。
(5)求眾數(shù)最艱難,因為用不到任何python自帶的方法,還要返回一個list,因為眾數(shù)的個數(shù)不定,統(tǒng)計數(shù)組中出現(xiàn)次數(shù)最多的數(shù)的時候,用到了python中的字典dict,《【Python】容器類》(點擊打開鏈接),這個字典中,key是list中的數(shù)字,values是該數(shù)字出現(xiàn)的次數(shù)。然后要求出現(xiàn)次數(shù)的最大值,最后再求出改最大值對應(yīng)的key。其中用count_dict.items()返回字典中的key-value對的數(shù)組集,count_dict.values()返回字典中的value集,當然同時也有count_dict.keys()返回key集。
(6)由于求方差的方法有兩種,此程序在最后部分生成了一個百萬級、打亂順序的list,對兩種求方差的方法進行測試,令人吃驚的是,萬萬沒想到是我們愚蠢的人類最不愛用,也最難用的,最不好用的平方-期望的平方的期望,優(yōu)于更好記憶的、更常用的平方的期望-期望的平方:。。從上述的運行結(jié)果可以看出這種求方差的方法速度是的一倍!這就是聰明的計算機與愚蠢的人類的區(qū)別吧~
(7)最后,python的打印到控制臺,其實你完全可以print得更好的,你不換行還要在print后面補逗號嗎,再print一個什么東東,或者將數(shù)值用str先轉(zhuǎn)字符串才能與純正的字符串連接起來,而字符串的format方法,配合print相當于C語言的printf,同時python的format用{0},{1}...代表后面的第0、1……參數(shù)。{0:.2f}代表這個參數(shù)以保留2位小數(shù)的方式輸出。
閱讀全文
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)