2017年10月17日 星期二

變異數、變異係數、相關係數



變異數Variance) : 用來衡量資料的分散程度, 可以用來比較兩個同單位DataSet的分散程度

  E(X)=μ

A.變異數=變方=Var(X)σ²
B.變異數Var(X)為對數據的變異程度的衡量,常用來量測資料分散程度之指標值,變異數其定義為:每一個觀測值和平均值之間的偏差值的平方值的平均。

變異係數 (Coefficient of Variation)
 可以用來比較兩個不同單位DataSet的分散程度

定義說明:
          一組資料的變異係數是指將此組資料的標準差除以平均數所的商化為百分比所得之值。
                   設此組資料的平均數為,標準差為 s,則其變異係數為                                                   

詳細說明:
          變異係數是一種相對差異量數,用以比較單位不同或單位相
          同但資料差異甚大的資料分散情形。
範例解說:
          1.調查五位學生之身高及體重如下,試比較其分散程度。
            身高:172、168、164、170、176(公分)
            體重:62、57、58、64、64(公斤)
            
          解答:
               因為身高與體重的單位不同,欲比較二者的分散程度,
               可利用變異係數來比較。
               先計算身高與體重各自的平均數與標準差,得平均身高
               為170公分、標準差為4.47公斤,平均體重為61公斤、
               標準差為3.31公斤。
               計算身高的變異係數為4.47/170*100% = 2.63%,而體重
               的變異係數為3.31/61*100% = 5.4%。比較二者,體重的
               變異係數較大,所以體重的分散程度較大。

不過變異數是絕對離差量數,變異係數則是相對的 
當多組資料要比較離散程度時,若是每組資料單位相同, 則可用變異數或標準差來比較,值愈大,愈離散。 
若單位不同,則要用變異係數來比較,  因為變異係數等於標準差除以平均數,是一個沒有單位的值 .這樣才能做比較 

例如, 不同公司比較員工身高的分散程度,則可以用變異數去比較因為比的都是同樣的單位。
 若是不同單位的比較,則要用變異係數,表示資料相對分散程度,而沒有單位值。








相關係數(Correlation coefficient): 用來衡量兩個變數之間的關係密切程度
 相關係數的值介於–1與+1之間,即–1≤r≤+1。其性質如下:
  • 當r>0時,表示兩變數正相關,r<0時,兩變數為負相關。
  • 當|r|=1時,表示兩變數為完全線性相關,即為函數關係。
  • 當r=0時,表示兩變數間無線性相關關係。
  • 當0<|r|<1時,表示兩變數存在一定程度的線性相關。且|r|越接近1,兩變數間線性關係越密切;|r|越接近於0,表示兩變數的線性相關越弱。
  • 一般可按三級劃分:|r|<0.4為低度線性相關;0.4≤|r|<0.7為顯著性相關;0.7≤|r|<1為高度線性相關。

 r=\frac{\sum(x-\overline{x})(y-\overline{y})}{\sqrt{\sum(x-\overline{x})^2\sum(y-\overline{y})^2}}  



表1  廣告費與月平均銷售額相關表  單位:萬元
年廣告費投入月均銷售額
12.5
15.3
23.2
26.4
33.5
34.4
39.4
45.2
55.4
60.9
21.2
23.9
32.9
34.1
42.5
43.2
49.0
52.8
59.4
63.5
  參照表1,可計算相關係數如表2:
序號廣告投入(萬元)
x
月均銷售額(萬元)
y
x^2y2xy
1
2
3
4
5
6
7
8
9
10
12.5
15.3
23.2
26.4
33.5
34.4
39.4
45.2
55.4
60.9
21.2
23.9
32.9
34.1
42.5
43.2
49.0
52.8
59.4
63.5
156.25
234.09
538.24
696.96
1122.25
1183.36
1552.36
2043.04
3069.16
3708.81
449.44
571.21
1082.41
1162.81
1806.25
1866.24
2401.00
2787.84
3528.36
4032.25
265.00
365.67
763.28
900.24
1423.75
1486.08
1930.60
2386.56
3290.76
3867.15
合計346.2422.514304.5219687.8116679.09
r=\frac{n\sum xy-\sum x\sum y}{\sqrt{n\sum x^2-(\sum x)^2}\sqrt{n\sum y^2-(\sum y)^2}}
=\frac{10\times 16679.09-346.2\times 422.5}{\sqrt{10\times 14304.52-346.2^2}\sqrt{10\times 19687.81-422.5^2}}
=0.9942
  相關係數為0.9942,說明廣告投入費與月平均銷售額之間有高度的線性正相關關係。

[相關文章]


[相關課程]

[1]TensorFlow Lite for MCU https://bit.ly/3j2fIIt 
[2]AI機器學習&深度學習 http://bit.ly/2KDZZz4 
[3] AIoT智能聯網運算實戰(使用OpenVINO) http://bit.ly/2IlIUK8 
[4]AI自然語言與推薦系統應用 https://bit.ly/3qnO2Tg 
[5]python程式設計 https://bit.ly/359cz4m








2017年10月3日 星期二

Python 處理Excel (.csv) 欄位計算使用Numpy




Python 處理Excel (.csv) 欄位計算使用Numpy



Numpy是Python用來科學計算的一個非常重要的函式庫,numpy主要用來處理一些矩陣對象,可以說numpy讓Python有了Matlab功能。

import numpy as np

p.s  使用numpy 要先安裝此module
   pip3 install numpy

產生5x7陣列
a = np.arange(35).reshape(5,7)
print(a)


[[ 0  1  2  3  4  5  6]
 [ 7  8  9 10 11 12 13]
 [14 15 16 17 18 19 20]
 [21 22 23 24 25 26 27]
 [28 29 30 31 32 33 34]]


取出特定cell的值
print(a[2,4])


18

取出特定列
print(a[0:3,:])  #取出某些列中的全部欄位 從第0列~第3列



[[ 0  1  2  3  4  5  6]
 [ 7  8  9 10 11 12 13]
 [14 15 16 17 18 19 20]]


取出特定列、欄
print(a[0:3,0:4]) 
# [start:end:step] 用來連續抓取一塊矩陣範圍, 可以使用step參數 (step=1,2,3...) , 預設step=1 (step=1可以不寫)


[[ 0  1  2  3]
 [ 7  8  9 10]
 [14 15 16 17]]

print(a[1:5:2,::3])   #row : 1,3 ; column: no start, so start(0):no end:step 3==> 0,3,6,....
[[ 7 10 13]
 [21 24 27]]


取出特定欄
print(a[:,1])     #start 不寫表示從0開始, end不寫表示算到最後  [ 1  8 15 22 29]



[ 1  8 15 22 29]

取出多個特定欄位
print(a[:,[1,3,4]])  #取出所有列中的某些特定欄, 第1欄, 第3欄,第4欄


[[ 1  3  4]
 [ 8 10 11]
 [15 17 18]
 [22 24 25]
 [29 31 32]]


欄位相乘
f1,f2=1,2
y1=a[:,f1]
y2=a[:,f2]
y=y1*y2
print(y)  


[  2  72 240 506 870]

找最大值 print(np.max(y))


870

找最小值

print(np.min(y))


2

陣列元素值加總
print(np.sum(y))


1690

陣列元素四捨五入
np.around([0.55, 0.65, 0.05], decimals=1)

array([0.6, 0.6, 0.0])


[python] numpy meshgrid



numpy


numpy
import numpy as np
import matplotlib.pyplot as plt

#plt.axis([0, 6, 0, 20])

xvalues = np.array([1,2,3,4]);
yvalues = np.array([5,6,7]);
xx, yy = np.meshgrid(xvalues, yvalues)
print(xx)
print(yy)
plt.plot(xx, yy, marker='.', color='k', linestyle='none')
plt.show()


[[1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]]
[[5 5 5 5]
 [6 6 6 6]
 [7 7 7 7]]










