데이터분석 전문가(ADP)를 위한 R프로그래밍 시각화편4

1. 지오차트

 

구글비즈 패키지에서 지원하는 지도와 그 위에 데이터를 표시하는 차트

 

> install.packages('googleVis')
> library(googleVis)

> data(Exports)
> head(Exports)
        Country Profit Online
1       Germany      3   TRUE
2        Brazil      4  FALSE
3 United States      5   TRUE
4        France      4   TRUE
5       Hungary      3  FALSE
6         India      2   TRUE

g1 <- gvisGeoChart(Exports, locationvar='Country', colorvar='Profit')
plot(g1)

 

위 코드를 수행하면 브라우저가 새로 열리면서 아래와 같은 시각화가 나온다

 

 

특정지역만 한정해서 그릴 수 있다

 

유럽지역 150번에만 한정하여 국가별 수익을 그리고자 한다면

> g2 <- gvisGeoChart(Exports, 'Country','Profit',options=list(region='150'))
> plot(g2)

 

 

해상도 수준도 변경할 수 있다

 

> require(datasets)
> states <- data.frame(state.name, state.x77)
> head(states)
           state.name Population Income Illiteracy Life.Exp Murder HS.Grad Frost   Area
Alabama       Alabama       3615   3624        2.1    69.05   15.1    41.3    20  50708
Alaska         Alaska        365   6315        1.5    69.31   11.3    66.7   152 566432
Arizona       Arizona       2212   4530        1.8    70.55    7.8    58.1    15 113417
Arkansas     Arkansas       2110   3378        1.9    70.66   10.1    39.9    65  51945
California California      21198   5114        1.1    71.71   10.3    62.6    20 156361
Colorado     Colorado       2541   4884        0.7    72.06    6.8    63.9   166 103766

> g3 <- gvisGeoChart(states, 'state.name', 'Illiteracy', options=list(region='US',displayMode='regions', resolution='provinces',
+                                                                     width=600, height=400))
> plot(g3)

 

무슨 차이인지는 모르겠지만 이미지 크기가 바뀌었나봄

 

허리케인 경로를 색상으로 표시하기

 

허리케인의 위치, 속도 정보가 들어간 Andrew 데이터 활용

 

colorvar에 speed_kt를 두면 원의 색에 따른 속도를 표시한다

 

g5 <- gvisGeoChart(Andrew, 'LatLong', colorvar='Speed_kt', options=list(region='US'))
plot(g5)

 

 

 

sizevar에 speed_kt를 두면 원의 크기에 따라 속도를 표시한다

 

> g6 <- gvisGeoChart(Andrew, 'LatLong', sizevar='Speed_kt', colorvar='Pressure_mb', options=list(region='US'))
> plot(g6)

 

여기서 색은 pressure? 허리케인의 기압?

 

 

지진 데이터를 활용한 지도의 깊이를 표시

 

지진 데이터가 들어간 Quakes를 활용

 

> require(stats)
> data(quakes)
> head(quakes)
     lat   long depth mag stations
1 -20.42 181.62   562 4.8       41
2 -20.62 181.03   650 4.2       15
3 -26.00 184.10    42 5.4       43
4 -17.97 181.66   626 4.1       19
5 -20.42 181.96   649 4.0       11
6 -19.68 184.31   195 4.0       12

> quakes$latlong <- paste(quakes$lat, quakes$long, sep=':')
> head(quakes$latlong)
[1] "-20.42:181.62" "-20.62:181.03" "-26:184.1"     "-17.97:181.66" "-20.42:181.96" "-19.68:184.31"


> g7 <- gvisGeoChart(quakes, 'latlong', 'depth', 'mag', options=list(displayMode='Markers', region='009', colorAxis="{colors:['red', 'grey']}",
+                                                                    backgroundColor='lightblue'))
> plot(g7)

 

 

고정된 데이터를 읽어와서 지도에 표시하기

 

위키피디아 국가별 신용등급 정보의 세번째 테이블에 있는 데이터를 읽어 들여 지도에 표시

 

> install.packages('XML')
> library(XML)
> url <- 'https://en.wikipedia.org/wiki/List_of_countries_by_credit_rating'
> x <- readHTMLTable(readLines(url), which=3, header=T)

> head(x)
   Country/Region   Rating Outlook       Date Ref.\n
1  Abu Dhabi, UAE   201 AA  Stable 2012-02-20    [3]
2         Albania   091 B+  Stable 2016-02-05    [4]
3         Andorra  141 BBB  Stable 2020-04-24    [5]
4          Angola 061 CCC+  Stable 2020-03-26    [6]
5       Argentina 061 CCC+  Stable 2020-09-07    [7]
6           Aruba  141 BBB  Stable 2021-03-15    [8]

