iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 17
0
自我挑戰組

資料工程師的Machine Learning/工作學習歷程系列 第 17

[第17天]PowerBI + R畫地圖

  • 分享至 

  • xImage
  •  

來穿插一下工作上應用到的視覺化技能
其實我是寫python的,前陣子才開始玩PowerBI,PowerBI雖然支援Python,但是對於matplotlib畫的地圖卻只支持桌機版(而且還是要在桌機版中開啟瀏覽器才可以看,在PowerBI內中的dashboard看不到QQ
失望之餘,想說就先來做好UI,我就開始找了PowerBi上各種神人做的dashboard來參考,赫然發現PowerBI有支援ggplot!!!!!!!!!!!PowerBI竟然支援R比支援Python還要多!!!!!!!!!!!怎麼會這樣~~~但是發現想做的事情有辦法做到後,用R畫圖好像就變得非常有動力?
其實因為Python的dataframe是從R過來的觀念,只要大概知道這些概念,換個語言其實不難der~
以下是畫出圖的程式碼~
由於PowerBI會幫你把你所選的features包成一個dataset給你,所以以下的dataset就是PowerBI幫我包好的囉~
我的dataset中有Country_Name(string), num_qty_GR(float), Lat(float), Lon(float)

library(maps)   #map包中有各種地圖
library(mapproj)
library(ggplot2)
library(dplyr)   #清資料用的
library(colorRamps)   #畫圖有好看的顏色用的
library(ggrepel)   #避免地圖上的label重複用的包

map <- map_data("world")   #我用世界地圖

#distinct(map, region, subregion) #check distinct value of region/subregion, function "distinct" is from dplyr
new_map = map[map$region!="Antarctica",]  #select rows that region is not Antarctica
#ggplot(new_map, aes(x=long,y=lat,group=group))+geom_polygon(fill="white") #畫出來看看有沒有成功

qty_map <- left_join(new_map, dataset, by = c("region"="Country_Name"), copy = FALSE)  #因為我要拿世界地圖當底圖,但是要在上面按照我的數據塗出深淺不一的顏色,所以要把兩者的dataframe合併。

ggplot(qty_map, aes(x=long,y=lat, group=group,  fill=num_qty_GR, colour=num_qty_GR)) +
scale_fill_gradient(low = "darkred", high="darkgreen") +
geom_polygon(color = "white") +   #地圖上要塗的顏色
geom_label_repel(data=subset(qty_map, num_qty_GR>=0.1 | num_qty_GR <=-0.15), aes(x=Lat, y=Lon, label=paste(country_ISO3,num_qty_GR))) +  #這裡針對num_qty_GR低於或高於某種程度的數值才給予標籤顯示,不然全部打上很亂
#geom_label(data=subset(qty_map, num_qty_GR>=0.1 | num_qty_GR <=-0.15), aes(x=Lon, y=Lat, label=paste(country_ISO3,num_qty_GR)), size=5, fill = "white") +
scale_colour_gradientn(colours=rev(green2red(5)),guide=FALSE)+  #guide=False是不要在圖上顯示,因為這裡我只是要給標籤上色而已
coord_map(xlim=c(-180,180)) +
coord_fixed(1.2) +  #可以調整X軸跟Y軸的比例
labs(title ="World Map") +
theme_classic() +
labs(x=NULL, y=NULL) +
theme(panel.border = element_blank()) +
theme(panel.background = element_blank()) +
theme(axis.ticks = element_blank()) +
theme(axis.text = element_blank())

我覺得從python來寫R,最有趣的地方是ggplot可以一路加下去XD這也太妙了
然後發現在畫圖方面(這次只有接觸到地圖),R的包比Python包齊全好多

明天補圖XD


上一篇
[第16天]AdaBoost元算法
下一篇
[第18天]回歸--線性回歸
系列文
資料工程師的Machine Learning/工作學習歷程20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言