如何計算標準差?
本人是一枚生物學的學生,由于對生物信息學特別感興趣,于是想自學生物信息學(新手莫怪)。了解到生物信息學要有編程基礎,尤其是要會一門編程語言,例如: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的愛好者不要像我一樣眼高手低,學習編程就是要,思考,敲碼,思考,敲碼,敲碼,再敲碼!