Google Earth Engine——使用 R、dplyr 和 ggplot 可视化科罗拉多州丹佛市的每小时交通犯罪数据

举报
此星光明 发表于 2022/04/16 01:44:20 2022/04/16
【摘要】 丹佛市在其开放数据目录中公开保存过去五年的犯罪数据。在本教程中,我们将使用 R 访问和可视化这些数据,这些数据本质上是具有犯罪类型、社区等特征的时空参考点。 首先,我们将加载一些稍后会用到的包。 library(dplyr)library(ggplot2)library(lubridate) 然后,我们需要...

丹佛市在其开放数据目录中公开保存过去五年的犯罪数据。在本教程中,我们将使用 R 访问和可视化这些数据,这些数据本质上是具有犯罪类型、社区等特征的时空参考点。

首先,我们将加载一些稍后会用到的包。


    
  1. library(dplyr)
  2. library(ggplot2)
  3. library(lubridate)

然后,我们需要下载包含原始数据的逗号分隔值文件。


    
  1. data_url <- "https://www.denvergov.org/media/gis/DataCatalog/crime/csv/crime.csv"
  2. d <- read.csv(data_url)

让我们将列名小写,并用str()函数查看数据的结构。


    
  1. names(d) <- tolower(names(d))
  2. str(d)
  3. ## 'data.frame': 479762 obs. of 19 variables:
  4. ## $ incident_id : num 2.02e+09 2.02e+09 2.02e+10 2.02e+10 2.02e+09 ...
  5. ## $ offense_id : num 2.02e+15 2.02e+15 2.02e+16 2.02e+16 2.02e+15 ...
  6. ## $ offense_code : int 2399 5441 2399 2308 5016 1316 5499 5499 7399 1102 ...
  7. ## $ offense_code_extension: int 0 0 1 0 0 0 0 0 2 0 ...
  8. ## $ offense_type_id : chr "theft-other" "traffic-accident" "theft-bicycle" "theft-from-bldg" ...
  9. ## $ offense_category_id : chr "larceny" "traffic-accident" "larceny" "larceny" ...
  10. ## $ first_occurrence_date : chr "12/27/2018 3:58:00 PM" "11/13/2015 7:45:00 AM" "6/8/2017 1:15:00 PM" "12/7/2019 1:07:00 PM" ...
  11. ## $ last_occurrence_date : chr "" "" "6/8/2017 5:15:00 PM" "12/7/2019 6:30:00 PM" ...
  12. ## $ reported_date : chr "12/27/2018 4:51:00 PM" "11/13/2015 8:38:00 AM" "6/12/2017 8:44:00 AM" "12/9/2019 1:35:00 PM" ...
  13. ## $ incident_address : chr "2681 N HANOVER CT" "4100 BLOCK W COLFAX AVE" "1705 17TH ST" "1350 N IRVING ST" ...
  14. ## $ geo_x : int 3178210 3129148 3140790 3132400 3188580 3142086 3152605 3148176 3143312 NA ...
  15. ## $ geo_y : int 1700715 1694748 1699792 1694088 1716158 1699093 1710822 1694866 1690483 NA ...
  16. ## $ geo_lon : num -105 -105 -105 -105 -105 ...
  17. ## $ geo_lat : num 39.8 39.7 39.8 39.7 39.8 ...
  18. ## $ district_id : int 5 1 6 1 5 6 2 6 1 6 ...
  19. ## $ precinct_id : int 512 122 612 122 521 612 212 623 123 611 ...
  20. ## $ neighborhood_id : chr "stapleton" "west-colfax" "union-station" "west-colfax" ...
  21. ## $ is_crime : int 1 0 1 1 1 1 1 1 1 1 ...
  22. ## $ is_traffic : int 0 1 0 0 0 0 0 0 0 0 ...

下面的代码使用该dplyr包对数据进行子集化以仅包括交通事故犯罪 ( filter(...)),并解析日期/时间列,以便我们可以提取诸如小时-分钟(以评估一天中的模式)、当天周(例如,1 = 星期日,2 = 星期一,...)和年(一年中的哪一天?),使用mutate()函数为这些变量创建新列。


    
  1. accidents <- d %>%
  2. filter(offense_type_id == "traffic-accident") %>%
  3. mutate(datetime = mdy_hms(first_occurrence_date, tz = "MST"),
  4. hr = hour(datetime),
  5. dow = wday(datetime),
  6. yday = yday(datetime))

最后,我们将按小时和星期几对数据进行分组,对于这两个数量的每种组合,计算交通事故犯罪的数量。然后我们将创建一个新变量day,它是数字dow列 (1, 2, ...)的字符表示形式 (Sunday, Monday , ...)。我们还将创建一个新变量offense_type,它是该offense-type-id列的更易于阅读的版本。使用 ggplot,我们将为一周中的每一天创建一个带有颜色的密度图。此工作流用于dplyr处理我们的数据,然后将结果通过管道传输到ggplot2,以便我们在全局环境中仅创建一个对象p,即我们的绘图。


    
  1. p <- accidents %>%
  2. count(hr, dow, yday, offense_type_id) %>%
  3. # the call to mutate() makes new variables with better names
  4. mutate(day = factor(c("Sunday", "Monday", "Tuesday",
  5. "Wednesday", "Thursday", "Friday",
  6. "Saturday")[dow],
  7. levels = c("Monday", "Tuesday",
  8. "Wednesday", "Thursday", "Friday",
  9. "Saturday", "Sunday")),
  10. offense_type = ifelse(
  11. offense_type_id == "traffic-accident-hit-and-run",
  12. "Hit and run",
  13. ifelse(
  14. offense_type_id == "traffic-accident-dui-duid",
  15. "Driving under the influence", "Traffic accident"))) %>%
  16. ggplot(aes(x = hr,
  17. fill = day,
  18. color = day)) +
  19. geom_freqpoly(binwidth = 1) + # 60 sec/min * 60 min
  20. scale_color_discrete("Day of week") +
  21. xlab("Time of day (hour)") +
  22. ylab("Frequency") +
  23. ggtitle("Traffic crimes in Denver, Colorado")
  24. p

科罗拉多州丹佛每小时的交通事故数据

文章来源: blog.csdn.net,作者:此星光明2021年博客之星云计算Top3,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_31988139/article/details/120538160

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。