R语言大数据分析纽约市的311万条投诉统计可视化与时间序列分析

news2024/11/20 20:33:29

介绍

本文并不表示R在数据分析方面比Python更好或更快速,我本人每天都使用两种语言。这篇文章只是提供了比较这两种语言的机会。

本文中的  数据  每天都会更新,我的文件版本更大,为4.63 GB。


CSV文件包含纽约市的311条投诉。它是纽约市开放数据门户网站中最受欢迎的数据集。

数据工作流程

install.packages("devtools")
library("devtools")
install_github("ropensci/plotly")
library(plotly)

需要创建一个帐户以连接到plotly API。或者,可以只使用默认的ggplot2图形。

set_credentials_file("DemoAccount", "lr1c37zw81") ## Replace contents with your API Key

使用dplyr在R中进行分析

假设已安装sqlite3(因此可通过终端访问)。

$ sqlite3 data.db # Create your database
$.databases       # Show databases to make sure it works
$.mode csv        
$.import <filename> <tablename>
# Where filename is the name of the csv & tablename is the name of the new database table
$.quit 

将数据加载到内存中。

library(readr)
# data.table, selecting a subset of columns
time_data.table <- system.time(fread('/users/ryankelly/NYC_data.csv', 
                   select = c('Agency', 'Created Date','Closed Date', 'Complaint Type', 'Descriptor', 'City'), 
                   showProgress = T))
kable(data.frame(rbind(time_data.table, time_data.table_full, time_readr)))
user.selfsys.selfelapseduser.childsys.child
time_data.table63.5881.95265.63300
time_data.table_full205.5713.124208.88000
time_readr277.7205.018283.02900

我将使用data.table读取数据。该 fread 函数大大提高了读取速度。

关于dplyr

默认情况下,dplyr查询只会从数据库中提取前10行。

library(dplyr)      ## Will be used for pandas replacement

# Connect to the database
db <- src_sqlite('/users/ryankelly/data.db')
db

数据处理的两个最佳选择(除了R之外)是:

  • 数据表
  • dplyr

预览数据

# Wrapped in a function for display purposes
head_ <- function(x, n = 5) kable(head(x, n))

head_(data)
AgencyCreatedDateClosedDateComplaintTypeDescriptorCity
NYPD04/11/2015 02:13:04 AMNoise - Street/SidewalkLoud Music/PartyBROOKLYN
DFTA04/11/2015 02:12:05 AMSenior Center ComplaintN/AELMHURST
NYPD04/11/2015 02:11:46 AMNoise - CommercialLoud Music/PartyJAMAICA
NYPD04/11/2015 02:11:02 AMNoise - Street/SidewalkLoud TalkingBROOKLYN
NYPD04/11/2015 02:10:45 AMNoise - Street/SidewalkLoud Music/PartyNEW YORK

选择几列

ComplaintTypeDescriptorAgency
Noise - Street/SidewalkLoud Music/PartyNYPD
Senior Center ComplaintN/ADFTA
Noise - CommercialLoud Music/PartyNYPD
Noise - Street/SidewalkLoud TalkingNYPD
Noise - Street/SidewalkLoud Music/PartyNYPD

ComplaintTypeDescriptorAgency
Noise - Street/SidewalkLoud Music/PartyNYPD
Senior Center ComplaintN/ADFTA
Noise - CommercialLoud Music/PartyNYPD
Noise - Street/SidewalkLoud TalkingNYPD
Noise - Street/SidewalkLoud Music/PartyNYPD
Noise - Street/SidewalkLoud TalkingNYPD
Noise - CommercialLoud Music/PartyNYPD
HPD Literature RequestThe ABCs of Housing - SpanishHPD
Noise - Street/SidewalkLoud TalkingNYPD
Street ConditionPlate Condition - NoisyDOT

使用WHERE过滤行

ComplaintTypeDescriptorAgency
Noise - Street/SidewalkLoud Music/PartyNYPD
Noise - CommercialLoud Music/PartyNYPD
Noise - Street/SidewalkLoud TalkingNYPD
Noise - Street/SidewalkLoud Music/PartyNYPD
Noise - Street/SidewalkLoud TalkingNYPD

