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까지 전부 붙여써야한다는 소리

728x90
'Visualization' 카테고리의 다른 글
matplotlib 기본 간단하게 (0) | 2024.01.03 |
---|---|
데이터분석 전문가(ADP)를 위한 shiny를 활용한 R프로그래밍 시각화 (0) | 2022.02.21 |
데이터분석 전문가(ADP)를 위한 R프로그래밍 시각화편3 (0) | 2022.02.19 |
데이터분석 전문가(ADP)를 위한 R프로그래밍 시각화편2 (0) | 2022.02.19 |
데이터분석 전문가(ADP)를 위한 R프로그래밍 시각화편1 (0) | 2022.02.17 |