2017年10月2日 星期一

RDBMS-ACID



ACID,是指資料庫管理系統DBMS)在寫入或更新資料的過程中,為保證資料交易 transaction是正確可靠的,所必須具備的四個特性:原子性(atomicity,或稱不可分割性)、一致性(consistency)、隔離性(isolation,又稱獨立性)、持久性(durability)。
在資料庫系統中,一個資料交易是指:由一系列資料庫操作組成的一個完整的邏輯過程。例如銀行轉帳,從原帳戶扣除金額,以及向目標帳戶添加金額,這兩個資料庫操作的總和,構成一個完整的邏輯過程,不可拆分。這個過程被稱為一個事務,具有ACID特性。ACID的概念在ISO/IEC 10026-1:1992文件的第四段內有所說明。


  • 原子性:一個transaction中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
  • 一致性:在transaction開始之前和事務結束以後,資料庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及後續資料庫可以自發性地完成預定的工作。
  • 隔離性:資料庫允許多個transaction同時對其數據進行讀寫和修改的能力,隔離性可以防止多個transaction 同時執行時而導致數據的不一致。
  • 持久性:transaction處理結束後,對數據的修改就是永久的,即便系統故障也不會丟失。


RDBMS (Relational DBMS ) 的SQL


1.)資料定義語言(Data Definition Language,DDL)是SQL語言集中負責資料結構定義與資料庫物件定義的語言,由CREATE、ALTER與DROP組成

2.)資料查詢語言(Data Query Language, DQL)是SQL語言中,負責進行資料查詢而不會對資料本身進行修改的語句,這是最基本的SQL語句。

3.)資料操作語言(Data Manipulation Language, DML)是SQL語言中,負責對資料庫物件執行資料存取工作的指令集,以INSERT、UPDATE、DELETE三種指令為核心,分別代表插入、更新與刪除,是開發以資料為中心的應用程式必定會使用到的指令,因此有很多開發人員都把加上SQL的SELECT語句的四大指令以「CRUD」來稱呼。


4.) 資料控制語言 (Data Control Language,DCL) 在SQL語言中,是一種可對資料存取權進行控制的指令,它可以控制特定使用者帳戶對資料表、檢視表、預存程式、使用者自訂函式等資料庫物件的控制權。由 GRANT 和 REVOKE 兩個指令組成。




2017年9月26日 星期二

Python 函式使用 (四)


Pyton 函數呼叫

函數定義

def function_name (a,b):
...  
...  
...  return xxxxx


全域變數vs 區域變數


  1. 全域變數: 變數宣告在任何函數外,即為全域變數
  2. 區域變數: 定義在函數內部的變數, 非def 內無法存取此區域變數
  3. Python 函數可以直接存取(直接用或操作)全域變數 (不必傳參數)
  4. 小心: 若宣告區域變數與全域變數的名稱相同, 則以區域變數為主, 若函數內要使用外部的全域變數, 必須用global 關鍵字, 表示其參考外部的全域變數,而非重新定義的區域變數


# 全域變數vs 區域變數

x1=[2,4,6]
a=5

def func1():
    x1[1]=100   #存取會更改x1

def func2(): 
    x1=[1,2,3]    #初值設定,宣告變數x1 (和global x1相同, 故此為Local Variable )
    print(x1)    #[1, 2, 3]
    
def func3():
    a=10     #屬初值設定而非更改變數,因為是宣告, 則變數a為Local (雖然和global a相同
    print(a)

    
def func4():
    global a
    a=10      #初值設定為local, 但global明確定義a是global
    print(a)  #10

    
def func5():
    global x1
    x1=[1,2,3]    #初值設定:x1是local

 
func1()
print(x1)   #[2, 100, 6]
func2()
print(x1)  #[2, 100, 6]
func3()
print(a)   #5
func4()
print(a)  10
func5()
print(x1)  [1, 2, 3]


lambda Function
 