使用WHERE和IN过滤列中的多个值

ComplaintTypeDescriptorAgency
Noise - Street/SidewalkLoud Music/PartyNYPD
Noise - CommercialLoud Music/PartyNYPD
Noise - Street/SidewalkLoud TalkingNYPD
Noise - Street/SidewalkLoud Music/PartyNYPD
Noise - Street/SidewalkLoud TalkingNYPD

在DISTINCT列中查找唯一值

##       City
## 1 BROOKLYN
## 2 ELMHURST
## 3  JAMAICA
## 4 NEW YORK
## 5         
## 6  BAYSIDE

使用COUNT(*)和GROUP BY查询值计数

# dt[, .(No.Complaints = .N), Agency]
#setkey(dt, No.Complaints) # setkey index's the data

q <- data %>% select(Agency) %>% group_by(Agency) %>% summarise(No.Complaints = n())
head_(q)
AgencyNo.Complaints
3-1-122499
ACS3
AJC7
ART3
CAU8

使用ORDER和-排序结果

 

 

数据库中有多少个城市?

# dt[, unique(City)]

q <- data %>% select(City) %>% distinct() %>% summarise(Number.of.Cities = n())
head(q)
##   Number.of.Cities
## 1             1818

让我们来绘制10个最受关注的城市

CityNo.Complaints
BROOKLYN2671085
NEW YORK1692514
BRONX1624292
766378
STATEN ISLAND437395
JAMAICA147133
FLUSHING117669
ASTORIA90570
Jamaica67083
RIDGEWOOD66411

  • 用  UPPER 转换CITY格式。
CITYNo.Complaints
BROOKLYN2671085
NEW YORK1692514
BRONX1624292
766378
STATEN ISLAND437395
JAMAICA147133
FLUSHING117669
ASTORIA90570
JAMAICA67083
RIDGEWOOD66411

投诉类型(按城市)


# Plot result
plt <- ggplot(q_f, aes(ComplaintType, No.Complaints, fill = CITY)) + 
            geom_bar(stat = 'identity') + 
            theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))

plt

第2部分时间序列运算

提供的数据不适合SQLite的标准日期格式。

在SQL数据库中创建一个新列,然后使用格式化的date语句重新插入数据 创建一个新表并将格式化日期插入原始列名。

使用时间戳字符串过滤SQLite行:YYYY-MM-DD hh:mm:ss

# dt[CreatedDate < '2014-11-26 23:47:00' & CreatedDate > '2014-09-16 23:45:00', 
#      .(ComplaintType, CreatedDate, City)]

q <- data %>% filter(CreatedDate < "2014-11-26 23:47:00",   CreatedDate > "2014-09-16 23:45:00") %>%
    select(ComplaintType, CreatedDate, City)

head_(q)
ComplaintTypeCreatedDateCity
Noise - Street/Sidewalk2014-11-12 11:59:56BRONX
Taxi Complaint2014-11-12 11:59:40BROOKLYN
Noise - Commercial2014-11-12 11:58:53BROOKLYN
Noise - Commercial2014-11-12 11:58:26NEW YORK
Noise - Street/Sidewalk2014-11-12 11:58:14NEW YORK

使用strftime从时间戳中拉出小时单位

# dt[, hour := strftime('%H', CreatedDate), .(ComplaintType, CreatedDate, City)]

q <- data %>% mutate(hour = strftime('%H', CreatedDate)) %>% 
            select(ComplaintType, CreatedDate, City, hour)

head_(q)

ComplaintTypeCreatedDateCityhour
Noise - Street/Sidewalk2015-11-04 02:13:04BROOKLYN02
Senior Center Complaint2015-11-04 02:12:05ELMHURST02
Noise - Commercial2015-11-04 02:11:46JAMAICA02
Noise - Street/Sidewalk2015-11-04 02:11:02BROOKLYN02
Noise - Street/Sidewalk2015-11-04 02:10:45NEW YORK02

 

