R語言天氣可視化應用

2021-02-23 淘數據

目錄

項目介紹

系統架構設計

R語言程序現實

1. 項目介紹

談到多語言混編,同如在計算機領域跨學科一樣,是我所一直倡導一種工作模式。當程式語言百花齊放,各種細分市場的小眾語言如雨後春筍般地成長起來,比起通用型程式語言來說,這些小眾語言在特定的領域中有著非常明顯的優勢。 比如統計應用,如果用Java寫個邏輯回歸程序感覺深不見底,而用R語言實現邏輯回歸就是個很平常的一件事情。 再比如做一個Web網站,用PHP或Nodejs實現輕而易舉,如果用Java做不僅代碼量大,而且程序複雜。 所以,對於一個應用來說,一種通用的語言並不一定是最好的解決方案,如果能實現多種語言的結合,那麼你做出來的應用可以很酷,很不一樣!

對於本文要介紹的 每日中國天氣 這個新浪微博應用,就是一種多語言混編的實現。

項目介紹

這個項目的出發點很簡單,就是通過可視化技術,展示中國每個省份的天氣情況,給準備旅遊的朋友,提供一種出行的提示。

要做實現這個應用,我們首先要列出,要實現哪些功能,會遇到哪些問題等。

天氣數據:數據從哪裡找到,如何下載,如何存儲。

定時任務:天氣數據需要每日更新,圖片需要每日新生成。

地圖和天氣可視化:要把中國行政區圖和天氣數據結合在一起畫圖,讓用戶一眼就能看明白。

Web展示:通過可視化技術,我們生成的只是一張靜態圖片,如何發布到Web端進行展示。

微博:通過結合新浪微博,讓更多的用戶看到並使用這個應用。

用戶交互:用戶可以查看不同日期、不同類型的圖片,用戶還可以通過微博分享。

雖然是個很小的應用,但五臟俱全,我們也需要完整的思考,如何才能實現這個應用呢!

2. 系統架構設計

從上面的功能描述中,單獨使用一種語言也可以實現的。 如果單獨用PHP開發,做一個Web網站非常容易,連接新浪微博也有現成的SDK可以調用,爬取數據及存儲也不麻煩,那麼如何實現地圖和天氣數據的可視化,似乎就是卡在這裡了。 如果單獨用R開發,爬取數據及存儲同樣很容易實現,地圖和天氣數據的可視化也是很方便就能畫出來,但是用R做Web網站,那就會遇到很大的瓶頸了,因為R是單線程同步的計算模型,Web應用的高並發特點,會直接讓R程序崩潰的。 所以,綜合上面的問題,如果R語言和PHP語言能結合在一起使用,不僅能避開每種語言不擅長的地方,還能在擅長的領域發揮出每種語言的特性,我們將通過多語言的混編技術做出很不一樣的應用來。

為了實現應用的功能需求,我們要設計一套系統架構。

系統架構解釋:

通過定時器啟動爬蟲程序,到Yahoo的天氣數據源下載數據。

爬蟲下載數據到本地伺服器進行解析,存儲應用相關的數據到CSV文件。

可視化程序,讀入天氣數據及地圖數據,生成靜態的圖片作為可視化輸出。

最終用戶通過新浪微博,加載Web應用,看到了可視化生成的靜態圖片。

最終用戶通過新浪微博分享了這個應用,讓更多的人看到這個應用。

下面按照語言的優勢,把應用架構以語言的特性來劃分,讓R語言實現爬蟲、處理數據和可視化,讓PHP完成Web開發、新浪API接入和用戶交互。

由於我們這個應用,不需要讓R和PHP直接進行通信,那麼複雜度就會變得小很多了,像我之前做的曬粉絲應用,是3種語言的結合包括了R, PHP, Java,通過Java實現中間程序的調度,讓R和PHP能夠實現通信。

我們通過語言的劃分,就可以揚長避短,讓每種語言在最擅長的領域,完成最擅長的事情。

對於後臺技術應用,定時器可以用Linux系統的CRON實現;然後用R語言程序來爬取數據,通過RCurl包來完成;爬取後的數據為XML格式,再通過R語言用XML包進行解析,以CSV格式進行本地存儲;接下來,再用R語言處理數據,加載地圖包ggmap、mapdata、maptools,最後配合plot()函數實現圖片的輸出,保存在本地伺服器上。

