小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

學(xué)習(xí)PHP中統(tǒng)計(jì)擴(kuò)展函數(shù)的使用

 硬核項(xiàng)目經(jīng)理 2021-08-30

做統(tǒng)計(jì)相關(guān)系統(tǒng)的朋友一定都會(huì)學(xué)習(xí)過(guò)什么正態(tài)分布、方差、標(biāo)準(zhǔn)差之類的概念,在 PHP 中,也有相應(yīng)的擴(kuò)展函數(shù)是專門(mén)為這些統(tǒng)計(jì)相關(guān)的功能所開(kāi)發(fā)的。我們今天要學(xué)習(xí)的 stats 擴(kuò)展函數(shù)庫(kù)就是這類操作函數(shù)。當(dāng)然,本身我并沒(méi)有做過(guò)什么類似的系統(tǒng),對(duì)這些概念也是一知半解,所以今天學(xué)習(xí)的內(nèi)容也只是基于個(gè)人的理解以及原來(lái)稍微接觸過(guò)的一些內(nèi)容。不過(guò)據(jù)說(shuō) Python 在這方面就相對(duì)來(lái)說(shuō)會(huì)更加強(qiáng)大一些,畢竟是萬(wàn)能膠水語(yǔ)言,而且也是在統(tǒng)計(jì)領(lǐng)域獲得成功之后才慢慢被大眾接受的一門(mén)語(yǔ)言,有興趣的同學(xué)可以自己研究一下。

stats 擴(kuò)展的安裝也非常地簡(jiǎn)單,直接使用正常的擴(kuò)展安裝方式就可以了。而且它不需要額外的其他系統(tǒng)中組件的支持,非常方便。

0-1之間的隨機(jī)數(shù)

首先我們來(lái)看一個(gè)和統(tǒng)計(jì)關(guān)系不大的函數(shù)。

var_dump(stats_rand_ranf()); // float(0.32371053099632)

普通的 rand() 和 mt_rand() 函數(shù)都是返回從 0 到 getrandmax() 之間的整數(shù)。而這個(gè) stats_rand_ranf() 返回的則是 0 到 1 之間的小數(shù)。除了這個(gè)函數(shù)之外,還有 stats_rand_ 開(kāi)頭的其它一些函數(shù),是用于返回正態(tài)分布之類的隨機(jī)值的,大家有對(duì)統(tǒng)計(jì)學(xué)了解的可以自行查閱文檔。

方差、標(biāo)準(zhǔn)差

方差和標(biāo)準(zhǔn)差這兩個(gè)概念應(yīng)該相對(duì)來(lái)說(shuō)更簡(jiǎn)單和普遍一些。像我真正的專業(yè)是心理學(xué),在心理統(tǒng)計(jì)中,就有方差的和標(biāo)準(zhǔn)差的計(jì)算,而且也是考試的必考內(nèi)容。不過(guò)這塊的內(nèi)容也非常簡(jiǎn)單,我們?cè)谑褂煤瘮?shù)后也會(huì)使用自己計(jì)算的代碼來(lái)展示方差和標(biāo)準(zhǔn)差的計(jì)算公式。

// 1,3,9,12
// 平均數(shù):(1+3+9+12)/4 = 6.25

// 方差
var_dump(stats_variance([1,3,9,12])); // float(19.6875)
// 方差公式:(1-6.25)^2+(3-6.25)^2+(9-6.25)^2+(12-6.25)^2)/4
var_dump((pow(1-6.252)+pow(3-6.252)+pow(9-6.25,2)+pow(12-6.25,2))/4); // float(19.6875)

平均數(shù)對(duì)于很多統(tǒng)計(jì)計(jì)算都很有用,是很多算法的基本數(shù)據(jù)之一。所以我們先準(zhǔn)備好一個(gè)平均數(shù),主要是為了我們后面的手動(dòng)計(jì)算使用。其實(shí),方差和標(biāo)準(zhǔn)差也是很多其它計(jì)算的基礎(chǔ)數(shù)據(jù)。

stats_variance() 函數(shù)就是用于計(jì)算一組數(shù)據(jù)的方差。它接收的是一個(gè)數(shù)組參數(shù),計(jì)算的內(nèi)容也就是數(shù)據(jù)里面數(shù)據(jù)的值。關(guān)于方差的公式其實(shí)就是每一個(gè)數(shù)據(jù)減去平均數(shù)以后平方,然后全部加起來(lái)之后再除以數(shù)據(jù)的數(shù)量。

可以看到計(jì)算的結(jié)果和我們直接調(diào)用 stats_variance() 函數(shù)的結(jié)果是一樣的。

// 標(biāo)準(zhǔn)差
var_dump(stats_standard_deviation([1,3,9,12])); // float(4.4370598373247)
var_dump(stats_standard_deviation([1,3,9,12], true)); // float(5.1234753829798)
// 標(biāo)準(zhǔn)差:開(kāi)方((1-6.25)^2+(3-6.25)^2+(9-6.25)^2+(12-6.25)^2)/4)
// 樣本標(biāo)準(zhǔn)差:開(kāi)方((1-6.25)^2+(3-6.25)^2+(9-6.25)^2+(12-6.25)^2)/(4-1))

