Decision Tree & 隨機森林 & Neural Networks

 Github

 .

Kaggle:資料分析競賽

 

 

Decision Tree

決策樹只能使用目標是離散型的,不能試數字型態。

 

Entropy數值越高代表越純

範例 : https://zh.wikipedia.org/wiki/%E5%86%B3%E7%AD%96%E6%A0%91

 

 

x=wind

y=no wind

 

用熵去計算

.

Entropy = x * log(x,2)

Entropy = y * log(y,2)

 

選高的推斷哪種原因下去拆

 

 

篩選熵當作從哪層往下做

 

 

 

比較哪level與tweets哪種比較好?

 

以上結果得知用level去分第一層效果最好

.

 

建立決策樹

 

 

 

Random Forests隨機森林

可當作很多的決策樹去做

從一組資料中隨機抽取資料出來,缺點是可能會再次抽到上次抽的資料。

 

類神經網路

 

輸入層  隱藏層  輸出層

O             O          O

O

 

多個輸入透過一個以上的隱藏層,輸出一個以上的結果

EX: 輪胎不同的成分比例,透過類神經網路分析,要硬度多少、耐久多少、彈性等等屬性,進而去決定輸入原料的比例要調配多少。

 

Neural Networks

.

 

 

預測輸出結果

 

 

 .

備註:2017/05/25 計算方法分析與設計 課堂筆記

多元線性回歸&羅吉斯回歸&SVM&自定義SVM數字

 

Github

.

多元線性回歸

 

 

 

羅吉斯回歸

 

 

SVM支援向量機

 

 

 

SVM 以數字為例

 

 

SVM  用matplotlib畫圖

 

SVM 判斷數字

 

PS:紅色字為警告,不影響

 

SVM 自定義數字

.

用EXCEL自訂一個數字,並將該矩陣轉成array形式,就可以用內建的SVM跑辨識數字的功能

.

 用EXCEL自訂一個數字出來

.

EXCEL表格

 

將數字轉成矩陣

跑函式庫得知預測出來的數字是9

.

Numpy.array

 

Matplotlib

.

備註:2017/05/18 計算方法分析與設計 課堂筆記

機器學習&混淆矩陣&KNN&貝式分類法&簡單線性回歸

Github

機器學習分兩種

Supervised 監督式學習

有結果的,EX:iris資料集,有品項的

Unsupervised 非監督式學習

    不知道結果的

 

混淆矩陣範例

 .

假如最近一周的天氣是

下雨、沒下雨、下雨、下雨、下雨、沒下雨、沒下雨

而天氣預報則是

下雨、下雨、沒下雨、沒下雨、下雨、下雨、沒下雨

 .

會有以下幾種情況

預測下雨,實際上也真的下雨 → 準(TP)
預測不會下雨,實際上也真的沒下雨 → 準(TN)
預測會下雨,實際上卻沒下雨 → 不準(FP)
預測不會下雨,實際上卻下雨 → 不準 (FN)

  .

以上狀況的準確度有

TP:2 (28.5%)

FP:3 (42.8%)

FN:1 (14.2%)

TN:1 (14.2%)

 .

 

TP,TN,FP,FN 範例

 

 

 KNN (k-Nearest Neighbors) 最近鄰居法 範例

  優點:準確度高

  缺點:資料多時比較慢

 

 

 先下載這兩個檔案

states.txt

plot_state_borders.py

畫地圖
Import 至python裡

 

平均距離與最小距離

 

 

 

貝式分類法

.

比較信件差異,用不同的信件去斷字斷詞,並計算該封信是不是垃圾信,由該單字站整體信件的比例為何判斷該封是不是垃圾信

.

將這個範例下載起來,解壓縮至檔案底下

信件範例

 

 

簡單線性回歸範例,一個x搭配一個y

 

備註:2017/05/11 計算方法分析與設計 課堂筆記

維度視覺化、資料檢查、資料單位

Github

單一維度畫圖-長條圖

 

 

 

兩種不同的維度畫圖-散點圖

由兩種不同的維度畫出的ys1與ys2

 

兩種以上的維度畫圖

 兩種以上維度畫圖

 

資料檢查

 將不符合的資料印出來

 

