Python入門:數(shù)值分析

教程來自扇貝編程

數(shù)值分析:
平均數(shù)献雅、中位數(shù)邪媳、分位數(shù)久又、眾數(shù)煞茫、極差、方差噩茄、標(biāo)準(zhǔn)差

?
?

均值

均值也稱為平均值或平均數(shù)下面。它等于數(shù)值之和除以數(shù)值個(gè)數(shù)。當(dāng)數(shù)值在列表中時(shí)绩聘,我們可以用Python內(nèi)置的sum() 來計(jì)算列表內(nèi)的數(shù)值之和沥割,用 len() 來計(jì)算列表內(nèi)的數(shù)值個(gè)數(shù)。

# score 內(nèi)是學(xué)生在某個(gè)Python項(xiàng)目上的得分
score = [96,80,85,79,92,42,84,72,93,77]

# ave_score 計(jì)算score的均值
sum_score = sum(score)
print(sum_score) # 輸出:800
num_score = len(score) 
print(num_score) # 輸出:10
ave_score = sum_score / num_score
print(ave_score) # 輸出: 80.0

上例中凿菩,學(xué)生的總分 sum_score 為 800机杜,分?jǐn)?shù) num_score 有10個(gè),均值 ave_score 為 80.0

中位數(shù)

中位數(shù)是指一組數(shù)值中間點(diǎn)的值衅谷,當(dāng)數(shù)值個(gè)數(shù)為奇數(shù)時(shí)椒拗,中位數(shù)就正好是中間點(diǎn)的值;如果數(shù)值個(gè)數(shù)為偶數(shù),中位數(shù)為中間兩個(gè)點(diǎn)的均值蚀苛。

我們來看如何用代碼計(jì)算一組數(shù)值的中位數(shù)在验,首先需要大家知道 Python 內(nèi)置的 sorted(),它可以將一組數(shù)值自小到大排序:

numbers = [2,3,4,2]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
# 輸出:[2, 2, 3, 4]

在此基礎(chǔ)上枉阵,我們寫個(gè)函數(shù)求中位數(shù):

def get_median(numbers):
    """
    找到numbers最中間的數(shù)
    """
    length = len(numbers) #數(shù)值個(gè)數(shù)
    sorted_numbers = sorted(numbers) #將數(shù)值排序
    mid_point = int(length/2) #中位數(shù)的位置译红,需要是int類型
    
    if length % 2 == 1: # 如果數(shù)值個(gè)數(shù)為奇數(shù)
        median = sorted_numbers[mid_point]
    else: # 如果數(shù)值個(gè)數(shù)為偶數(shù)
        # 中位數(shù)為中間兩個(gè)數(shù) mid_a 和 mid_b 的均值
        mid_a = sorted_numbers[mid_point-1]
        mid_b = sorted_numbers[mid_point]
        median = (mid_a + mid_b)/2
    # 函數(shù)返回 median
    return median

score = [96,80,85,79,92,42,84,72,93,77]
print(get_median(score))
# 輸出:82.0

分位數(shù)

分位數(shù):它是指一組數(shù)值中,大于或等于特定百分比的一個(gè)值兴溜。比如,75分位指一組數(shù)值中耻陕,大于或等于75%數(shù)值的值拙徽。

我們來寫一個(gè)函數(shù),計(jì)算一組數(shù)值中的 n分位數(shù)是多少:

def find_nperc(numbers,n):
    """
    返回numbers中诗宣,n分位對(duì)應(yīng)的數(shù)值是多少
    """
    # 先將數(shù)值排序 
    sorted_numbers = sorted(numbers)
    
    # 找到n分位對(duì)應(yīng)數(shù)值的索引位置
    n_index = int(n/100 * len(sorted_numbers))
    
    return sorted_numbers[n_index]

score = [96,80,85,79,92,42,84,72,93,77]
print("25分位數(shù)為{}".format(find_nperc(score,25)))
# 輸出:25分位數(shù)為77
print("75分位數(shù)為{}".format(find_nperc(score,75)))
# 輸出:75分位數(shù)為92

眾數(shù)

一組數(shù)值中膘怕,出現(xiàn)頻次最多的數(shù)值為眾數(shù),有時(shí)一組數(shù)值中會(huì)有多個(gè)眾數(shù)召庞。

借此機(jī)會(huì)岛心,我們學(xué)習(xí)Python中內(nèi)置的max(),它可以返回一組列表中數(shù)值最大的元素篮灼。

下方函數(shù)求得一個(gè)列表 numbers 中的眾數(shù)忘古,思路如下:

1)用 count() 計(jì)算列表 numbers 中每個(gè)元素出現(xiàn)的次數(shù);

2)將上述元素和對(duì)應(yīng)的出現(xiàn)次數(shù)存入字典 count_num 中诅诱;

3)用 max() 找到 count_num 中最大的值髓堪,并找到擁有該值的字典鍵添加到 max_count_num 中;

4)max_count_num 中的元素就是眾數(shù)娘荡,count_num 是眾數(shù)出現(xiàn)的次數(shù)干旁。

def get_mode(numbers):
    """
    返回 numbers中出現(xiàn)次數(shù)最多的數(shù)值(眾數(shù))及其出現(xiàn)次數(shù)
    """
    count_num = {}
    max_count_num = []
    # 循環(huán)numbers,建立字典 count_num:{數(shù)值:出現(xiàn)次數(shù)}
    for num in numbers:
        count_num[num] = numbers.count(num)
    # 循環(huán)count_num
    # 用max() 得到數(shù)值出現(xiàn)次數(shù)的最大值炮沐,賦值給 max_count
    # 將出現(xiàn)次數(shù)最大值的數(shù)值(眾數(shù))放入 max_count_num
    for num,count in count_num.items():
        if count == max(count_num.values()):
            max_count = count
            max_count_num.append(num)

    return "眾數(shù)為{}争群,出現(xiàn)次數(shù){}次".format(max_count_num,max_count)

