自學生信Python(第五天)|如何計算標準差?

如何計算標準差?

本人是一枚生物學的學生,由于對生物信息學特別感興趣,于是想自學生物信息學(新手莫怪)。了解到生物信息學要有編程基礎,尤其是要會一門編程語言,例如:R語言、Python、Perl等,還要熟悉Linux系統(tǒng),作為生信小白,聽說Python挺簡單的,于是就自學了Python,花了兩天時間了解了Python的基礎語法后,今天想做個練習題試試手(實踐是檢驗真理的唯一標準),下面是練習題:(試題來源:《PYTHON生物信息學數(shù)據(jù)管理》)
今日練習題:如何計算標準差?

計算標準差有些復雜,因為需要 for 循環(huán)來計算每個值的平方差,必須先有預先計算出 的平均值。
然后將每個值減去平均值((value-average) * *2)。 所有平方差要加在一起,除以結果的數(shù)量,最后計算結果的平方根。平方差求和可以設置一個變量為 0.0,每得到一個平方差就加上去。
公式如下:

書中給出的計算的腳本是:

import math
data = [3.53,3.47,3.51,3.72,3.43]
average = sum(data)/len(data)
total  = 0.0
for value in data:
    total += (value - average)**2
stddev = math.sqrt(total/len(data))
print(stddev)

參照書中給出的答案,結合前面所用到的input()函數(shù),對這個計算標準差的腳本進行升級。至于怎么升級,答案肯定是增加用戶輸入。此次升級腳本的意義和難度都不大,完全是為了鞏固一下前面所學的知識(PS:主要是已經學會了input()函數(shù),要不然還是有點難度的,畢竟是會了不難,難了不會!
話不多說,上手最重要,下面進行分步解析。
第一步:導入模塊
這里涉及計算,肯定是首先導入math模塊嘍!

import math

導入成功,萬里長征第一步完成。
第二步:獲取用戶輸入
①首先定義數(shù)據(jù)變量列表

data=[]

②獲取用戶輸入,為了區(qū)分不同的數(shù)值,兩個數(shù)據(jù)之間以“,”分割,這里使用split(',')。(split(',')在[自學生信Python(第四天)]http://www.itdecent.cn/p/d7ebffdfcbe0已經講過,這里就直接使用了。)

data1 = input("請輸入數(shù)值:",).split(',')

③將用戶輸入的字符串轉化為數(shù)值

i=0
for i in range(0,len(data1)):
    data.append(eval(data1[i]))
    i=i+1

**第三步:計算公式


觀察公式可以知道,首先我們需要求出輸入的數(shù)據(jù)的平均值(平均值計算參考http://www.itdecent.cn/p/d7ebffdfcbe0
然后計算每個數(shù)和平均值差的平方,然后求和,再求其平均值,最后再求其平方根。
①先求平均值

average = sum(data)/len(data)

②求每個數(shù)和平均值差的平方,并求和

total  = 0.0
for value in data:
    total += (value - average)**2

③求上述和的平均值,然后求其結果的平方根

stddev = math.sqrt(total/len(data))

**第四步:輸出結果

print(stddev)

綜上所述,將結果匯總,其完整代碼如下:

import math

data=[]
i = 0
data1 = input("請輸入數(shù)值:",).split(',')
for i in range(0,len(data1)):
    data.append(eval(data1[i]))
    i=i+1

average = sum(data)/len(data)
total  = 0.0
for value in data:
    total += (value - average)**2
stddev = math.sqrt(total/len(data))

print(stddev)

使用簡單的幾行代碼,實現(xiàn)獲取用戶輸入,并計算出用戶輸出的結果。感興趣的蛇友們,還可以加入異常判斷,如果用戶輸入的不是數(shù)字而是別的什么,實現(xiàn)也能使程序運行不報錯,而且能提醒用戶重新輸入數(shù)據(jù)的功能。

雖然這是個小小的計算程序,但對于初學者的我來說每一次對原代碼的升級改造,哪怕是讀懂后的注釋都感覺是一次進步提升,總之代碼雖小,動手最重要!希望更多學習Python的愛好者不要像我一樣眼高手低,學習編程就是要,思考,敲碼,思考,敲碼,敲碼,再敲碼!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容