iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 20
0
AI & Data

python 入門到分析股市系列 第 20

[Day20]統計學基礎 - 平均數、中位數、眾數、平均絕對偏差

  • 分享至 

  • xImage
  •  

前言

今天是鐵人的第20天,在進入金融數據分析之前要先學習統計分析(Statistical Analysis),統計分析是以數據為基礎,對數據進行科學處理、分析。統計分析包括兩大部分

  1. 描述統計(Descriptive Statistics)
  2. 推論統計(Inferential Statistics)

數據類型

在學習描述統計之前,先進行數據分類。

  • 定性數據(Qualiative Data):對事物性質進行描述數據。ex 股票所屬行業數據即為定性數據。ex 國巨屬於半導體業。
  • 定量數據(Quantitative Data):事物數量特徵的數據,由數字所組成。ex 每個股票的開盤價。

圖表

當拿到數據後拿來分析,最常使用圖表的方式呈現數據。有以下圖表可以呈現數據。

  • 直方圖:二維統計圖表,橫軸是類別或是數值間的範圍,縱軸是事件發生的頻率。可以看day15有介紹直方圖。
  • 圓餅圖:圓形統計圖表,每個扇區的弧長表示的數量的比例。
  • 折線圖:折線圖是用直線段將各數據點連接起來而組成的圖形,以折線方式顯示數據的變化趨勢。
  • 散佈圖:兩個變數之間關係的圖,又稱相關圖
  • 頻率分布表:統計學中表示樣本數據頻率分布規律的表格。

數據的位置

分析數據時,想要了解數據分布的位置,在統計分析中有專門的指標用於描述數據的位置。常用的指標有以下四種方式:

  • 樣本平均數(Sample Mean)
  • 中位數(Median)
  • 眾數(Mode)
  • 百分位數(Percentile)

樣本平均數(Sample Mean)

假設現在有n個樣本觀測值(X1,X2,.....Xn),在統計學中樣本平均數有兩種計算方式:

  • 算術平均數(Arithmetic Mean) https://ithelp.ithome.com.tw/upload/images/20181023/201113904xHPsp4MaE.png
  • 幾何平均數(Geometric Mean)https://ithelp.ithome.com.tw/upload/images/20181023/20111390RLjxtMEPkO.png

示範建立一個陣列

import numpy as np
x = np.random.randint(0,100,size = 20)
print('x----------->',x)
print('np.sort(x)----------->',np.sort(x))
# 輸出結果
x-----------> [38 60 17 34 13  8 34 35 21 49 61 48 93 12 63 29 80 86 61 60]
x.sort()-----------> [ 8 12 13 17 21 29 34 34 35 38 48 49 60 60 61 61 63 80 86 93]

顯示x的平均值

print('x.mean()----->',x.mean())
# 輸出結果
x.mean()-----> 45.1

中位數(Median)

將樣本從小到大做排序,如果樣本是奇數個中位數即為最中間的值,如果是偶數個,中位數是中間兩個數值的平均。

print('np.median(x)----->',np.median(x))
# 輸出結果
np.median(x)-----> 43.0
# 可以看到x的中間兩個位數為38, 48 中位數為(38+48)/2 = 43

眾數(Mode)

樣本中出現次數最多的數值。

from scipy import stats
print('stats.mode(x)----->',stats.mode(x).mode[0])
# 輸出結果
stats.mode(x)-----> 34
# 可以看到x陣列中出現最多的數字為34

百分位數(Sample Mean)

假設現在有n個樣本觀測值(X1,X2,.....Xn),第α百分位數: n*α%
統計學中經常將25百分位數、中位數和75百分位數組成四分位數(Quartile)。25百分位數叫做第一四分位數(下四分位數)、中位數為第二四分位數、75百分位數為第三四分位數(上四分位數)。

print('np.percentile(x, 25)----->',np.percentile(x, 25))
print('np.percentile(x, 75)----->',np.percentile(x, 75))
# 輸出結果
np.percentile(x, 25)-----> 27.0
np.percentile(x, 75)-----> 61.0
# 0.25*21 + 0.75*29 = 27
# 0.25*61 + 0.75*61 = 61

數據的離散度

要分析數據除了需要數據的位置,還需要反應數據分佈的特徵也稱為數據的變異性,常用的離散度指標有

  • 全距(Range)
  • 平均絕對偏差(Mean Absolute Deviation)
  • 變異數(Variance)
  • 標準差(Standard Deviation)

全距(Range)

指的是數據中的最大值和最小值,公式為:
全距 = 最大值 - 最小值
示範建立一個陣列

import pandas as pd
ironman = pd.Series([60,70,80,80,90,100])
print('ironman.mean()----->',ironman.mean())
# 輸出結果
ironman.mean()-----> 80.0

ironman的全距就是 100 - 60 = 40

平均絕對偏差(Mean Absolute Deviation)

採用的方式是用樣本與平均值(Mean)的差值來計算,當差值越大則表示數據值偏離均值越遠。這邊需要注意到的是平均偏差(Mean Deviation)的相加為0,所以需要加上絕對值來運算。公式如下:
https://ithelp.ithome.com.tw/upload/images/20181023/20111390dWBpk1bEL3.png

ironman的平均絕對偏差

print('ironman.mad()----->',ironman.mad())
# 輸出結果
ironman.mad()-----> 10.0
# |(60-80)| + |(70-80)| + (80-80) + (80-80) + (70-80) + (100-80) = 60
# MAD = 60 / 6 = 10

變異數(Variance)和標準差(Standard Deviation)

變異數也是用來描述數據的離散程度,標準差就是變異數得平方根
變異數公式:https://ithelp.ithome.com.tw/upload/images/20181023/20111390Y9wgoyeFXf.png
ironman的變異數

print('ironman.var()----->',ironman.var())
# 輸出結果
ironman.var()-----> 200.0
# 20*20 + 10 * 10 + 0*0 + 0*0 + 10 * 10 + 20*20 = 1000
# Variance = 1000 / (6-1) = 200

標準差(σ)公式:https://ithelp.ithome.com.tw/upload/images/20181023/20111390bxyLWuQ2br.jpg

ironman的標準差

print('ironman.std()----->',ironman.std())
# 輸出結果
ironman.std()-----> 14.142135623730951
# 200的平方根

之前的章節

 * [安裝Anaconda](https://ithelp.ithome.com.tw/articles/10199666)
 * [安裝Jupyter notebook](https://ithelp.ithome.com.tw/articles/10200046)

上一篇
[Day19]seaborn - 樣式設定
下一篇
[Day21]統計學基礎 - 隨機變數(Random Variable)
系列文
python 入門到分析股市30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言