資料量測單位統一,若資料不統一,可能發生以下幾種狀況

以下是ABC 3人的身高體重

.

      Height (inches)   Height (centimeters)        Weight
A       63 inches               160 cm                  150 pounds
B       67 inches               170.2 cm               160 pounds
C       70 inches               177.8 cm               171 pounds

.

若單位為英尺,B會丟至distance方法會較靠近於A

a_to_b = distance([63, 150], [67, 160]) # A與B的距離 10.77
a_to_c = distance([63, 150], [70, 171]) # A與C的距離 22.14
b_to_c = distance([67, 160], [70, 171]) # B與C的距離 11.40

 .

若單位為英尺,B會丟至distance方法會較靠近於C

a_to_b = distance([160, 150], [170.2, 160]) # A與B的距離 14.28
a_to_c = distance([160, 150], [177.8, 171]) # A與C的距離 27.53
b_to_c = distance([170.2, 160], [177.8, 171]) # B與C的距離 13.37

.

 

 

備註:2017/05/04 計算方法分析與設計 課堂筆記

角色扮演維度

  • 建立資料來源─檢視表

─SQL Server─

  • vDimProduct
  1. AdventureWorks2012資料庫下,新增檢視,選取資料表,勾選欄位:
  • Product:ProductID、Name、Color、StandardCost、ListPrice
  • ProductCategory:ProductCategoryID、Name
  • ProductSubCategory:ProductSubCategoryID、Name
  1. 勾選完欄位後,發現總共有三個Name欄位,會有Expr1、Expr2,所以將這三個Name欄位的別名分別依所屬資料表改成:ProductName、CatName、SubCatName。
  2. 執行後儲存成「vDimProduct」。
  • vDimDate_1
  1. AdventureWorks2012資料庫下,新增檢視,選取資料表,勾選欄位:
  • SalesOrderHeader:OrderDate(別名:PDate)
  1. 把語法全選,複製兩次,將複製後的其他兩個OrderDate改成:DueDate、ShipDate,如下面紅字,然後做union。
SELECT          OrderDate AS PDate

FROM              Sales.SalesOrderHeader

union

SELECT          DueDate AS PDate

FROM              Sales.SalesOrderHeader

union

SELECT          ShipDate AS PDate

FROM              Sales.SalesOrderHeader

  1. 將上面的語法全選,做整個資料的DISTINCT

(輸入紅字語法,_1、_2執行後會自動帶入)

SELECT DISTINCT TOP (100) PERCENT PDate

FROM              (SELECT          OrderDate AS PDate

FROM               Sales.SalesOrderHeader

UNION

SELECT          DueDate AS PDate

FROM              Sales.SalesOrderHeader AS SalesOrderHeader_2

UNION

SELECT          ShipDate AS PDate

FROM              Sales.SalesOrderHeader AS SalesOrderHeader_1) AS a

ORDER BY   PDate

  1. 儲存成「vDimDate_1」,_1是暫~時~的表,後面還會繼續做。
  • vDimDate_2
  1. AdventureWorks2012資料庫下,新增檢視,選取資料表,勾選欄位:
  • vDimDate_1:PDate
  1. 用DATEPART取出年、季、月、週,語法如下:
SELECT          PDate, DATEPART(year, PDate) AS Year, DATEPART(Q, PDate) AS Q, DATEPART(month, PDate) AS Month, DATEPART(week, PDate) AS Week, DATEPART(weekday, PDate) AS WeekDay,  DATEPART(dayofyear, PDate) AS DY

FROM              dbo.vDimDate_1

執行後,儲存成「vDimDate_2」,這還是暫~時~的,等等還會有一個修正的。

  • vDimDate
  1. AdventureWorks2012資料庫下,新增檢視,選取資料表,勾選欄位:
  • vDimDate_2:Year, Q, Month, Week, WeekDay, PDate
  1. 執行後,儲存為「vDimDate」。
  • vFactOrder
  1. AdventureWorks2012資料庫下,新增檢視,選取資料表,勾選欄位:
  • SalesOrderHeader:SalesOrderID、OrderDate、DueDate、ShipDate、TerritoryID
  • SalesOrderDetail:SalesOrderDetailID、OrderQty、ProductID、UnitPrice、LineTotal
  1. 執行後儲存成「vFactOrder」。
  • vDimTerritory
  1. AdventureWorks2012資料庫下,新增檢視,選取資料表,勾選欄位:
  • SalesTerritory:TerritoryID、Name、CountryRegionCode、Group
  1. 執行後儲存成「vDimTerritory」。
  • 建立專案、Cube