對於前端的PHP應用來說,用PHP做一個Web網站很簡單,使用YII快速開發框架;用PHP的新浪微博SDK進行API操作,實現新浪登陸,新浪分享等功能;最後Nginx + Spawn構建出PHP運行時環境,讓Nginx完成負載均衡和圖片加載,並配合PHP的訪問規則,實現功能的切換。

合理的架構設計加上適應的語言的分工,就能輕鬆實現了 每日中國天氣 這樣的一個微博應用。其實,我們可以用這種多語言混搭的方式,創建出各種創新型的網站應用,但前提是先能掌握多種語言。

這裡我想再多說一句,通常我認識的程式設計師,都是在自己的技術領域中無限暢快,一旦他們掌握了一種語言的核心技術,並有了一些開發經驗後,往往不願意再去學第二種語言。 對這些人來說,總覺得自己就是世界的中心,自己有能力實現的所有的功能。這些也都是有理想的程式設計師,只不過他們進入了一個誤區,被現有的技術給迷住了,看不到、也不願意看到外面的世界已經變了。我曾經就是這樣的!

我承認Java是一種無所不能的程式語言,但是如果你所有程序都用Java實現,難道不覺得又費時又費力嗎?通用性越強,反而專有領域的應用性就越差。這也是我從Java單一的技術路線走出來的原因。其實,在精通一門語言後,再去學習另外一門新的語言,就不是那麼難了。但如果只是沉醉於已掌握的技術,很快就會被一代新人,一代新工具所超越的。

3. R語言程序現實

下面就開始介紹R語言的部分程序開發,在寫代碼之前,我們需要先梳理開發流程,做一下程序設計,R語言都需要實現哪些功能,用到哪些第三方R包。

我用一幅圖來說明程序之間的調用關係,R語言的程序實現一共包括了6個部分,爬蟲程序、本地存儲,地圖加載、數據可視化處理、生成靜態圖、生成可交互的靜態圖。

上圖中,分別標出了每個步驟用的到R包或者功能函數,同時我們可以按照這個流程來定義功能函數,這樣我們就把整個應用程式都規劃好,最後再對應的寫代碼就不難了。

3.1 爬虫部分

對於爬虫部分來說,就是定時下載每個城市的或地區的天氣數據,並解析數據,只保留我們需要的欄位,並以CSV的格式存儲。網際網路上有很多免費公開的天氣數據源,對我來說,最方便的數據源有2個,一個是Yahoo的天氣數據,另一個Google的天氣數據,但由於Google的API從中國大陸會經常會訪問不到,所以我在這裡選擇Yahoo的天氣數據源進行訪問。

yahoo天氣數據源的訪問地址,如下所示。

http://weather.yahooapis.com/forecastrss?w=WOEID

其中WOEID代表城市對應的代碼,如果想查看北京的天氣數據,北京對應的WOEID為2151330,可以訪問用瀏覽器訪問 http://weather.yahooapis.com/forecastrss?w=2151330 。

我們通過瀏覽器打開地址,就可以看到這個數據,數據是以XML格式進行發布的。

我們要解析這個XML文件,從中找到我們需要數據進行提鄧。在R語言中,通過RCurl包實現HTTP的網絡訪問,抓取到整個的XML文檔數據,然後通過XML包解析XML文檔的DOM樹,就能找到我們需要的數據了。

本文的系統環境

當我們把業務邏輯和技術實現都想清楚了,就可以動手寫代碼了,只十幾行代碼就能完成爬蟲和XML文檔解析的功能。


運行程序,查看返回結果。


對於功能需求來說,一個城市只保存7個欄位就行了,其他的XML文檔的數據可以全部過濾掉不管。

3.2 本地存儲

我們通過爬蟲下載並過濾後的數據,已經是data.frame的格式了,通過write.csv()函數就把這些數據輸出到本地文件系統中保存起來,做為數據的備份。

我們在處理本地存儲的過程中,除了要生成一個CSV文件,還包括了 文件命名,把多個城市的數據合併到一個文件存儲的問題。下面我們需要再定義兩個函數,filename()函數用於新生成文件的命名,loadDate()函數用於多個城市數據的加載,合併在一個文件中保存。