> levels(x$Rating) <- substring(levels(x$Rating), 4, nchar(levels(x$Rating)))
> x$Ranking <- x$Rating
> levels(x$Ranking) <- nlevels(x$Rating):1
> x$Ranking <- as.character(x$Ranking)
> x$Rating <- paste(x$Country, x$Rating, sep=': ')
> g8 <- gvisGeoChart(x, 'Country/Region', 'Ranking', hovervar='Rating', options=list(gvis.editor='S&P', colorAxis="{colors:['#91BFDB', '#FC8D59']}"))

 

 

 

가변데이터를 읽어와서 지도에 표시하기

 

최근 30일간 진도 4.0이상의 지진발생 정보 사이트에서 얻은 데이터를 그래프로 표시하기

 

> library(XML)
> url <- 'https://ds.iris.edu/seismon/eventlist/index.phtml'
> eq <- readHTMLTable(readLines(url), colClasses=c('factor', rep('numeric',4), 'factor'))$evTable
> head(eq)
  DATE and TIME (UTC)   LAT     LON   MAG   DEPTHkm\n                
1 19-FEB-2022 14:45:11 -23.72 -175.53   5.1                        10
2 19-FEB-2022 12:16:22  18.51  121.25   4.4                        61
3 19-FEB-2022 11:14:49  28.25  142.95   5.0                        10
4 19-FEB-2022 09:32:39  -4.82  102.15   4.4                        58
5 19-FEB-2022 04:17:25   0.18  123.76   4.4                       118
6 19-FEB-2022 03:32:14  37.34   71.96   4.2                       194
  \n                      LOCATION   \n                           (Shows interactive map)     IRIS ID  (Other info)
1                                                                      TONGA ISLANDS REGION                11530617
2                                                                        LUZON, PHILIPPINES                11530591
3                                                               BONIN ISLANDS, JAPAN REGION                11530578
4                                                               SOUTHERN SUMATRA, INDONESIA                11530561
5                                                             MINAHASSA PENINSULA, SULAWESI                11530467
6                                                          AFGHANISTAN-TAJIKISTAN BORD REG.                11530458

 

 

> names(eq) <- c('DATE', 'LAT', 'LON', 'MAG', 'DEPTH', 'LOCATION_NAME', 'IRIS_ID')
> eq$loc <- paste(eq$LAT, eq$LON, sep=':')
> head(eq)
                  DATE    LAT     LON MAG DEPTH                    LOCATION_NAME    IRIS_ID            loc
1 19-FEB-2022 14:45:11 -23.72 -175.53 5.1    10             TONGA ISLANDS REGION   11530617 -23.72:-175.53
2 19-FEB-2022 12:16:22  18.51  121.25 4.4    61               LUZON, PHILIPPINES   11530591   18.51:121.25
3 19-FEB-2022 11:14:49  28.25  142.95 5.0    10      BONIN ISLANDS, JAPAN REGION   11530578   28.25:142.95
4 19-FEB-2022 09:32:39  -4.82  102.15 4.4    58      SOUTHERN SUMATRA, INDONESIA   11530561   -4.82:102.15
5 19-FEB-2022 04:17:25   0.18  123.76 4.4   118    MINAHASSA PENINSULA, SULAWESI   11530467    0.18:123.76
6 19-FEB-2022 03:32:14  37.34   71.96 4.2   194 AFGHANISTAN-TAJIKISTAN BORD REG.   11530458    37.34:71.96

> g9 <- gvisGeoChart(eq,'loc', 'DEPTH', 'MAG', options=list(displayMode='Markers', colorAxis="{colors:['purple','red','orange','grey']}",
+                                                           backgroundColor="lightblue"), chartid='EQ')
> plot(g9)

 

 

 

2. 모자이크플롯

 

vcd 패키지와 Titanic 데이터를 활용

 

> install.packages('vcd')
> library(datasets)
> data(Titanic)
> str(Titanic)
 'table' num [1:4, 1:2, 1:2, 1:2] 0 0 35 0 0 0 17 0 118 154 ...
 - attr(*, "dimnames")=List of 4
  ..$ Class   : chr [1:4] "1st" "2nd" "3rd" "Crew"
  ..$ Sex     : chr [1:2] "Male" "Female"
  ..$ Age     : chr [1:2] "Child" "Adult"
  ..$ Survived: chr [1:2] "No" "Yes"

 

mosaic()함수를 사용하면 기본 모자이크 플롯을 그려준다

 

> library(vcd)
Loading required package: grid
> mosaic(Titanic)

 

 

shade=T, legend=T를 추가하여 색상을 부여해서 비율 비교를 확실히 한다

 

> mosaic(Titanic, shade=T, legend=T)

 

 

특정 집단만 색상을 부여할 수 있다

 

> grid.edit("rect:Class=1st,Sex=Male,Age=Adult,Survived=Yes", gp=gpar(fill='red'))

 

여기서 rect:Class=1st,와 sex=Male 사이 띄어쓰기하면 에러남

 

rect~Yes까지 전부 붙여써야한다는 소리

 

TAGS.

Comments