|
做統(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ù)對(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)差標(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ù)就搞定了。 // 平均偏差stats_absolute_deviation() 函數(shù)用于計(jì)算平均偏差,其實(shí)上面的概念就是我在注釋中寫(xiě)的公式。每個(gè)數(shù)據(jù)減平均數(shù)之后的絕對(duì)值再除以數(shù)據(jù)數(shù)量就可以了,直接看公式是不是比上面的概念要清晰很多。同樣,我們?cè)倏聪抡{(diào)和平均數(shù)。 // 調(diào)和平均數(shù)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)這個(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ò)。 // 峰度其它的各種分布相關(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 |
|
|
來(lái)自: 硬核項(xiàng)目經(jīng)理 > 《待分類》