城市列表應該是我們需要提單準備好的,我這裡只選取了中國的34個城市作為我們要獲得的城市天氣數據的信息。如果想爬取更多的城市天氣數據的信息,那麼補充這個列表就行了。

城市列表數據文件WOEID.csv。

beijing,2151330,北京,北京市,116.4666667,39.9shanghai,2151849,上海,上海市,121.4833333,31.23333333tianjin,2159908,天津,天津市,117.1833333,39.15chongqing,20070171,重慶,重慶市,106.5333333,29.53333333harbin,2141166,哈爾濱,黑龍江省,126.6833333,45.75changchun,2137321,長春,吉林省,125.3166667,43.86666667shenyang,2148332,瀋陽,遼寧省,123.4,41.83333333hohhot,2149760,呼和浩特,內蒙古自治區,111.8,40.81666667shijiazhuang,2171287,石家莊,河北省,114.4666667,38.03333333wulumuqi,26198317,烏魯木齊,新疆維吾爾自治區,87.6,43.8lanzhou,2145605,蘭州,甘肅省,103.8166667,36.05xining,2138941,西寧,青海省,101.75,36.63333333xian,2157249,西安,陝西省,108.9,34.26666667yinchuan,2150551,銀川,寧夏回族自治區,106.2666667,38.33333333zhengzhou,2172736,鄭州,河南省,113.7,34.8jinan,2168327,濟南,山東省,117,36.63333333taiyuan,2154547,太原,山西省,112.5666667,37.86666667hefei,2127866,合肥,安徽省,117.3,31.85wuhan,2163866,武漢,湖北省,114.35,30.61666667changsha,26198213,長沙,湖南省,113,28.18333333nanjing,2137081,南京,江蘇省,118.8333333,32.03333333chengdu,2158433,成都,四川省,104.0833333,30.65guiyang,2146703,貴陽,貴州省,106.7,26.58333333kunming,2160693,昆明,雲南省,102.6833333,25nanning,2166473,南寧,廣西壯族自治區,108.3333333,22.8lasa,26198235,拉薩,西藏自治區,91.16666667,29.66666667hangzhou,2132574,杭州,浙江省,120.15,30.23333333nanchang,26198151,南昌,江西省,115.8666667,28.68333333guangzhou,2161838,廣州,廣東省,113.25,23.13333333fuzhou,2139963,福州,福建省,119.3,26.08333333taipei,2306179,臺北,臺灣省,121.5166667,25.05haikou,2162779,海口,海南省,110.3333333,20.03333333hongkong,24865698,香港,香港特別行政區,114.1666667,22.3macau,20070017,澳門,澳門特別行政區,113.5,22.2

欄位解釋:

第一列,城市的英文名

第二列,WOEID代碼

第三列,城市的中文名

第四列,城市所在的省中文名

第五列,經度(默認為東經)

第六列,緯度(默認為北緯)


運行程序loadDate()的函數,程序會根據城市列表的數據,調用getWeather()函數自動爬取我們定義的所有城市的天氣數據。



程序運行完成後,會在當前目錄生成一個名字為20141001.csv文件。打開20141001.csv文件,這個文件就是接下來用於生成可視化圖片的基礎

數據一共有10列,欄位解釋:

R語言通過第三方的地圖R包,可以很方便的實現基於地圖的可視化或基於地理信息的數據處理。那麼R語言是如何做到的呢,是通過maps, mapdata, maptools這3個包合作完成的。

我們調用maptools包的readShapePoly()函數,加載中國行政區地圖的數據信息,保存在map的變量中,直接用plot()函數就可以看到可視化的效果了。地圖數據是我提前下載好的,保存放在mapdata目錄中,一共全部3個文件bou2_4p.dbf,bou2_4p.shp和bou2_4p.shx。

> library(maps)> library(mapdata)> library(maptools)> map<-readShapePoly('mapdata/bou2_4p.shp')     # 加載中國行政區地圖數據> plot(map)                                     # 畫出中國行政區圖

是不是很神奇,2行就畫出是中國行政區地圖的輪廓,我們再繼續來分析map這個變量。先檢查一下的map的類型,發現是sp包中定義的SpatialPolygonsDataFrame類型的。

> class(map)                                    # 查看map對象類型[1] "SpatialPolygonsDataFrame"attr(,"package")[1] "sp"

