python實例學習——基本統計值計算
1.1 問題背景
日常生活中,我們總要處理一些數據,比如說平均值,和,標準差等等,老式的筆算已經完全滿足不了大數據背景下的數據處理。相信用過excel的小夥伴們一定知道可以通過函數,進行對龐大數據的處理,那麼通過python呢?
1.2 問題前準備
根據IPO的思想方法,我們可以應當作出如下準備:
輸入:接受用戶輸入、文件、網絡的一組數據。
處理:適當的數據結構和算法。
輸出:想要統計的值。
因爲涉及到數值的計算,可以運用math庫,從而簡化代碼
1.3 函數準備
通過一個函數用來接受用戶數據,其他函數用來進行處理數據,最後進行輸出,整個程序完成。
1.4 編寫步驟
1.4.1 調用math庫中的平方根函數
from math import sqrt
1.4.2 接受用戶輸入數據
def getn():
nums = [] #建立一個空列表,用來接受數據
a = input("請輸入單個數據(數據錄入完成後,直接空格以退出):")
while a != '':
nums.append(eval(a)) #非空格則增加數據
a = input("請輸入單個數據(數據錄入完成後,直接空格以退出):")
1.4.3 計算平均值
def mean(numbers):
s = 0.0
for i in numbers:
s = s + num
return s/len(numbers)
1.4.4 計算標準差
標準差的計算公式:將一組數據s1,s2,···,sn,則他們的方差的數學表達式爲:
首先求出算術平均值
方差就是
標準差就是
def dev(numbers,mean):
sdev = 0.0
for num in numbers:
sdev = sdev + (num - mean)**2
return sqrt(sdev / (len(numbers)))
1.4.5 計算中位數
def medi(numbers):
s=sorted(numbers)
size = len(numbers)
if size % 2 == 0:
med = (s[size//2]+s[size//2+1])/2
else:
med = (s[size//2+1])
return med
1.4.6 整合求結果
n = getn()
m = mean(n)
print("平均值{},標準差{},中位數{}".format(m,dev(m,n),medi(n)))
1.5 整體代碼
from math import sqrt
def getn():
nums = []
a = input("請輸入單個數據(數據錄入完成後,直接空格以退出):")
while a != '':
nums.append(eval(a))
a = input("請輸入單個數據(數據錄入完成後,直接空格以退出):")
return(nums)
def mean(numbers):
s = 0.0
for num in numbers:
s = s + num
return s/len(numbers)
def dev(numbers,mean):
sdev = 0.0
for num in numbers:
sdev = sdev + (num - mean)**2
return sqrt(sdev / (len(numbers)))
def medi(numbers):
s=sorted(numbers)
size = len(numbers)
if size % 2 == 0:
med = (s[size//2-1]+s[size//2])/2
else:
med = (s[size//2])
return med
n = getn()
m = mean(n)
print("平均值{},標準差{},中位數{}".format(m,dev(n,m),medi(n)))
1.6 運算結果
================ RESTART: ================
請輸入單個數據(數據錄入完成後,直接空格以退出):1
請輸入單個數據(數據錄入完成後,直接空格以退出):3
請輸入單個數據(數據錄入完成後,直接空格以退出):2
請輸入單個數據(數據錄入完成後,直接空格以退出):4
請輸入單個數據(數據錄入完成後,直接空格以退出):5
請輸入單個數據(數據錄入完成後,直接空格以退出):
平均值3.0,標準差1.4142135623730951,中位數3
1.7 小結
列表在實現基本數據統計時發揮了很重要的作用,主要表現在以下3個方面。
(1)列表是一個動態長度的數據結構,可以根據需求增加或減少元素。
(2)列表的一系列方法或操作符爲計算提供了簡單的元素運算手段。
(3)列表提供了對每個元素的簡單訪問方式及所有元素的遍歷方式。