• 沒有找到結果。

Server

在文檔中 危險都市 (頁 22-29)

第三章 研究流程

第三節 Server

一、介紹及用途

Server 的用途是將選取年份與選取變數設定為統計分析方法的運 算參數,並將計算結果以圖像化的方式展現。而圖像化還需透過Leaflet 套件,故將於下一節討論。

二、實際操作

如上節所述,建立起UI 後,接著將 Server 的架構分成兩部分(如下) 解釋,一為buttom,另一個為 myMap。

#Server 架構

Server <- function(input, output) {

buttom<-eventReactive(input$zoomButton,{↔}) output$myMap <- renderLeaflet({↔})

}

其中,內置函數「eventReactive」與「renderLeaflet」,分別對應(位 於UI 的)「actionButton」與「leafletOutput」。

「eventReactive」函數是通過操作按鈕 (即 actionButton)觸 發命令,該命令即為您所勾選的變數和選擇的年份。

「renderLeaflet」函數是將觸發命令所整理、計算後的資料傳至

「myMap」這個參數裡,並透過「leafletOutput」圖像化資訊。

下圖為Server 架構,資料處裡、Rarea2@data 格式、map 資料下都 還有小項目,但圖中不再細分,因依下圖區塊尋找已足夠方便,過細反 而難找。

6 Server 架構

(一)資料檢視

在初步整理資料,並分析時,其實不用使用到資料檢視這個環節,

但在後期要套用在Server 與 UI,或更進一步要串連 Server 與 UI 時常會 遇到資料屬 性 不合的問題 、 對照資 料 排序時的繁瑣 步驟還 有降低

「myMap」參數錯誤的可能性,以下提醒一些要注意的資料屬性,以及 使用「renderPrint」與「verbatim-TextOutput」來檢視資料的便利性,但 若不看不懂此段,亦可跳過此段,並使用固定年分及特定變數慢慢檢查。

其中「renderPrint」函數是將您所勾選的變數和選擇的年份,經過 整理或計算後以文字檔的方式回傳至「verbatimTextOutput」所在的 box 裡,故可以直接透過選擇年分及變數,改變如同下一頁的圖7 所呈現的 資料。

#傳資料的指令

renderPrint(list(class(as.vector(unlist(buttom()))),butto m()))

buttom()又等於

list(Ind.v,YY,Year.x,Y.sum.pca.point,rank(Y.sum.pca.point))

故,按順序來說,圖 7 的資料為 class、Ind.v、YY、Year.x、

Y.sum.pca.point、rank,分別代表 buttom()的資料屬性、選取的變數、選 取的年分、選取變數及年分後所對應的資料、PCA 分數得點、分數得點 的排序。

Sevrver架構

buttom

資料處理 流程控制

myMap

Rarea2@data

格式 map資料

7 檢視資料圖

提醒:

 myMap 所使用的參數屬性須為 numeric。

 變數選擇僅有一個時,PCA 分數得點無意義,故須有流程控制。

 PCA 分數得點有時會多一個負號,於事後 rank 及地圖顯色上 會與實際涵義相反,須多加注意。

 若要檢查「選取變數及年分後所對應的資料」是否正確,可拿 圖中的資料與原始資料對照。

 Ind.v(選取的變數)與 YY(選取的年分)的 input 皆為變數(指令 如下),以此方式檢視資料,較便利。

#選變數