汇总时间序列

首先,创建一个时间戳记四舍五入到前15分钟间隔的新列

# Using lubridate::new_period()
# dt[, interval := CreatedDate - new_period(900, 'seconds')][, .(CreatedDate, interval)]

q <- data %>% 
     mutate(interval = sql("datetime((strftime('%s', CreatedDate) / 900) * 900, 'unixepoch')")) %>%                     
     select(CreatedDate, interval)

head_(q, 10)
CreatedDateinterval
2015-11-04 02:13:042015-11-04 02:00:00
2015-11-04 02:12:052015-11-04 02:00:00
2015-11-04 02:11:462015-11-04 02:00:00
2015-11-04 02:11:022015-11-04 02:00:00
2015-11-04 02:10:452015-11-04 02:00:00
2015-11-04 02:09:072015-11-04 02:00:00
2015-11-04 02:05:472015-11-04 02:00:00
2015-11-04 02:03:432015-11-04 02:00:00
2015-11-04 02:03:292015-11-04 02:00:00
2015-11-04 02:02:172015-11-04 02:00:00

绘制2003年的结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 数据库 C/C++ 常用函数

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

火爆出圈的OpenAI模型ChatGPT体验

1、ChatGPT简要介绍 ChatGPT是一种高效的语言模型&#xff0c;全称为"聊天式自动回复生成技术"&#xff08;Chat-based Automatic Reply Generation Technology&#xff09;&#xff0c;用于预测人类语言的后续内容。它是基于OpenAI的GPT-3模型构建的&#xff0c;具…

XCIE-HUAWEI-超级完整的BGP-1

XCIE-HUAWEI-超级完整的BGP-1 声明&#xff0c;内容对比前面的可能差一点&#xff0c;因为这个BGP我是会的&#xff0c;但是华为的特性啥的不太会 所以相对来说可能没那么详细&#xff0c;不过应该也够的了&#xff0c;要看思科的翻我的文章去有思科的 先说一个东西 面试会问…

S7-200SMART实现MODBUS TCP通信(客户端+服务器)的具体方法和步骤示例

S7-200SMART实现MODBUS TCP通信(客户端+服务器)的具体方法和步骤示例 STEP7-Micro/WIN SMART 从V2.4 版本开始,软件中直接集成 Modbus TCP 库指令,安装软件后,Modbus TCP 指令位于 STEP7-Micro/WIN SMART 项目树中“指令”文件夹的“库”文件夹中。 如下图Modbus TCP库指令…

R语言曲线回归:多项式回归、多项式样条回归、非线性回归数据分析

最近我们被客户要求撰写关于曲线回归的研究报告&#xff0c;包括一些图形和统计输出。本文将使用三种方法使模型适合曲线数据&#xff1a;1&#xff09;多项式回归&#xff1b;2&#xff09;用多项式样条进行B样条回归&#xff1b;3&#xff09; 进行非线性回归。在此示例中&am…

微信小程序 | 一比一复刻世界杯点球大战

&#x1f4cc;个人主页&#xff1a;个人主页 ​&#x1f9c0; 推荐专栏&#xff1a;小程序开发成神之路 --【这是一个为想要入门和进阶小程序开发专门开启的精品专栏&#xff01;从个人到商业的全套开发教程&#xff0c;实打实的干货分享&#xff0c;确定不来看看&#xff1f; …

Codeforces Round #837 (Div. 2) Hossam and Friends

原题链接&#xff1a;https://codeforces.com/contest/1771/problem/B 题意 &#xff1a;你总共有n个朋友编号1~n&#xff0c;其中m对互不认识&#xff0c;求1~n区间中没有互不认识的子段的总个数。 思路&#xff1a;总字段个数为每个编号前面的编号个数&#xff08;包括自己…

RK3568平台开发系列讲解(安卓适配篇)Android11 预安装应用功能