─SQL Server Data Tools For Visual Studio─

  • 建立Analysis Services專案、維度
  1. 左上點選新增→專案→Analysis Services多維度和資料採礦專案
  2. 新增資料來源:

右邊「方案總管」→資料來源→右鍵新增資料來源→下一步→New…→伺服器名稱:.、資料庫名稱:AdventureWorks2012→OK→下一步→勾「繼承」→下一步→完成

  1. 新增資料來源檢視:

右邊「方案總管」→資料來源檢視→右鍵新增資料來源檢視→下一步→選剛剛建立的資料來源(AdventureWorks2012)→下一步→下一步→選取「vDimProduct、vDimDate、vDimTerritory、vFactOrder」資料表移到右邊「包含的物件」→下一步→完成

  1. 設定邏輯主索引鍵

針對[vDimDate.PDate],右鍵→設定邏輯主索引鍵,並建立資料表關聯:

  • OrderDate→vDimDate.PDate
  • DueDate→vDimDate.PDate
  • ShipDate→vDimDate.PDate
  • ProductID→vDimProduct.ProductID
  • TerritoryID→vDimTerritory.TerritoryID
  • 角色扮演維度

當一個事實資料表多次引用一個維度資料表時,稱為角色扮演維度。

更多:文章1文章2

  1. 新增維度:

右邊「方案總管」→維度→右鍵新增維度→下一步→勾「使用現有資料表」→下一步→

主資料表 索引建資料行 名稱資料行 命名為
vDimDate PDate PDate DimDate
vDimProduct ProductID ProductID DimProduct
vDimTerritory TerritoryID TerritoryID DimTerritory

→下一步→可用的屬性:全勾→下一步→完成。

  1. 建立階層:
  • DimDate
  • 「YQMD」:Year>Q>Month>PDate
  • 「YWD」:Year>Week>PDate
  • 「YMD」:Year>Month>PDate
  • DimProduct
  • 「Product階層」:CatName>SubCatName>ProductName
  • DimTerritory

先把維度的欄位改名

  • Country Region Code→Country
  • Name→Territory

再建立階層

  • 「Territory階層」:Group>Country>Territory
  • 新增Cube
  1. 右邊「方案總管」→CUBE→右鍵CUBE→下一步→勾”使用現有資料表”→下一步→量值群組資料表:勾選「成績單」→下一步→下一步→下一步→下一步→完成。

左上「處理」。

  1. 處理完成後,切換到「瀏覽器」頁籤,輸出到EXCEL建立樞紐分析表

─EXCEL─

  • 欄:Territory階層
  • 列:Order Date > Order Date.YMD
  • 值:v Fact Order > Order Qty
  • 年月資料要顯示成某”年”、某”月”

─SQL Server Data Tools For Visual Studio─

  1. 到資料來源檢視,vDimDate資料表標題處按右鍵「新增具名計算」
  • Year1
  • 資料行名稱:Year1
  • 運算式:convert(nvarchar, Year) + N’年’
  • Month1
  • 資料行名稱:Month1
  • 運算式:convert(nvarchar, Month) + N’月’
  • DD
  • 資料行名稱:DD
  • 運算式:convert(varchar, PDate, 111)
  1. 到DimDate維度再建立一個階層
  • YMD1:Year1>Month1>PDate
  1. 年月的排序依然撿角,所以必須修改維度的屬性,點選左邊Month1,修改右下屬性:
  • OrderBy:Name→Key
  • KeyColumn:Month1→Month
  1. 重新將Cube處理一次。
  2. 處理完成後,切換到「瀏覽器」頁籤,輸出到EXCEL建立樞紐分析表

─EXCEL─

  • 欄:Product階層
  • 列:Order Date > Order Date.YMD1
  • 值:v Fact Order > Order Qty