df = data.frame(subject=c("故意殺人","擄人勒贖","強盜

",…),id=c(1:33))

Ind.v<-(df %>% filter(subject %in%

c(input$in1,input$in2,…)) %>% select(id))

#選年分

dff=data.frame(subjectt=c("Y7","Y8","Y9",…),idd=c(97:106)) YY<-(dff %>% filter(idd %in% (input$slider2[1]:

input$slider2[2])) %>% select(subjectt))

(二)buttom 裡的結構

Ind.v<-(df %>% filter(subject %in%

c(input$in1,input$in2,input$in3,…)) %>% select(id))

#選年分

dff =

data.frame(subjectt=c("Y7","Y8","Y9",…),idd=c(97:106)) YY<-(dff %>% filter(idd %in%

(input$slider2[1]:input$slider2[2])) %>% select(subjectt))

(2) 表格整理的部分,於讀檔後,為便於分析以陣列呈現,在此著重於 AA 即 function(L)的意思。函數裡 Year$Y6*L[10]+Year$Y5*L[9]+…,可 拆成變數 Year 及 L。Year 是以年分(97~106)劃分的資料,選取「$」的

#表格整理

data <- read.csv("d:/專題原始資料.csv", header=T, sep=",") year.array<-array(apply(as.matrix.noquote(data[5:26,2:331]),

2,as.numeric),dim=c(22,33,10))

colnames(year.array)<-c("故意殺人","擄人勒贖","強盜",…)

rownames(year.array)<-c("新北市","臺北市",…,"金門縣","連江縣") Year<-list(Y6=year.array[,,1],Y5=year.array[,,2],Y4 =

year.array[,,3],…)

L<-ifelse(list("Y7","Y8","Y9",…)%in%(YY$subjectt),T,F) AA <- function(L){

Year$Y6*L[10]+Year$Y5*L[9]+Year$Y4*L[8]+…

}

(3) 選擇年分及變數後的資料主要是透過前兩項所提到的選變數、選年 分及表格整理個別對應到的結果Ind.v、YY 、AA 所做的總整理並命名 為「Year.x」,且在下一節做的資料分析,皆是以這個整理完的資料做計 算。

#選擇年分及變數後的資料

Year.x<-AA(L)[,Ind.v$id]

2. 流程控制

在資料整理完後做流程控制的用意很簡單,因為下一節裡的資料分 析,我們是採用PCA 來縮減資料維度,以便在最後的地圖顯色時使用。

然而,重點在於 PCA 是用來縮減資料維度時所使用的,所以當我們選 取的變數僅有一個的時候,採用 PCA 並沒有意義,故以下面的方式控 制選取變數為1 個時,將不同年分的該變數總和即可。其中 Ind.v 是您 選取變數所對應的編碼,實屬向量,故可直接length( )函數檢視 Ind.v 長 度是否為1(即選取變數是否為 1),並藉此方式,控制流程。

#流程控制

if(length(Ind.v)<=1){做 A}else{做 B}

(三)myMap 裡的結構

myMap 可分為兩的部分,一是將 buttom 裡的資料整理成分割縣市 所需的資料格式Rarea2@data,另一則是將 Rarea2@data 套用在 leaflet( ) 函數裡。由於myMap 的結構大致上是固定的,所以本段將提醒一些需 要更改或需要注意之事項,其餘維持不變即可。

1. Rarea2@data 格式

Rarea2@data 格式裡需要更改的,只有標成粗黑體字的三個部分

city2、Rank、

Rank_YY

.csv。分三點如下。

#Rarea2@data 格式

city2=as.vector(unlist(buttom()))

COUNTYENG=c ("New Taipei City","Taipei City"…) Rank=floor(rank(city2))

TWN = readOGR ({↔}) %>% spTransform({↔}) list<-c ("New Taipei City","Taipei City",…) Rarea2<-subset(TWN, COUNTYENG %in% list) aa=as.data.frame(cbind(COUNTYENG,(P_N))) aa[,2]=as.numeric(as.character(aa[,2])) colnames(aa)=c("COUNTYENG","P_N")

bb <-as.data.frame(read.table("Rank_YY.csv",header = TRUE,sep

= ",")

cc <-as.data.frame(read.table(↔))

Rarea2@data<-left_join(Rarea2@data, aa,by=c("COUNTYENG")) Rarea2@data<-left_join(Rarea2@data, bb,by=c("P_N"))

Rarea2@data<-left_join(Rarea2@data, cc,by=c("COUNTYENG")) pal=colorFactor("Reds",levels = c("普通","不良","危險")) labels <- sprintf(↔)%>% lapply(htmltools::HTML)

(1)

city2 是要對應 buttom 裡的 PCA 分數得點,要特別注意的是資料屬性須為

提,

Rank_YY.csv 須與指令檔案放在同意件夾裡才能開啟。

2. map 資料

map 資料同樣是使用管線運算「%>%」將左側的運算結果傳遞至 右側的參數,過程依序為leaflet ( )、addTiles ( )、setView ( )、addLegend ( )、addProviderTiles ()、addPolygons ( ),但主要提到的只有 setView ( ),

而addLegend ( )、addProviderTiles ()、addPolygons ( ),且於下節才述明,

因為map 為 Leaflet 所使用之資料。

在文檔中 危險都市 (頁 22-29)

相關文件