score = [96,80,85,79,93,42,84,72,93,77]
print(get_mode(score))
# 眾數(shù)為[93],出現(xiàn)次數(shù)2次

極差

有些情況下大年,當(dāng)我們面對(duì)一組數(shù)據(jù)時(shí)换薄,我們會(huì)分析它的“分散”情況。

極差是指一組數(shù)據(jù)中最大值減去最小值的差鲜戒。

極差雖然簡單易得专控,但是有其局限性。它只受數(shù)據(jù)中的最大值和最小值影響遏餐。

我們可以用 max() 來獲得數(shù)據(jù)的最大值伦腐,用 min() 來獲得數(shù)據(jù)的最小值。

# score 是一群學(xué)生在某個(gè)Python項(xiàng)目上的得分
score = [96,80,85,79,92,42,84,72,93,77]
# score_range 為 score 的極差
score_range = max(score) - min(score)
print(score_range)
# 輸出:54

方差

方差:在一組數(shù)據(jù)集中失都,數(shù)值與均值之間的距離柏蘑。

在下方圖中幸冻,我們紅點(diǎn)與藍(lán)點(diǎn)所代表的數(shù)據(jù)集均值相同(黃線水平),但是用肉眼來看咳焚,我們發(fā)現(xiàn)紅點(diǎn)較集中在均值附近洽损,而藍(lán)點(diǎn)則較遠(yuǎn)「锇耄可以初步判斷碑定,紅點(diǎn)所代表數(shù)據(jù)集的方差要小于藍(lán)點(diǎn)。如果一組數(shù)據(jù)集的方差越大又官,那么數(shù)據(jù)集的“波動(dòng)性”也會(huì)越大延刘。

?
image

?

方差的計(jì)算方法為:

1)先求得一組數(shù)據(jù)集的均值 mean;

2)用數(shù)據(jù)集中的每一個(gè)數(shù)值減去均值六敬,其差為 de_mean碘赖;求每個(gè)差值 de_mean 的平方 sqr;

3)將所有 sqr 相加外构,得到和為 sum_sqr普泡;

4)如果數(shù)據(jù)集的數(shù)據(jù)個(gè)數(shù)為 n,則 sum_sqr / (n-1) 的結(jié)果审编,即是該數(shù)據(jù)集的方差 variance撼班。

# score 是一群學(xué)生在某個(gè)Python項(xiàng)目上的得分
score = [96,80,85,79,92,42,84,72,93,77]
# 1)先求得一組數(shù)據(jù)集的均值 mean;
mean = sum(score) / len(score)
# 2)用數(shù)據(jù)集中的每一個(gè)數(shù)值減去 mean割笙,并求得差值的平方 sqr权烧,
#    將所有 sqr 相加,求得 sum_sqr伤溉;
sum_sqr = 0
for num in score:
    sum_sqr += (num - mean) ** 2
# 3)求 sum_sqr / (n-1)般码,結(jié)果就是方差 variance。
variance = sum_sqr / (len(score)-1)
print(variance)
# 輸出:236.44444444444446

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

上一頁講到的方差是一系列平方的求和乱顾,比較難以理解和溝通板祝。因此人們?cè)诜讲畹幕A(chǔ)上創(chuàng)造了更便于交流、理解的概念——標(biāo)準(zhǔn)差走净。標(biāo)準(zhǔn)差為方差的平方根券时。

# variance 為剛才計(jì)算的方差:
variance = 236.44
# 標(biāo)準(zhǔn)差為 variance 的平方根
standard_deviation = variance ** 0.5
print(standard_deviation)
# 輸出:15.37660560722034

另外,我們之前學(xué)過 Python 中內(nèi)置的 Math 庫伏伯,其中有計(jì)算平方根的 .sqrt() 方法橘洞,我們也可以通過其來根據(jù)方差計(jì)算標(biāo)準(zhǔn)差:

import math
variance = 236.44
standard_deviation = math.sqrt(variance)
print(standard_deviation)
# 輸出:15.37660560722034
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市说搅,隨后出現(xiàn)的幾起案子炸枣,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件适肠,死亡現(xiàn)場(chǎng)離奇詭異霍衫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)侯养,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門敦跌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逛揩,你說我怎么就攤上這事柠傍。” “怎么了息尺?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵携兵,是天一觀的道長。 經(jīng)常有香客問我搂誉,道長,這世上最難降的妖魔是什么静檬? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任炭懊,我火速辦了婚禮,結(jié)果婚禮上拂檩,老公的妹妹穿的比我還像新娘侮腹。我一直安慰自己,他們只是感情好稻励,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布父阻。 她就那樣靜靜地躺著,像睡著了一般望抽。 火紅的嫁衣襯著肌膚如雪加矛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天煤篙,我揣著相機(jī)與錄音斟览,去河邊找鬼。 笑死辑奈,一個(gè)胖子當(dāng)著我的面吹牛苛茂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鸠窗,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼妓羊,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了稍计?” 一聲冷哼從身側(cè)響起躁绸,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后涨颜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體费韭,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年庭瑰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了星持。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弹灭,死狀恐怖督暂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情穷吮,我是刑警寧澤逻翁,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站捡鱼,受9級(jí)特大地震影響八回,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜驾诈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一缠诅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧乍迄,春花似錦管引、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至漾狼,卻和暖如春重慢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背邦投。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國打工伤锚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人志衣。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓屯援,卻偏偏與公主長得像,于是被迫代替她去往敵國和親念脯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子狞洋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容