Python提供了一個簡易的function define:lambda,用完即丟,不著痕跡。讓你實作出很簡單的function (只處理一個運算式)


語法:
ambda argument_list: expression 

def func(x, y, z):
    return x + y + z

func2 = lambda x,y,z : x+y+z

print(func(1,2,3))       
print(func2(1,2,3))    


map 
Function

map() is a function which takes two arguments: 
r = map(func, seq)

The first argument func is the name of a function and the second a sequence (e.g. a list) seqmap() applies the function func to all the elements of the sequence seq. Before Python3, map() used to return a list, where each element of the result list was the result of the function func applied on the corresponding element of the list or tuple "seq". With Python 3, map() returns an iterator. 
my_list = [1, 2, 3]
ans=list(map( lambda i: i * i, my_list ))  
print(ans)  


[1, 4, 9]

不定個數參數函數用法


#不定個數參數 * (tuple)


def hello(*names):
    for n in names
        print("Hello, %s."%n)

names_tuple=("Tom","Peter","Bob","Rain")  
hello(*names_tuple)
hello("Tom","Peter","Bob","Rain")



#不定個數參數 ** (dict)

def hello(**names):
    for n in names:
        print("Hello %s, you're %d years old"%(n,names[n]))

names_dict={'John':25, 'Tom':20, 'Bob':33, 'Tony':18}
hello(**names_dict)
hello(John=25, Tom=20, Bob=33, Tony=18)



















2017年9月18日 星期一

SoC FPGA 嵌入式系統晶片?


Why SoC FPGA? 

目前嵌入式系統晶片開發人員必須面對激烈的市場挑戰,被要求更高的單位功耗性能/運算效能、更低的時延以及更短的開發週期來滿足各種的市場需求,因此基於FPGA的SoC已成為最流行且可行的解決方案。簡單來說,就是在FPGA可程式邏輯晶片嵌入了一個「硬核」處理器系統-- SoC (包含了ARM處理器、記憶體控制器、I/O週邊),在Intel (Altera)把這個SoC稱作是HPS (Hard Processor System) 。

在SoC FPGA 架構下可以彈性的設計,單純使用ARM SoC、僅單獨使用FPGA或兩者一起使用。當兩者一起用時, FPGA可以作為ARM週邊的角色,針對大量且須經複雜運算的資料,如數據資料、影像訊號、聲音訊號等,可利用FPGA 硬體並行運算能力設計演算法追求最佳效能。因此,利用SoC FPGA 架構所設計的嵌入式平台,不僅可以突顯了產品優勢,在價格和性能上都可以達到最優,更重要的是產品能夠及時上市。

HPS是屬於hard core 方式, 也可以選擇使用 soft core 的方式. 就是用Intel 自己的CPU--NiosII, 但用Soft core的方式, 就會消秏到原本FPGA的邏輯匣。


HPS 和 FPGA 有自己的Bus系統, HPS 的ARM 是 AXI Bus , FPGA 是 Avalon Bus, , 故需要設計一個Bridge 讓兩邊系統能夠溝通。 





Intel SoC FPGA 開發板 ( 內含Dual Core ARM Cortex-A9@800MHz)

DE10-Nano Kit





更多FPGA的應用領域: 

AI人工智慧的機器學習、5G傳輸速度提升到10Gbps、無人駕駛汽車網路延遲時間需要小於1ms, 這些都已無法再仰賴CPU計算來達成了為了獲得更高的運算效能與功耗、更低的延遲,以及用更短的開發週期, FPGA 將扮演著關鍵性的角色!



資料參考:

  1. https://www.ittraining.com.tw/ittraining/index.php/course/hardware/fpga
  2. https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=Taiwan&No=1047


http://www.ittraining.com.tw/ittraining/index.php/course/hardware/fpga

2017年9月6日 星期三

影像處理的核心技術





進行影像處理演算法的開發與實作驗證。

想影像處理的演算法於嵌入式系統之移植與效能調整。

深度學習在影像處理(如CNN)的研發。
FPGA 影位影像訊號的處理