安裝/載入必要套件
# 請先安裝套件
install.packages("reshape2") # 安裝 `reshape2` 套件
install.packages("vegan")
install.packages("ggplot2")
install.packages("ggdendro")
# 載入套件
library(reshape2)
library(dplyr)
library(vegan)
library(ggplot2)
library(ggdendro)
103年台電得到發標案最高的前一百間公司決標公告
Taipower <- read.csv(("https://johnsonhsieh.github.io/DSC2016-R/data/Taipower_top100.csv"),
fileEncoding = "big5")
str(Taipower)
'data.frame': 798 obs. of 12 variables:
$ job_number : Factor w/ 725 levels "008-0000017-4",..: 557 1 222 262 535 444 689 689 689 325 ...
$ subject_of_procurement : Factor w/ 650 levels "(新)谷關~天輪161kV線#1A鐵塔用防墜裝置",..: 48 86 618 2 363 122 398 398 398 116 ...
$ procuring_entity : Factor w/ 52 levels "台灣電力股份有限公司",..: 1 1 7 52 14 1 1 1 1 1 ...
$ entity_code : Factor w/ 46 levels "3.13.31","3.13.31.1",..: 1 1 35 37 46 1 1 1 1 1 ...
$ attr_of_procurement : Factor w/ 53 levels "<財物類>12石油及天然氣",..: 45 17 18 20 52 16 33 33 33 16 ...
$ procurement_type : Factor w/ 5 levels "公開取得報價單或企劃書",..: 4 4 3 2 2 5 5 5 5 5 ...
$ tender_awarding_type : Factor w/ 4 levels "參考最有利標精神",..: 3 3 3 3 3 3 3 3 3 3 ...
$ tenderer_name : Factor w/ 100 levels "安倉營造股份有限公司",..: 67 20 29 11 36 53 91 93 94 53 ...
$ total_tender_awarding_value: int 970000 13839638 1308000 182000000 7847400 381981 89367696 89367696 89367696 2890000 ...
$ amount_range : Factor w/ 4 levels "查核金額以上未達巨額",..: 4 2 2 3 2 4 3 3 3 2 ...
$ tender_awarding_date : Factor w/ 247 levels "1/10/2014 0:00:00",..: 8 97 15 1 3 14 101 101 101 82 ...
$ start_end_date : Factor w/ 712 levels "098/03/16-105/12/31",..: 91 138 59 72 75 52 146 147 145 42 ...
篩選出總決標金額最高的10間公司, 指向 TP10 物件
# 103年得到台電標案金額最高的10間公司
top10 <- group_by(Taipower, tenderer_name) %>%
summarise(value=sum(as.numeric(total_tender_awarding_value), na.rm = TRUE),
count=n()) %>%
arrange(-value) %>% slice(1:10)
setNames(top10, c("企業","總金額","得標數")) # show the output
Source: local data frame [10 x 3]
企業 總金額 得標數
(fctr) (dbl) (int)
1 華榮電線電纜股份有限公司 3115245425 9
2 合機電線電纜股份有限公司 3060890653 6
3 Mitsubishi Corporation 2943266566 10
4 大同股份有限公司 2587134910 23
5 台灣艾斯敦股份有限公司 2437618930 9
6 中興電工機械股份有限公司 2153352721 50
7 BIT MARITIME LIMITED ( 海瀧 ) 2103372941 35
8 大東電業廠股份有限公司 1462570000 2
9 TRANSBEST LIMITED(黃海) 1447958282 18
10 KAWASAKI KISEN KAISHA, LTD.(台灣川崎) 1439129452 13
# 從百大企業篩選出前十大
TP10 <- filter(Taipower, tenderer_name%in%top10$tenderer_name)
# 建構這10間公司與標案類別的 incidence matrix
is.present <- function(x){
y <- sum(as.numeric(x)>0, na.rm = TRUE)
ifelse(y>0, 1, 0)
}
TP10.inc <- dcast(TP10, tenderer_name ~ attr_of_procurement,
value.var = "total_tender_awarding_value",
fun.aggregate = is.present)
rownames(TP10.inc) <- TP10.inc[,1]
TP10.inc <- TP10.inc[,-1] # 第一欄結果指向rownames, 並移除第一欄
hclust
+ plot
# 用Jaccard dissimilarity 計算距離
d <- vegdist((TP10.inc), method = "jaccard")
hc <- hclust(d)
par(family="STHeiti") # 讓Mac顯示中文的指令,Windows使用者請不要執行本行
plot(hc)
plot(hc, hang=-1) # 把樹枝拉平
ggplot2
+ ggdendro
# 一行搞定,但是Mac會無法顯示中文
ggdendrogram(hc, theme_dendro = FALSE)
# 土炮
dhc <- as.dendrogram(hc)
ddata <- dendro_data(dhc, type = "rectangle")
p <- ggplot(segment(ddata)) +
geom_segment(aes(x = x, y = y, xend = xend, yend = yend)) +
coord_flip() +
scale_y_reverse(expand = c(0., 0.4)) +
geom_text(data = ddata$labels,
family = "STHeiti", # Windows的使用者不需要設定黑體字,請移除本行
aes(x = x, y = y-0.01, label = label), size = 3, hjust = 0)
p
heatmap
par(family="STHeiti") # 讓Mac顯示中文的指令,Windows使用者請不要執行本行
mat <- as.matrix(TP10.inc[,-1])
heatmap(mat, scale = "none",
distfun=function(x){vegdist(x, method = "jaccard")})