使用R和ggmap创建的地图图
它是data.gov开放数据项目的一部分。结果确实很整洁,但这让我思考-我们在数据集中具有经度和纬度,那么为什么不创建一些地理图呢?
你们都知道我很喜欢漂亮的数据可视化,而且我只知道这样做的包装:GGMAP!ggmap软件包扩展了令人惊奇的ggplot核心功能,以实现空间和地理可视化。
让我们开始吧!
1)设置R
2)安装和加载软件包
R程序包包含可用于执行分析的R数据功能和代码的组合。我们需要在您的环境中安装和加载它们,以便以后可以调用它们。
#安装相关的库-一次执行
install.packages(“ lubridate”)
install.packages(“ ggplot2”)
install.packages(“ ggmap”)
install.packages(“ data.table”)
install.packages(“ ggrepel”)
install.packages(“ dplyr”)
#加载相关的库-每次执行一次
库(润滑)
库(ggplot2)
库(ggmap)
图书馆(dplyr)
库(data.table)
图书馆(ggrepel)
3)加载数据文件并分配变量
而不是从data.gov网站加载该数据集的权利, 我已经决定要预先下载和采样数据为你所有。基于地图的图形可能需要一段时间才能呈现,并且我们不想将此问题与大量数据组合在一起。可以按以下步骤A加载生成的数据集。
在步骤B中,我找到了一个网站,概述了他们对西雅图最危险的城市的看法。我认为将这些数据放在实际的911元数据之上以测试这些社区实际看到多少危险犯罪会很有趣。
#A)下载主要犯罪事件数据集
事件= fread('https://raw.githubusercontent.com/lgellis/MiscTutorial/master/ggmap/i2Sample.csv'
#B)按照以下方式下载西雅图最危险的城市的额外数据集:
#https ://housely.com/dangerous-neighborhoods-seattle/
n <-fread('https://raw.githubusercontent.com/lgellis/MiscTutorial/master/ggmap/n.csv',stringsAsFactors = FALSE)
#创建一些颜色变量供以后绘制图形
col1 =“#011f4b”
col2 =“#6497b1”
col3 =“#b3cde0”
col4 =“#CC0000”
4)转换变量
我们将进行一些快速的转换以计算年份,然后将年份的子集细分为2017年和2018年。然后,我们将筛选出所有缺少数据的行。最后,我们创建了一个展示标签,用于在房屋网站评论中标记危险街区时使用。
#将年份添加到事件数据框中
事件$ ymd <-mdy_hms(Event.Clearance.Date)
事件$ year <-年(incidents $ ymd)
#仅使用2017年和2018年数据创建更易管理的数据框架
i2 <-events [year> = 2017&year <= 2018,]
#仅包括完整的案例
i2 [complete.cases(i2),]
#为n个数据框(危险邻域)创建显示标签
n $ label <-paste(排名,位置,sep =“-”)
5)开始制作地图!
贴图1:按组对事件发生进行颜色编码
在此地图中,我们仅创建了名为p的ggmap对象,其中包含西雅图的Google地图。然后,我们添加一个经典的ggplot图层(geom_point),以绘制i2数据集中的所有行。
## 1)创建一个绘制了所有犯罪地点的地图。
p <-ggmap(get_googlemap(center = c(lon = -122.335167,lat = 47.608013),
缩放= 11,比例= 2,
maptype ='terrain',
颜色='颜色'))
p + geom_point(aes(x =经度,y =纬度,颜色= Initial.Type.Group),数据= i2,大小= 0.5)+
主题(legend.position =“ bottom”)
贴图2:使用一种具有透明度的颜色发生的事件
在最后一张地图中,看到事件的密度有点棘手,因为所有图形化的点都彼此重叠。在这种情况下,我们将使数据全部变为一种颜色,并将设置alpha变量,该变量将使点透明。这有助于显示绘制的点的密度。
还要注意,我们可以重复使用第一步“ p”中创建的基础地图来绘制新地图。
## 2)通过使用alpha使点透明来处理大量人口。
p + geom_point(aes(x =经度,y =纬度),颜色= col1,数据= i2,alpha = 0.25,大小= 0.5)+
主题(legend.position =“ none”)
题库