SpatialPolygonsDataFrame類型我們並不熟悉,再用pryr包的otype查檢一下,面向對象系統的類型。

> library(pryr)> otype(map)        # 發現是S4類型的data.frame[1] "S4"

R語言基於S4的面向對象編程一文,我們已經掌握了S4類型的基礎知識,在知道map是一個S4類型的實例後,大概就能猜出這個對象如何使用了。另外從命名上看,SpatialPolygonsDataFrame類型,應該是用data.frame存儲了SpatialPolygons的類型的數據。 先通過length()函數和names()函數,從data.frame的角度查看一下map對象,包括7列925行。

> length(map)       # 一共有925條記錄[1] 925> names(map)        # data.frame包括有7列[1] "AREA"       "PERIMETER"  "BOU2_4M_"   "BOU2_4M_ID" "ADCODE93"[6] "ADCODE99"   "NAME"

再通過str()函數查看map對象第一行數據的靜態結構。

> str(map[1,])Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots  ..@ data       :'data.frame': 1 obs. of  1 variable:  .. ..$ AREA: num 54.4  ..@ polygons   :List of 1  .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots  .. .. .. ..@ Polygons :List of 1  .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots  .. .. .. .. .. .. ..@ labpt  : num [1:2] 127.8 47.9  .. .. .. .. .. .. ..@ area   : num 54.4  .. .. .. .. .. .. ..@ hole   : logi FALSE  .. .. .. .. .. .. ..@ ringDir: int 1  .. .. .. .. .. .. ..@ coords : num [1:5784, 1:2] 121 121 122 122 122 ...  .. .. .. ..@ plotOrder: int 1  .. .. .. ..@ labpt    : num [1:2] 127.8 47.9  .. .. .. ..@ ID       : chr "0"  .. .. .. ..@ area     : num 54.4  ..@ plotOrder  : int 1  ..@ bbox       : num [1:2, 1:2] 121.2 43.4 135.1 53.6  .. ..- attr(*, "dimnames")=List of 2  .. .. ..$ : chr [1:2] "x" "y"  .. .. ..$ : chr [1:2] "min" "max"  ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots  .. .. ..@ projargs: chr NA

從這兩個維度的觀察,我們基本清楚map的結構,map裡每一行是一個SpatialPolygonsDataFrame對象,包括5個屬性,用於存儲地圖數據信息。取第一行數據data屬性,查看結果,發現是黑龍江省的行政區地圖數據。

> map[1,]@data    AREA PERIMETER BOU2_4M_ BOU2_4M_ID ADCODE93 ADCODE99     NAME0 54.447    68.489        2         23   230000   230000 黑龍江省

用第一行數據畫圖。

> plot(map[1,])

如果取前100行數據畫圖,那麼應該是部分中國省的行政區地圖了,果然如我所料。

> plot(map[1:100,])

由於本文並不是地圖包的詳細介紹,只要了解到map對象的基本使用就行了,稍後在博客中我會單獨介紹用R做地圖可視化的開發。

3.4 數據可視化

完成了地圖數據加載後,再接下來就是數據可視化了。數據可視化,我認為要分成2部分操作,一部分是數據處理,另一部分是可視化輸出。

我們先想一下要怎麼進行數據處理,才能把天氣數據和地圖數據結合起來呢。我們的目標是要畫出中國各省天氣概況,會用到過之前過濾出的數據中code的數據,code的數據都是代碼,我們還要定義code代碼和實際意義的映射關係。

Yahoo的源數據中,一共定義了49種天氣情況,如code.csv文件所示,根據描述我把相似的天氣情況進行合併,最後保留18種天氣概況特徵。code代碼映射文件為lablecode.csv。

code.csv文件。