&#x1f680;返回专栏总目录 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; &#x1f4e2;Android11 上的应用预安装功能&#xff0c;主要是指配置产品时&#xff0c;需要将提前准备好的第三方应用 apk 放进 android 系统。在实际的研发过程…

【NumPy 数组连接、拆分、搜索、排序】

&#x1f935;‍♂️ 个人主页老虎也淘气 个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f44d;&#x1f3fb; 收藏…

[附源码]Python计算机毕业设计宠物领养系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等…

数学基础从高一开始5、充分必要条件

数学基础从高一开始5、充分必要条件 目录 数学基础从高一开始5、充分必要条件 概念复习 命题 真命题与假命题 命题的形式 概念定义 例1&#xff1a; 例2 练习 总结 概念复习 命题 命题:把用语言、符号或式子表达的&#xff0c;可以判断真假的陈述句称为命题。 真命题…

杨校老师课堂之MySQL数据库面试题【开发工程师面试前必看】

1.说一说三大范式 「第一范式」&#xff1a;数据库中的字段具有「原子性」&#xff0c;不可再分&#xff0c;并且是单一职责 「第二范式」&#xff1a;「建立在第一范式的基础上」&#xff0c;第二范式要求数据库表中的每个实例或行必须「可以被惟一地区分」。为实现区分通常需…

Rasa 基于规则的对话管理: 天气预报机器人

文章目录1. fallbackNLU fallback2. 意图触发动作3. 表单定义表单激活表单执行表单任务4. 天气预报机器人nlu.ymlstories.ymlrules.ymlcities.ymldomain.ymlconfig.ymlendpoints.ymlcredentials.ymlactions.py测试learn from https://github.com/Chinese-NLP-book/rasa_chinese…

Keras深度学习实战(40)——音频生成

Keras深度学习实战&#xff08;40&#xff09;——音频生成0. 前言1. 模型与数据集分析1.1 数据集分析1.2 模型分析2. 音频生成模型2.1 数据集加载与预处理2.2 模型构建与训练小结系列链接0. 前言 我们已经在《文本生成模型》一节中学习了如何利用深度神经网络生成文本&#x…

智能、人机融合智能和深度态势感知

内容摘要&#xff1a;人工智能的符号主义、联结主义和行为主义三大学派&#xff0c;分别从不同角度切入智能的本质&#xff0c;其研究观点相互补充但各有局限。在人机融合过程中&#xff0c;怎样进行人机功能分配&#xff0c;人机怎样融合学习、理解、决策、推理乃至感知。数据…

获取微信公众号token

access_token是公众号的全局唯一接口调用凭据&#xff0c;公众号调用各接口时都需使用access_token 接口调用请求说明 https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appidAPPID&secretAPPSECRET参数说明 参数是否必填说…

牛!单表千万行数据库: LIKE 搜索优化手记

我们可以在 txt 列上建立索引&#xff0c;用于优化该查询&#xff1a; CREATE INDEX tbl_like_txt_idx ON [tbl_like] ( [txt] ) 应用索引后&#xff0c;查询速度大大加快&#xff0c;仅需 5 毫秒&#xff1a; 由此可知&#xff1a;对于左前缀匹配&#xff0c;我们可以通过增…

市政工控典型安全解决方案

汽车制造业 MES系统 DNC系统 生产 安全域1 管理层 工控安全隔离装置 交换机 安全配置核查系统 HMI 历史数据库 运行监控系统 实时数据库 打印机过程 安全域2 监控层 工控漏洞扫描系统 安全交换机 工控安全审计系统 工控入侵检测系统工程师站 A 操作员站 A 实时数据库A 操作员站…

Linux中的文件传输命令(scp、rsync)、Linux之间通过sshkey公钥免密登录

scp测试环境&#xff1a;centos7.7 最小化安装&#xff0c;默认是有scp命令 -r 递归复制整个目录 -p 保留源文件的修改时间、访问时间和权限 -v 详细方式显示输出 -P&#xff08;大写&#xff09;指定port&#xff08;端口&#xff09;输出scp命令使用格式 scp /filename 目…