데이터분석 전문가(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)

 

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

 

제목 없음.jpg

 

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

 

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

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

 

제목 없음.jpg

 

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

 

> 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)

 

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

제목 없음.jpg

 

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

 

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

 

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

 

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

 

제목 없음.jpg

 

 

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

 

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

 

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

제목 없음.jpg

 

 

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

 

지진 데이터가 들어간 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)

 

제목 없음.jpg

 

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

 

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

 

> 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']}"))

 

 

제목 없음.jpg

 

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

 

최근 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)

 

제목 없음.jpg

 

 

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)

 

제목 없음.jpg

 

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

 

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

 

제목 없음.jpg

 

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

 

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

 

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

 

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

 

제목 없음.jpg

728x90