緩時變維度

  • 緩時變維度

維度是經由時間緩慢的變化。

Type0:Retain Original 假設學生資料表,有兩位在98學年度轉學。

  • 建立Analysis Services專案、維度、Cube

─SQL Server Data Tools For Visual Studio─

  1. 左上點選新增→專案→Analysis Services多維度和資料採礦專案
  2. 新增資料來源:

右邊「方案總管」→資料來源→右鍵新增資料來源→下一步→New…→伺服器名稱:.、資料庫名稱:A123456→OK→下一步→勾「繼承」→下一步→完成

  1. 新增資料來源檢視:

右邊「方案總管」→資料來源檢視→右鍵新增資料來源檢視→下一步→選剛剛建立的資料來源(A123456)→下一步→下一步→選取全部資料表移到右邊「包含的物件」→下一步→完成

  1. 設定邏輯主索引鍵、建立關聯

針對[科目表.科目編號]、[學生表.座號]、[年度段考表.段考代號],右鍵→設定邏輯主索引鍵,並建立資料表關聯(如圖)。

  1. 新增維度:

右邊「方案總管」→維度→右鍵新增維度→下一步→勾「使用現有資料表」→下一步→

主資料表 索引建資料行 名稱資料行 命名為
年度段考表 段考代號 段考代號 段考維度
科目表 科目編號 科目編號 科目維度
學生表 座號 座號 學生維度

→下一步→可用的屬性:全勾→下一步→完成。

  1. 建立階層:

建立「段考階層」:年度>段考。

  1. 新增Cube

右邊「方案總管」→CUBE→右鍵CUBE→下一步→勾”使用現有資料表”→下一步→量值群組資料表:勾選「成績單」→下一步→下一步→下一步→下一步→完成。

左上「處理」。

  • 如果執行撿角,請回去SQL Server授予目前使用者(as)讀取A123456資料庫的權限(db_owner或db_datareader)。

(安全性→登入→選取目前使用者(as)→右鍵”屬性”→左邊”使用者對應”→右邊勾選資料庫和權限)

  • 變更「學生表」資料,新增「學年」欄位與資料

─SQL Server─

  1. 開啟SQL Server 2014 → 伺服器名稱:.、驗證:Windows驗證
  2. 在[A123456].[學生表.dbo]右鍵設計,新增一個欄位:
  • 資料行名稱:學年
  • 資料類型:nvarchar(50)

(必須要跟年度段考表的年度串起來,所以資料類型要相同。)

,左上儲存。

  1. 在[A123456].[學生表.dbo]右鍵編輯前200個資料列,點選左上角空白,全選資料表,複製到EXCEL貼上

─Excel─

  1. 將剛剛複製的「學生表」內容貼上,再到底下貼上一次(共兩次)。
  2. 輸入「年度」欄位的資料:
  • 第一次貼上的部分:97
  • 第二次貼上的部分:98
  1. 把98年最後兩個同學刪除後,整個資料複製回去SQL Server覆蓋。

─SQL Server─

  1. 在[A123456].[學生表.dbo]右鍵編輯前200個資料列,點選左上角空白,全選資料表,右鍵>刪除,右鍵>貼上。
  • 重新處理Cube(解決學生表主索引鍵重複的錯誤)
  • 如果直接去重新整理,把學生維度的年度拉進來後,處理Cube時會發生錯誤。因為座號是主索引鍵,而剛剛複製兩份學生表資料,造成主索引鍵重複。)

─SQL Server Data Tools For Visual Studio─

  1. 到資料來源檢視,學生表最上面按右鍵>新增具名計算
  • 資料行名稱:Key
  • 運算式:年度+cast(座號 AS varchar(10))

把「Key」設定成邏輯主索引鍵,學生表最上面按右鍵>瀏覽資料,確認資料有沒有串起來。

  1. 到「Dim_學生」,把剛剛新增的「Key」加進來,左邊屬性點選「Key」,右下角屬性把「Usage設定成Key」。(可是這樣處理Cube會出錯,所以重新建立學生表的維度。)
  2. 重新建立「Dim_學生」,並新增兩個階層:
  • 年度座號階層:年度>座號
  • 年度姓名階層:年度>姓名

