반응형

/*********************************************************************************************************
-- Title : [R3.3] Visualization - ggmap 패키지 활용 및 지도맵 활용
-- Reference : hrd-net
-- Key word : R 패키지 시각화 맵 지도 visualization package map ggmap get_map 이미지 저장 차트 
                  image chart graph 그래프 ggsave get_googlemap geocode
*********************************************************************************************************/

-- Chart

-- R

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# ********************************************
# -- ggmap 패키지
# ********************************************
 
# -- 지도 관련 패키지 설치
library(ggplot2)
install.packages("ggmap")                                       # ‘ggmap’와 ‘ggplot2’(우선 설치) 관련 패키지
library(ggmap)
 
# -- get_googlemap() 함수
#    지도위치정보 가져오기
gc = geocode("seoul, korea", source="google")                   # geolocation API 이용
gc
center = as.numeric(gc)
center                                                          # 위도,경도
 
# -- 지도 정보 생성하기
map = get_googlemap(center = center, language="ko-KR", color = "bw", scale = 2 )
                                                                # bw :  black-and-white - 흰색 바탕에 검은색 글자
                                                                # scale :  1, 2, or 4 (scale = 2 : 1280x1280 pixels) 
 
# -- 지도 이미지 그리기
ggmap(map, extent = 'device')                                   # extent : 지도가 그려질 크기를 지정하는 옵션
                                                                # ("normal", "device", or "panel" (default))
 
# -- markers 데이터프레임 생성 -> round 적용 
df = round(data.frame( x = jitter(rep(-95.3625), amount = .3), 
                       y = jitter(rep(29.7625), amount = .3) ), digits = 2)
 
# -- 지도 위에 markers 적용 
map = get_googlemap('houston', markers = df, scale = 2)
ggmap(map, extent = 'device')
 
 
# --------------------------------------------
# -- get_map() 함수 
# --------------------------------------------
map = get_map(location ="london", zoom=14, maptype='roadmap', scale=2)
 
# -- get_map("중심지역", 확대비율, 지도유형) : ggmap에서 제공하는 함수 
ggmap(map, size=c(600,600), extent='device')
 
map = get_map(location ="seoul", zoom=14, maptype='watercolor', scale=2)
ggmap(map, size=c(600,600), extent='device')
 
# -- zoom 차이
map = get_map(location ="seoul", zoom=14, scale=2)
map = get_map(location ="seoul", zoom=8, scale=2)
ggmap(map, size=c(600,600), extent='device')
 
 
# --------------------------------------------
# 3. 레이어 적용 
# --------------------------------------------
 
# 실습 데이터-서울지역 4년제 대학교 위치 표시
university = read.csv("C:\\RProject\\Rwork\\Part-II\\university.csv",header=T)
university                                                      # 학교명","LAT","LON"
 
# -- 레이어1 : 정적 지도 생성
kor = get_map("seoul", zoom=11, maptype = "watercolor")         # roadmap
                                                                # maptype : roadmap, satellite, terrain, hybrid
 
# -- 레이어2 : 지도위에 포인트
ggmap(kor) + geom_point(data=university, aes(x=LON, y=LAT,color=factor(학교명)),size=3)
kor.map = ggmap(kor)+geom_point(data=university, aes(x=LON, y=LAT,color=factor(학교명)),size=3)
 
# -- 레이어3 : 지도위에 텍스트 추가
kor.map + geom_text(data=university, aes(x=LON+0.01, y=LAT+0.01,label=학교명),size=5)
                                                                # LAT+0.01 : 텍스트 위치(포인트의 0.01 위쪽)
                                                                # geom_text : 텍스트 추가
 
# -- 지도 저장
#    넓이, 폭 적용 파일 저장
ggsave("C:\\RProject\\Rwork\\output\\university1.png",width=10.24,height=7.68)
 
# -- 밀도 적용 파일 저장
ggsave("C:\\RProject\\Rwork\\output\\university2.png",dpi=1000# 9.21 x 7.68 in image
 
 
# --------------------------------------------
# ggmap 패키지 관련 <공간시각화 실습>
# --------------------------------------------
 
# -- 2015년도 06월 기준 대한민국 인구수
pop = read.csv("C:\\RProject\\Rwork\\Part-II\\population201506.csv",header=T)
pop
 
region = pop$지역명   
lon = pop$LON                                                   # 위도
lat = pop$LAT                                                   # 경도
house = pop$세대수
 
# -- 위도,경도,세대수 이용 데이터프레임 생성
df = data.frame(region, lon,lat,house)
df
 
# -- 지도정보 생성
#    map1 = get_map("daegu", zoom=7 ,  maptype='watercolor')
map1 = get_map("daegu", zoom=7 ,  maptype='roadmap')
 
# -- 레이어1: 지도 플로팅
map2 = ggmap(map1)
map2
 
# -- 레이어2 : 포인트 추가
map2 + geom_point(aes(x=lon,y=lat,colour=house,size=house),data=df)
map3 = map2 + geom_point(aes(x=lon,y=lat,colour=house,size=house),data=df)
 
# -- 레이어3 : 텍스트 추가
map3 + geom_text(data=df, aes(x=lon+0.01, y=lat+0.18,label=region),size=3)
 
# -- 크기, 넓이, 폭 적용 파일 저장
ggsave("C:\\RProject\\Rwork\\output\\population201506.png",scale=1,width=10.24,height=7.68)
 
 
# ********************************************
# -- 다양한 지도 유형
# ********************************************
 
# -- maptype='terrain'
map1 = get_map("daegu", zoom=7 ,  maptype='terrain')
map2 = ggmap(map1)
map3 = map2 + geom_point(aes(x=lon,y=lat,colour=house,size=house),data=df)
map3 + geom_text(data=df, aes(x=lon+0.01, y=lat+0.18,label=region),size=3)
 
# -- maptype='satellite'
map1 = get_map("daegu", zoom=7 ,  maptype='satellite')
map2 = ggmap(map1)
map3 = map2 + geom_point(aes(x=lon,y=lat,colour=house,size=house),data=df)
map3 + geom_text(data=df, aes(x=lon+0.01,y=lat+0.18,colour=region,label=region),size=3)
 
# -- maptype='roadmap'
map1 = get_map("daegu", zoom=7 ,  maptype='roadmap')
map2 = ggmap(map1)
map3 = map2 + geom_point(aes(x=lon,y=lat,colour=house,size=house),data=df)
map3 + geom_text(data=df, aes(x=lon+0.01, y=lat+0.18,label=region),size=3)
 
# -- maptype='hybrid'
map1 = get_map("jeonju", zoom=7,  maptype='hybrid')
map2 = ggmap(map1)
map3 = map2 + geom_point(aes(x=lon,y=lat,colour=house,size=house),data=df)
map3 + geom_text(data=df, aes(x=lon+0.01, y=lat+0.18,label=region),size=3)
map3 + geom_density2d()                                         # 밀도레이어 그래프 추가(geom_density2d)
 
 

cs


-- Files

university.csv

population201506.csv



반응형

+ Recent posts