"code","en","zh","type"0,tornado,龍捲風,31,tropical storm,熱帶風暴,22,hurricane,暴風,33,severe thunderstorms,強雷雨天氣,164,thunderstorms,雷雨,115,mixed rain and snow,雨雪,126,mixed rain and sleet,雨雪,127,mixed snow and sleet,雨雪,128,freezing drizzle,凍毛毛雨,119,drizzle,毛毛雨,1110,freezing rain,凍雨,1111,showers,陣雨,1112,showers,陣雨,1113,snow flurries,小雪,1314,light snow showers,陣雪,1315,blowing snow,飛雪,1316,snow,雪,1417,hail,冰雹,1518,sleet,雨雪,1219,dust,灰塵,520,foggy,霧,721,haze,薄霧,722,smoky,煙霧瀰漫,623,blustery,大風,324,windy,風,425,cold,冷,1826,cloudy,多雲,827,mostly cloudy (night),滿雲密布,828,mostly cloudy (day),滿雲密布,829,partly cloudy (night),少雲,930,partly cloudy (day),少雲,931,clear (night),晴,1032,sunny,睛,1033,fair (night),晴,1034,fair (day),晴,1035,mixed rain and hail,大雨和冰雹,1636,hot,熱,137,isolated thunderstorms,局部雷雨,1138,scattered thunderstorms,零星雷雨,1139,scattered thunderstorms,零星雷雨,1140,scattered showers,零星陣雨,1141,heavy snow,大雪,1442,scattered snow showers,零星陣雪,1343,heavy snow,大雪,1444,partly cloudy,少雲,945,thundershowers,雷陣雨,1146,snow showers,陣雪,1347,isolated thundershowers,局部雷雨,113200,not available,無數據,19

欄位解釋:

code,源數據天氣特徵代碼

en,英文描述

zh,中文描述

type,分類代碼

lablecode.csv文件。

"type","alias"1,熱2,風暴3,大風4,微風5,灰塵6,大霧7,薄霧8,多雲9,少雲10,晴11,陣雨12,雨加雪13,小雪14,大雪15,冰雹16,大雨17,雷暴雨18,冷19,無數據

欄位解釋:

有了天氣特徵定義後,我們再把特徵匹配到不同的顏色,並增加圖例及文字描述,就生成了最終的中國各省天氣概況的靜態圖片了。