,左上角「處理」。

  • 非對稱性維度
  • 建立Analysis Services專案、維度

─SQL Server Data Tools For Visual Studio─

  1. 左上點選新增→專案→Analysis Services多維度和資料採礦專案
  2. 新增資料來源:

右邊「方案總管」→資料來源→右鍵新增資料來源→下一步→New…→伺服器名稱:.、資料庫名稱:SSAS2008OLAP_Sample→OK→下一步→勾「繼承」→下一步→完成

  1. 新增資料來源檢視:

右邊「方案總管」→資料來源檢視→右鍵新增資料來源檢視→下一步→選剛剛建立的資料來源(SSAS2008OLAP_Sample)→下一步→下一步→選取「Dim_Region」資料表移到右邊「包含的物件」→下一步→完成

  1. 設定邏輯主索引鍵

針對[Dim_Region.REGION_KEY],右鍵→設定邏輯主索引鍵,並建立資料表關聯。

  1. 新增維度:

右邊「方案總管」→維度→右鍵新增維度→下一步→勾「使用現有資料表」→下一步→

主資料表 索引建資料行 名稱資料行 命名為
DIM REGION REGION_KEY REGION_KEY Dim_REGION

→下一步→可用的屬性:全勾→下一步→完成。

  1. 建立階層:

建立「REGION階層」:GROUP NAME>COUNTRY NAME>REGION NAME。

  1. 左上「處理」維度,到「瀏覽器」頁籤檢視資料,會發現:

各地區都有一層一層向下的階層資料,例如:大中華區>台灣>台北,但是有一筆資料是:大中華區>香港>香港,就很奇怪。

  1. 回到dim,到「維度結構」頁籤,點選階層裡面的「REGION NAME」,到右下角屬性設定
  • HideMemberIf:ParentName

(如果下面這層跟上一層的資料一樣,該層不顯示)(ex:香港)

  • 循環對應維度的處理
  • 加入資料表、建立維度
  1. 在資料來源檢視中,對空白處按右鍵加入/移除資料表:DIM_ EMPLOYEE。
  2. 將「EMPLOYEE _KEY」設定成邏輯主索引鍵。
  3. 將「MANAGER_KEY」拖曳對應到「EMPLOYEE _KEY」,成為循環對應
  4. 新增維度:

右邊「方案總管」→維度→右鍵新增維度→下一步→勾「使用現有資料表」→下一步→

主資料表 索引建資料行 名稱資料行 命名為
DIM EMPLOYEE EMPLOYEE_KEY MANAGER_KEY Dim_REGION

→下一步→可用的屬性:全勾→下一步→完成。

  1. 回到Dim EMPLOYEE.dim切換到「維度結構」頁籤
  • 點擊左上角屬性:EMPLOYEE KEY,到右下角屬性去設定:找Keycolumn>Namecolumn下拉式清單選EMPLOYEE NAME
  • 點擊左上角屬性:MANAGER KEY,到右下角屬性去設定:找Keycolumn>NamingTemplate下拉式清單定義:總經理、副總、協理
  • 點擊左上角屬性:MANAGER KEY,到右下角屬性去設定:找MembersWithData:NonLeafDataHidden。

SSDT新增量值

由於資料庫備份檔的「科目表」沒有「類別」欄位,但是SSDT的專案有,而此次不須用到「類別」欄位,故直接在SSDT更新資料庫資料即可。

  • SQL Server
  1. 還原bak資料庫。
  • SQL Server Data Tools
  1. 開啟MultidimensionalProject2專案
  2. 切換到「學生維度.dim」視窗,左側的屬性視窗,把「類別」刪除。
  3. 切換到「dsv」視窗→上面工具列「資料來源檢視」→重新整理。
  4. 切換到「cube」視窗,左上「處理」CUBE,「瀏覽器」頁籤,用EXCEL的樞紐分析表檢視此資料。
  • 上禮拜課堂做的「前次分數」會撿角是因為樞紐分析表沒有拉正確。
  • 篩選:科目階層 (4)
  • 欄:段考代號 (2)
  • 列:姓名 (1)
  • 值:分數(3)>前次分數(5)