var_dump(sqrt((pow(1-6.252)+pow(3-6.252)+pow(9-6.25,2)+pow(12-6.25,2))/4)); // float(4.4370598373247)
var_dump(sqrt((pow(1-6.252)+pow(3-6.252)+pow(9-6.25,2)+pow(12-6.25,2))/3)); // float(5.1234753829798)

標(biāo)準(zhǔn)差的計(jì)算其實(shí)就是對(duì)于方差結(jié)果開(kāi)方后再除以數(shù)據(jù)的數(shù)量。它有兩種形式,一種是直接除以數(shù)量,一種是除以數(shù)量減一,分別就叫做 標(biāo)準(zhǔn)差 和 樣本標(biāo)準(zhǔn)差 。可以看到直接使用 stats_standard_deviation() ,并且指定它的第二個(gè)參數(shù)就可以方便地切換這兩種標(biāo)準(zhǔn)差的計(jì)算結(jié)果。并且比自己手寫(xiě)的計(jì)算也方便很多。

平均偏差、調(diào)和平均數(shù)、階乘

平均偏差一般指的是數(shù)列中各項(xiàng)數(shù)值與其算術(shù)平均數(shù)的離差絕對(duì)值的算術(shù)平均數(shù)。我的天啊,這概念都讀得好繞口,學(xué)統(tǒng)計(jì)的小伙伴們你們過(guò)得還好嗎?當(dāng)然,在 stats 擴(kuò)展中一個(gè)函數(shù)就搞定了。

// 平均偏差
var_dump(stats_absolute_deviation([1,3912])); // 4.25

// ((6.25-1)+(6.25-3)+(9-6.25)+(12-6.25))/4
//(5.25+3.25+2.75+5.75)/4 = 4.25

stats_absolute_deviation() 函數(shù)用于計(jì)算平均偏差,其實(shí)上面的概念就是我在注釋中寫(xiě)的公式。每個(gè)數(shù)據(jù)減平均數(shù)之后的絕對(duì)值再除以數(shù)據(jù)數(shù)量就可以了,直接看公式是不是比上面的概念要清晰很多。同樣,我們?cè)倏聪抡{(diào)和平均數(shù)。

// 調(diào)和平均數(shù)
var_dump(stats_harmonic_mean([13912])); // float(2.6181818181818)
// 4/(1/1+1/3+1/9+1/12) = 2.6181818181818

stats_harmonic_mean() 用于計(jì)算一組數(shù)據(jù)的調(diào)和平均數(shù)。從下面注釋的計(jì)算公式中可以看出來(lái)嗎?調(diào)和平均數(shù)就是每個(gè)數(shù)據(jù)倒數(shù)相加之后再使用數(shù)據(jù)數(shù)量除以倒數(shù)和得到的結(jié)果。

最后就來(lái)個(gè)輕松一點(diǎn)的,一個(gè)可以直接計(jì)算階乘結(jié)果的函數(shù)。

var_dump(stats_stat_factorial(6)); // float(720)
// 1*2*3*4*5*6 = 720

這個(gè)函數(shù)相信不用多解釋了吧。

峰度、偏度、累積正態(tài)分布函數(shù)、概率密度

這些概念其實(shí)我也沒(méi)有接觸過(guò)了。不過(guò)就是測(cè)試了一下函數(shù)代碼可以使用而已。相關(guān)的函數(shù)還有很多,比如我們這里只是與正態(tài)分布相關(guān)的一些函數(shù),還有 F分布 、t分布 、柯西分布、卡方分布 等等相關(guān)的計(jì)算函數(shù)。我承認(rèn)我只聽(tīng)說(shuō)過(guò)一兩個(gè)的名字,還有很多甚至連名字都沒(méi)聽(tīng)說(shuō)過(guò)。

// 峰度
var_dump(stats_kurtosis([13912])); // float(-1.6960846560847)

// 偏度
var_dump(stats_skew([13912])); // float(0.091222998923078)


// 返回正態(tài)分布的累積分布函數(shù)、其逆函數(shù)或其參數(shù)之一
var_dump(stats_cdf_normal(14,5,101));
// 返回第一個(gè)參數(shù)的概率密度
var_dump(stats_dens_normal(14510));

其它的各種分布相關(guān)計(jì)算的函數(shù)大家有需要的可以查閱相關(guān)的文檔,這里我就不強(qiáng)行上車(chē)了,上車(chē)了估計(jì)也得開(kāi)溝里去。

總結(jié)

在沒(méi)有刷官方文檔前確實(shí)不知道我們 PHP 中都已經(jīng)有這樣的擴(kuò)展存在了,還在想如果真的要做類似的統(tǒng)計(jì)系統(tǒng)使用 PHP 一定很會(huì)麻煩,所以大家才會(huì)去選擇其它語(yǔ)言。其實(shí)這些擴(kuò)展早就存在了。好不好用不說(shuō),但使用 PHP 來(lái)做這類統(tǒng)計(jì)系統(tǒng)的例子確實(shí)并不是太多,有需要的東西還是要自己多研究研究。而且這類計(jì)算其實(shí)都是各種公式的混合,相信在 Composer 中也有不少好用的框架可以供我們使用而不需要再到系統(tǒng)中單獨(dú)安裝擴(kuò)展。

測(cè)試代碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202012/source/10.學(xué)習(xí)PHP中統(tǒng)計(jì)擴(kuò)展函數(shù)的使用.php

參考文檔:

https://www./manual/zh/book.stats.php

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多