> library("RColorBrewer")> getColors2<-function(map,prov,ctype){+     #name change to ADCODE99+     ADCODE99<-read.csv(file="ADCODE99.csv",header=TRUE,fileEncoding="utf-8", encoding="utf-8")+     fc<-function(x){ADCODE99$ADCODE99[which(x==ADCODE99$prov)]}+     code<-sapply(prov,fc)+     +     f=function(x,y) ifelse(x %in% y,which(y==x),0);+     colIndex=sapply(map$ADCODE99,f,code);+     ctype[which(is.na(ctype))]=19+     return(ctype[colIndex])+ }> summary<-function(data=data,output=FALSE,path=''){+     colors<-c(rev(brewer.pal(9,"Blues")),rev(c('#b80137','#8c0287','#d93c5d','#d98698','#f6b400','#c4c4a7','#d6d6cb','#d1b747','#ffeda0')))    # 定義18種天氣特徵對應的顏色++     temp<-data$code+     title<-"中國各省天氣概況"+     ofile<-paste(format(date,"%Y%m%d"),"_code.png",sep="")+     sign<-''+     colors<-rev(colors)+     code<-read.csv(file="code.csv",header=TRUE,fileEncoding="utf-8", encoding="utf-8")+     labelcode<-read.csv(file="labelcode.csv",header=TRUE,fileEncoding="utf-8", encoding="utf-8")+     ctype<-sapply(temp,function(x){code$type[which(x==code$code)]})++     if(output)png(file=paste(path,ofile,sep=''),width=600,height=600)+     layout(matrix(data=c(1,2),nrow=1,ncol=2),widths=c(8,1),heights=c(1,2))+     par(mar=c(0,0,3,12),oma=c(0.2,0.2,0.2,0.2),mex=0.3)+     plot(map,border="white",col=colors[getColors2(map,data$prov,ctype)])       # 地圖和天氣可視化+     points(data$long,data$lat,pch=19,col=rgb(0,0,0,0.3),cex=0.8)                     # 標出採樣城市++     #=======================================          # 圖片中的輔助文字+     if(FALSE){+         grid()+         axis(1,lwd=0);axis(2,lwd=0);axis(3,lwd=0);axis(4,lwd=0)+     }+     text(100,58, title,cex=2)+     text(105,54,format(date,"%Y-%m-%d"))+     text(98,65,paste('每日中國天氣','http://apps.weibo.com/chinaweatherapp'))+     text(120,-8,paste('provided by The Weather Channel',format(date, "%Y-%m-%d %H:%M")),cex=0.8)++     #=======================================          # 文字說明+     for(row in 1:nrow(data)){+         name<-as.character(data$zh[row])+         label<-labelcode$alias[labelcode$type==ctype[row]]+         x1<-ceiling(row/7)+         x2<-ifelse(row%%7==0,7,row%%7)+         x3<-ctype[row]+         fontCol<-'#000000'+         if(x3<=5)fontCol<-head(colors,1)+         if(x3>=12)fontCol<-tail(colors,1)+         text(68+x1*11,17-x2*3,paste(name,' ',label,sign,sep=''),col=fontCol)+     }++     #=======================================          # 圖例+     par(mar = c(5, 0, 15, 10))+     image(x=1, y=1:length(colors),z=t(matrix(1:length(colors))),col=rev(colors),axes=FALSE,xlab="",ylab="",xaxt="n")+     axis(4, at = 1:(nrow(labelcode)-1), labels=rev(labelcode$alias)[-1], col = "white", las = 1)+     abline(h=c(1:(nrow(labelcode)-2)+0.5), col = "white", lwd = 2, xpd = FALSE)+     if(output)dev.off()+ }

運行程序,生成靜態圖片。

> data<-read.csv(file=filename(date),header=TRUE,fileEncoding="utf-8", encoding="utf-8")   # 定義數據源> path=''                                                                                  # 定義輸出路徑> summary(data,output=TRUE,path=path)      # 生成中國各省天氣概況圖RStudioGD        2

代碼量大概100行左右,就可以生成這麼複雜的天氣和地圖結合的圖片,R真的很神奇!

3.5 可交互的靜態圖

這是錦上添花的一步,靜態圖片對於一般應用來說就夠了。但如果圖片還能動起來,是不是會更吸引人呢?我們可以嘗試生成基於HTML5的、有動態效果的圖,通過recharts包調Echarts庫實現基於HTML5的動畫,生成會動的可交互的圖片。

由於recharts包沒有發布的CRAN,我們需要用devtools包通過Github安裝這個包。

> library(devtools)                     # 加載devtools> install_github("taiyun/recharts")     # 下載安裝recharts包> library(recharts)                     # 加載recharts包

由於上面的天氣概況是由離散值組成的,利用echarts的庫,我們做一個連續值的可視化例子,比如白天氣溫和夜間氣溫。定義weather_html()函數,提供氣溫數據並調用recharts包,實現可視化的輸出。

> weather_html<-function(data=data,type='high',output=FALSE,path=''){    # 輸入HTML的天氣圖+     if(type=='high') {                                   # 白天氣溫+         df<-data[,c('prov','high')]+         names(df)<-c("prov","氣溫")+         title<-paste(format(date,"%Y-%m-%d"),"中國各省白天氣溫",sep="")+         ofile<-paste(format(date,"%Y%m%d"),"_day.html",sep="")+     }else if(type=='low'){                               # 夜間氣溫+         df<-data[,c('prov','low')]+         names(df)<-c("prov","氣溫")+         title<-paste(format(date,"%Y-%m-%d"),"中國各省夜間氣溫",sep="")+         ofile<-paste(format(date,"%Y%m%d"),"_night.html",sep="")+     }++     df[,1]<-substr(df[,1],0,2)                           # 數據格式整理+     df[which(df$prov=='黑龍'),]$prov<-'黑龍江'+     df[which(df$prov=='內蒙'),]$prov<-'內蒙古'++     recharts.eMap <- eMap(df, namevar=1, datavar = 2, title=title)      # 數據JSON化處理+     if(output){                                                         # 輸出HTML文件+         recharts.eMap$outList[c('chartid','type')]<-NULL+         writeLines(unlist(recharts.eMap$outList),paste(path,ofile,sep=''))+     }else{                                                              # 在瀏覽器中打開HTML網頁+         plot(recharts.eMap)+     }+ }

運行程序,以HTML輸出中國各省白天氣溫。

> date<-as.Date('20141001',format='%Y%m%d')     # 設置日期> data<-read.csv(file=filename(date),header=TRUE,fileEncoding="utf-8", encoding="utf-8")      # 加載數據> path=''                                                                                     # 設置文件輸出路徑> weather_html(data,type='high',output=FALSE,path='')           # 輸出中國各省白天氣溫[1] "氣溫"[1] "chart path C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\RtmpqCHFPY"

程序會自動打開瀏覽器,呈現HTML的網頁。

運行程序,以HTML輸出中國各省夜間氣溫。在網頁中,通過滑鼠對地圖進行交互,移動左下角的溫度條,選擇最高溫度30,最低溫度8.8,中國地圖中由西南到東北變為灰色,說明這些地區的溫度不在8.8到30度之間。當滑鼠路過海南省的時候,海南省呈現黃色,並提示出溫度為23度。

> weather_html(data,type='low', output=FALSE,path='')           # 中國各省夜間氣溫[1] "氣溫"[1] "chart path C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\RtmpqCHFPY"

如果不需要在瀏覽器中打開,只能想存儲生成的網頁,可以在程序中設置output為TRUE,當前目錄下會生成20141001_night.html的文件。

> weather_html(data,type='low',output=TRUE,path='')[1] "氣溫"


相關焦點

  • R語言學習筆記之相關性矩陣分析及其可視化
    rcorr(x, type = c(「pearson」,「spearman」))。library(Hmisc)#加載包res2 <- rcorr(as.matrix(mydata))res2#可以用res2$r、res2$P來提取相關係數以及顯著性p-valueres2$r
  • R語言與Tableau集成之可視化應用
    作者 | CDA數據分析師Tableau是一款非常棒的數據可視化商業軟體,通過拖拉拽的方式迅速地實現數據可視化。而且該軟體可以連接任何一種資料庫,在處理大型數據時一點都不遜色。缺點是其無法從事數據分析和挖掘工作,幸運的是,從Tableau的8.0開始,Tableau與R語言打通,可以在Tableau中運行R腳本,從而將R語言的分析或挖掘結果在Tableau中展示。如何實現Tableau和R語言的聯手繪製可視化圖表呢?
  • R語言做空間分析(一)——數據的空間可視化實現
    上一期我們講到R語言在醫學統計中的應用-基礎教程,今天我們來學習地理信息數據的空間可視化實現。
  • R語言、Matlab、MeteoInfo、Python及ArcGis可視化DEM地形圖
    一、R語言可視化DEM地形圖-往期推文超連結:1
  • Day7:R語言課程 (R語言進行數據可視化)
    程式語言通常有辦法允許多次執行代碼,或者在「循環」中執行。雖然R語言也有「循環」,但有些函數更直接,例如apply()函數map()族和函數族。map()族比apply()更直觀,因此主要學習map()。
  • 技術貼 | R語言:組學關聯分析和pheatmap可視化
    舉例展示R語言組學關聯分析的方法。宏基因組數據以KO-樣品豐度表為例。代謝組數據以metabolite-樣品豐度表為例。基本方法是用R語言psych包corr.test函數進行兩組數據的相關分析,結果經格式化後用pheatmap可視化得熱圖。一、模擬輸入 1.
  • 用數據說話,R語言有哪七種可視化應用?
    今天,隨著數據量的不斷增加,數據可視化成為將數字變成可用的信息的一個重要方式。R語言提供了一系列的已有函數和可調用的庫,通過建立可視化的方式進行數據的呈現。相關圖我們使用「Big Mart data」作為案例來理解 R 可視化的實現方法,你可以點擊此處下載完整的數據(google doc)。雷鋒網將在以下篇幅介紹如何利用 R 實現可視化:1、  散點圖使用場景:散點圖通常用於分析兩個連續變量之間的關係。
  • R語言可視化(十八):UMAP圖繪製
    ## 6 5.4 3.9 1.7 0.4head(iris.labels)## [1] setosa setosa setosa setosa setosa setosa## Levels: setosa versicolor virginica使用umap包進行UMAP降維可視化分析
  • 【免費直播課程】R-GIS:R語言地統計與空間製圖實踐技術 應用
    R語言在數據分析、挖掘和可視化中發揮著重要的作用,其中在空間分析方面扮演著重要角色,與空間相關的包的數量也達到130多個。在本次課程中,我們將結合一些經典的例子培訓R語言在空間數據處理、管理以及可視化的操作,從空間數據計量、空間數據插值、空間數據建模、機器學習、數據可視化、知識圖譜等方面讓你全方位進行GIS操作和製圖,從此擺脫ArcGIS的複雜操作,實現空間數據的自動化、快遞批量操作、建模及其可視化。
  • R語言可視化學習筆記之添加p-value和顯著性標記
    taoyan:偽碼農,R語言愛好者,愛開源
  • r語言有什麼優劣勢及R語言的未來發展趨勢_R語言在現實中的應用
    原本不是什麼特別突出的長處(有則好,沒也沒啥),不過現在數據可視化越來越熱,也就一躍成為主要優點了。 應用的思考 R 語言並不是人人都能接觸到的語言,相對要小眾很多,有些人即便接觸到沒準也搞不清楚R到底有什麼用途。對於走上這條路的人,經常會有一些應用困難,比如從個人學習角度而言。 雖然R語言的設計之初就是避免通過大量編程實現統計算法,但最基本的編程能力還是需要的,因此對於一般非計算機專業的工作者來說無疑提高了難度。
  • R 語言入門學習路線與資源匯總
    將"髒"數據清洗成"乾淨"數據對於後續的統計分析和數據可視化非常重要。R語言內置了很多基礎函數來處理數據,但是這些函數數據處理效率一般般,並且也不是那麼好用,這裡推薦一些不錯的數據處理R包和函數。數據可視化R語言最出色的功能之一就是數據可視化啦。
  • 【語言班】R語言數據分析與可視化高級研修班(4.26-29)
    R語言是用於數據分析、數據可視化的高級程式語言,其功能包括:數據存儲和處理、科學計算工具;能夠進行幾乎所有的統計分析;內置豐富便捷的數據可視化功能
  • 數據可視化之R語言
    分類數據的可視化使用條形圖、點圖、柱形圖、脊柱圖、馬賽克圖、餅圖及四折圖連續數據的可視化使用箱線圖、直方圖、散點圖及其變種、帕累託圖==============================================一、分類數據的可視化
  • R語言實現meta分析過程中的可視化展示
    今天我們給大家介紹一個在R語言中進行meta分析的工具metafor包。我們通過這個包把相應的meta分析的常規的一些圖為大家介紹下。1. 森林圖,主要是對研究的一致性進行評估的可視化展示形式,以豎線為界,總結結果在線左認為是研究的因素降低,或者對研究的因素不利。此處我們使用此包自帶的卡介苗抵抗肺結核(TB)的研究數據進行森林他繪製。
  • R語言可視化之UpSetR包
    作者:嚴濤簡介集合可視化我們用得最多的是韋恩圖,韋恩圖在集合數少的時候是很好用的,但是當集合數多比如五個以上的時候那就會看花眼了,比如下面這副含有今天介紹一個R包UpSetR,專門用來集合可視化,來源於UpSet,Python裡面也有一個相似的包py-upset。此外還有個UpSetR shiny app以及原始碼.
  • R語言數據分析從入門到進階-R語言數據可視化基礎-基礎繪圖函數部分代碼
    》視頻已在B站上線,本文是第6部分R語言數據可視化基礎的基礎繪圖函數的代碼。在B站上這部分視頻被單獨發布在《R語言數據可視化基礎》系列中,大家可以單獨觀看。希望大家能夠對照視頻,找數據,寫代碼,發現不對的時候再來參考代碼。有任何問題都可以在視頻的評論區留言交流,UP主會竭盡所能幫助大家解決問題。
  • Earth NullSchool全球天氣可視化模擬網 在地理教學中的應用初探
    摘要:Earth NullSchool全球天氣可視化模擬網是一款表現和再現力極強、參與性高、調控簡單靈活的在線網頁版地理教學軟體
  • R語言信息可視化——文字雲
    這一篇跟大家分享R語言信息可視化——文字雲。R語言可以輕鬆處理信息可視化,並且很早就有專用的信息可視化包——WordCloud。
  • 獨家 | 手把手教你學習R語言(附資源連結)
    另一種學習方法是在線版本swirl(https://www.datacamp.com/swirl-r-tutorial),它能讓您在類似RStudio環境中學習R語言。(https://www.rstudio.com/resources/webinars/data-wrangling-with-r-and-rstudio/)閱讀並練習如何使用dplyr、tidyr和data.table程序包。步驟五:有效數據可視化自己創建數據可視化作品是一件很自豪的事情。