–SQL Server Data Tools

  • 編輯趨勢KPI:「成績KPI」
  1. 複製下列內容:
CASE

WHEN [Measures].[分數]-[Measures].[前次分數]>5 THEN 1

WHEN [Measures].[分數]-[Measures].[前次分數]<-5 THEN -1

ELSE 0

END

  1. 切換到cube視窗(A12345.cube)的「KPI」頁籤,選取「成績KPI」,將剛剛複製的內容貼到「趨勢KPI」欄位。
  2. 重新處理CUBE,到EXCEL→「資料」頁籤→全部重新整理。
  3. 拉一張新的樞紐分析表,「資料」頁籤→外部資料→現有連線→選擇剛剛的連線。樞紐分析表:
  • 篩選:段考代號>科目階層
  • 欄:(空)
  • 列:姓名
  • 值:成績KPI(內容(分數))>成績KPI(目標)>成績KPI(狀態)>成績KPI(預測趨勢)
  • 胡曰:

用SSDT>EXCEL>樞紐分析表,SQL資料庫只要新增資料,我只要從EXCEL選取段考代號即可檢視新資料。雖然一開始建置的時候比較辛苦,但是之後比較容易檢視及維護。

而如果這個表示用SQL語法硬拉出來,資料庫有新增資料的話,就必須每次更改語法,造成實作及維護不易。

  • 新增量值:科目目標

訂定每個科目的目標。

  1. 在SQL Server,A12345資料庫「科目表」資料表新增一個欄位:
資料行名稱 資料類型
科目目標 int
  1. 編輯「科目表」資料表,自行亂數輸入「科目目標」
  2. 回到SQL Server Data Tools,資料來源檢視視窗(A12345.dsv),上面工具列資料來源檢視→重新整理。
  3. Cube視窗(A12345.cube),「Cube結構」頁籤,左邊「量值」欄按右鍵「新增量值」::
  • 使用方式:總和
  • 來源資料表:科目表
  • 來源資料行:科目目標
  • 「顯示所有資料行」不打勾
  1. 將量值:成績單→成績單 計數,改為「考試人數」
  2. 重新處理CUBE,到EXCEL「資料」頁籤→連線→全部重新整理,即可看到剛剛建立的「科目目標」,放到樞紐分析表「值」欄位。
  • 篩選:段考代號>科目階層
  • 欄:(空)
  • 列:姓名
  • 值:成績KPI(內容(分數))>成績KPI(目標)>成績KPI(狀態)>成績KPI(預測趨勢)>科目目標
  • 新增量值:科目目標

訂定每一次不同考試,各科目的目標。

  1. 在SQL Server,在A12345資料庫新增資料表,,儲存為:段考科目,
資料行名稱 資料類型
段考代號 nvarchar(50)
科目編號 float
段考科目目標 int

並且設定「段考代號」及「科目編號」為主索引鍵。

  1. 編輯「段考科目」資料表,自行亂數輸入「段考科目目標」
  2. 回到SQL Server Data Tools,資料來源檢視視窗(A12345.dsv),左下「資料表」欄位右鍵「加入/移除資料表」→把「段考科目」資料表加到右邊欄位→確定,上面工具列資料來源檢視→重新整理。
  3. 建立資料表關聯:
  • [段考科目.dbo].[段考代號]→[年度段考表.dbo].[段考代號]
  • [段考科目.dbo].[科目編號]→[科目表.dbo].[科目編號]
  1. 新增維度:「段考科目」

勾選「使用現有的資料表」,下一步→主資料表:段考科目,索引鍵資料行:段考代號、科目編號,名稱資料行:段考代號,下一步→相關資料表:年度段考表、科目表,下一步→可用的屬性:段考代號、段考科目目標、科目編號,下一步→命名為:段考科目,完成。

  1. Cube視窗(A12345.cube),「Cube結構」頁籤,左邊「維度」欄按右鍵「加入Cube維度」:把「段考科目」維度加進來。
  2. Cube視窗(A12345.cube),「Cube結構」頁籤,左邊「量值」欄按右鍵「新增量值」:
  • 使用方式:總和
  • 來源資料表:段考科目
  • 來源資料行:段考科目目標
  • 「顯示所有資料行」不打勾
  1. 重新處理CUBE,到EXCEL「資料」頁籤→連線→全部重新整理,即可看到剛剛建立的「段考科目目標」,放到樞紐分析表「值」欄位。
  • 篩選:科目階層
  • 欄:年度段考階層
  • 列:姓名
  • 值:分數>段考科目目標
  • 新增量值:年度目標

訂定每一次不同考試,各科目的目標。

  1. 在SQL Server,在A12345資料庫新增資料表,,儲存為:年度目標,
資料行名稱 資料類型
年度 nvarchar(50)
目標 int

並且設定「年度」為主索引鍵。

  1. 編輯「年度目標」資料表,自行亂數輸入「目標」
  2. 回到SQL Server Data Tools,資料來源檢視視窗(A12345.dsv),左下「資料表」欄位右鍵「加入/移除資料表」→把「段考科目」資料表加到右邊欄位→確定,上面工具列資料來源檢視→重新整理。
  3. 新增維度:「年度目標」

勾選「使用現有的資料表」,下一步→主資料表:年度目標,索引鍵資料行:年度,名稱資料行:年度,下一步→可用的屬性:年度、目標,下一步→命名為:年度目標,完成。

  1. Cube視窗(A12345.cube),「Cube結構」頁籤,左邊「維度」欄按右鍵「加入Cube維度」:把「年度目標」維度加進來。
  2. Cube視窗(A12345.cube),「Cube結構」頁籤,左邊「量值」欄按右鍵「新增量值」:
  • 使用方式:總和
  • 來源資料表:年度目標
  • 來源資料行:目標
  • 「顯示所有資料行」不打勾
  1. 定義關聯性:(此步驟沒做的話,目標會自動加總,資料錯誤)

Cube視窗(A12345.cube),「維度使用方式」頁籤,定義關聯性,

  • 選取關聯性類型:一般
  • 資料粒度屬性:年度
  • 維度資料表:年度段考表
  • 量值群組資料表:年度目標
  • 關聯性:
  • 維度資料行:年度
  • 量值群組資料行:年度
  1. 重新處理CUBE,到EXCEL「資料」頁籤→連線→全部重新整理,即可看到剛剛建立的「段考科目目標」,放到樞紐分析表「值」欄位。
  • 篩選:年度段考階層>科目階層
  • 欄:年度段考階層
  • 列:姓名
  • 值:分數>年度目標.目標
  • 更換「成績KPI」條件
  1. 切換到Cube視窗(A12345.cube),「KPI」頁籤,左上工具列按「重新連接」,這樣左下量值群組欄位才不會錯誤,並顯示最新的資料表。
  2. 把目標運算式:改成「[年度目標].[目標]」
  3. 把狀態運算式:把「分數>=80」的80換成「[年度目標].[目標]」,下面亦同。
CASE

WHEN [Measures].[分數]>=[Measures].[目標] THEN 1

WHEN [Measures].[分數]<[Measures].[目標] THEN -1

ELSE 0

END

  1. 重新處理CUBE,到EXCEL「資料」頁籤→連線→全部重新整理。
  • 篩選:科目階層
  • 欄:年度段考階層
  • 列:姓名
  • 值:成績KPI>成績KPI目標>成績KPI狀態

 資料分割與網頁爬蟲(requests, BeautifulSoup,re正規表達式)

Github

  • 資料分割

建立 emil.txt

aa@gmail.com

bb@yahoo.com

cc@gm.nfu.edu.tw

a1@gmail.com

a2@gmail.com

a3@gmail.com

a4@gmail.com

用來分段@以後的網域

先建立輸出 function

# 寫檔用,隔開,也可用tab \t

寫檔結果

  • 網頁爬蟲 requests, BeautifulSoup,re

# 讀取網址

 

# 抓取tag標籤與用正規表達式

PS:要先裝html5lib

到pycharm裡面的Terminal中打 conda install html5lib安裝

 

裝好後就執行

總共有732本書

# 解析 json

# 透過 github API撈取,並抓repository

我的repository

備註:2017/04/27 計算方法分析與設計 課堂筆記