原文链接:http://tecdat.cn/?p=9800

原文出处:拓端数据部落公众号


介绍

本文并不表示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.self sys.self elapsed user.child sys.child
time_data.table 63.588 1.952 65.633 0 0
time_data.table_full 205.571 3.124 208.880 0 0
time_readr 277.720 5.018 283.029 0 0

我将使用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)
Agency CreatedDate ClosedDate ComplaintType Descriptor City
NYPD 04/11/2015 02:13:04 AM Noise - Street/Sidewalk Loud Music/Party BROOKLYN
DFTA 04/11/2015 02:12:05 AM Senior Center Complaint N/A ELMHURST
NYPD 04/11/2015 02:11:46 AM Noise - Commercial Loud Music/Party JAMAICA
NYPD 04/11/2015 02:11:02 AM Noise - Street/Sidewalk Loud Talking BROOKLYN
NYPD 04/11/2015 02:10:45 AM Noise - Street/Sidewalk Loud Music/Party NEW YORK

选择几列

ComplaintType Descriptor Agency
Noise - Street/Sidewalk Loud Music/Party NYPD
Senior Center Complaint N/A DFTA
Noise - Commercial Loud Music/Party NYPD
Noise - Street/Sidewalk Loud Talking NYPD
Noise - Street/Sidewalk Loud Music/Party NYPD
ComplaintType Descriptor Agency
Noise - Street/Sidewalk Loud Music/Party NYPD
Senior Center Complaint N/A DFTA
Noise - Commercial Loud Music/Party NYPD
Noise - Street/Sidewalk Loud Talking NYPD
Noise - Street/Sidewalk Loud Music/Party NYPD
Noise - Street/Sidewalk Loud Talking NYPD
Noise - Commercial Loud Music/Party NYPD
HPD Literature Request The ABCs of Housing - Spanish HPD
Noise - Street/Sidewalk Loud Talking NYPD
Street Condition Plate Condition - Noisy DOT

使用WHERE过滤行

ComplaintType Descriptor Agency
Noise - Street/Sidewalk Loud Music/Party NYPD
Noise - Commercial Loud Music/Party NYPD
Noise - Street/Sidewalk Loud Talking NYPD
Noise - Street/Sidewalk Loud Music/Party NYPD
Noise - Street/Sidewalk Loud Talking NYPD

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

ComplaintType Descriptor Agency
Noise - Street/Sidewalk Loud Music/Party NYPD
Noise - Commercial Loud Music/Party NYPD
Noise - Street/Sidewalk Loud Talking NYPD
Noise - Street/Sidewalk Loud Music/Party NYPD
Noise - Street/Sidewalk Loud Talking NYPD

在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 dataq <- data %>% select(Agency) %>% group_by(Agency) %>% summarise(No.Complaints = n())
head_(q)
Agency No.Complaints
3-1-1 22499
ACS 3
AJC 7
ART 3
CAU 8

使用ORDER和-排序结果

数据库中有多少个城市?

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

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

City No.Complaints
BROOKLYN 2671085
NEW YORK 1692514
BRONX 1624292
766378
STATEN ISLAND 437395
JAMAICA 147133
FLUSHING 117669
ASTORIA 90570
Jamaica 67083
RIDGEWOOD 66411
  • 用  UPPER 转换CITY格式。
CITY No.Complaints
BROOKLYN 2671085
NEW YORK 1692514
BRONX 1624292
766378
STATEN ISLAND 437395
JAMAICA 147133
FLUSHING 117669
ASTORIA 90570
JAMAICA 67083
RIDGEWOOD 66411

投诉类型(按城市)


# 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)
ComplaintType CreatedDate City
Noise - Street/Sidewalk 2014-11-12 11:59:56 BRONX
Taxi Complaint 2014-11-12 11:59:40 BROOKLYN
Noise - Commercial 2014-11-12 11:58:53 BROOKLYN
Noise - Commercial 2014-11-12 11:58:26 NEW YORK
Noise - Street/Sidewalk 2014-11-12 11:58:14 NEW YORK

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

# dt[, hour := strftime('%H', CreatedDate), .(ComplaintType, CreatedDate, City)]q <- data %>% mutate(hour = strftime('%H', CreatedDate)) %>% select(ComplaintType, CreatedDate, City, hour)head_(q)
ComplaintType CreatedDate City hour
Noise - Street/Sidewalk 2015-11-04 02:13:04 BROOKLYN 02
Senior Center Complaint 2015-11-04 02:12:05 ELMHURST 02
Noise - Commercial 2015-11-04 02:11:46 JAMAICA 02
Noise - Street/Sidewalk 2015-11-04 02:11:02 BROOKLYN 02
Noise - Street/Sidewalk 2015-11-04 02:10:45 NEW YORK 02

汇总时间序列

首先,创建一个时间戳记四舍五入到前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)
CreatedDate interval
2015-11-04 02:13:04 2015-11-04 02:00:00
2015-11-04 02:12:05 2015-11-04 02:00:00
2015-11-04 02:11:46 2015-11-04 02:00:00
2015-11-04 02:11:02 2015-11-04 02:00:00
2015-11-04 02:10:45 2015-11-04 02:00:00
2015-11-04 02:09:07 2015-11-04 02:00:00
2015-11-04 02:05:47 2015-11-04 02:00:00
2015-11-04 02:03:43 2015-11-04 02:00:00
2015-11-04 02:03:29 2015-11-04 02:00:00
2015-11-04 02:02:17 2015-11-04 02:00:00

绘制2003年的结果

拓端tecdat|R语言大数据分析纽约市的311万条投诉统计可视化与时间序列分析相关推荐

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

    介绍 本文并不表示R在数据分析方面比Python更好或更快速,我本人每天都使用两种语言.这篇文章只是提供了比较这两种语言的机会. 本文中的  数据  每天都会更新,我的文件版本更大,为4.63 GB. ...

  2. 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

    最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...

  3. 拓端tecdat|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测

    最近我们被客户要求撰写关于LOESS(局部加权回归)的研究报告,包括一些图形和统计输出. 这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法.我们将对一种叫做STL的算法进行研究, ...

  4. 拓端tecdat|R语言线性回归和时间序列分析北京房价影响因素可视化案例

    最近我们被客户要求撰写关于北京房价影响因素的研究报告,包括一些图形和统计输出. 目的 房价有关的数据可能反映了中国近年来的变化: 人们得到更多的资源(薪水),期望有更好的房子 人口众多 独生子女政策: ...

  5. 拓端tecdat|R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系

    最近我们被客户要求撰写关于向量误差修正模型的研究报告,包括一些图形和统计输出. 向量自回归模型估计的先决条件之一是被分析的时间序列是平稳的.但是,经济理论认为,经济变量之间在水平上存在着均衡关系,可以 ...

  6. 在r语言中使用GAM(广义相加模型)进行电力负荷时间序列分析

    广义相加模型(GAM:Generalized Additive Model),它模型公式如下:有p个自变量,其中X1与y是线性关系,其他变量与y是非线性关系,我们可以对每个变量与y拟合不同关系,对X2 ...

  7. 拓端tecdat|bilibili视频流量数据潜望镜

    最近我们被客户要求撰写关于bilibili视频流量的研究报告,包括一些图形和统计输出. 最新研究表明,中国有超过7亿人在观看在线视频内容.Bilibili,被称为哔哩哔哩或简称为B站,是中国大陆第二个 ...

  8. 拓端tecdat荣获2022年度51CTO博主之星

    相信技术,传递价值,这是51CTO每一个技术创作者的动力与信念,2022 年度,拓端tecdat 作为新锐的数据分析咨询公司,在51CTO平台上,不断的输出优质的技术文章,分享前沿创新技术,输出最佳生 ...

  9. 拓端tecdat荣获掘金社区入驻新人奖

    2021年7月,由掘金发起了"入驻成长礼"颁奖活动.本次活动邀请到知名开发者.服务机构代表等业界人士. 据了解,掘金社区"新入驻创作者礼"主要对已经积累了一定历 ...

  10. R语言与数据分析练习:使用ARIMA模型预测网站访问量

    R语言与数据分析练习:使用ARIMA模型预测网站访问量 使用ARIMA模型预测网站访问量 一.实验背景: 随着流量的增大,某网站的数据信息量也在以一定的幅度增长 基于该网站2016年9月~2017年2 ...

最新文章

  1. 用数据分析蔡徐坤1亿转发量幕后推手被封后能否动摇饭圈文化?
  2. shardingjdbc每月分表_shardingjdbc分库分表测试
  3. 转:各种专题图实现的C#源代码
  4. 计算机比赛的评分办法,汉字录入比赛评分规则方案
  5. 如何传date参数_如何使用Python获取指定股票的5/15/30/60分钟线数据?
  6. Oracle入门(十三B)之高级查询(上)
  7. Ubuntu关于apt-get remove与apt-get purge
  8. 3 MM配置-企业结构-定义-定义库存地点
  9. 书屋(一):读《世界是平的》有感
  10. 使用springMVC提供的CommonsMultipartResolver文件解析器,实现文件轻松上传
  11. MSSql使用SQL语句快速查看表对的就说明,及表字段描述及字段类型
  12. MineCraft note
  13. 深度学习与计算机视觉教程(7) | 神经网络训练技巧 (下)(CV通关指南·完结)
  14. 【HAVENT原创】Firebase 相关操作及代码示例
  15. 微信推送封面尺寸_微信公众号文章封面图尺寸应该是多大?
  16. 翻译软件-好用的翻译软件-免费翻译软件大全
  17. 海康威视摄像头断后与8芯网线连接方法
  18. Excel去掉函数错误值#VALUE!的方法
  19. 好消息:部分银行磁条卡更换芯片卡
  20. java与javax的区别

热门文章

  1. ASP.NET+AJAX解决网页打开等待问题
  2. conda环境转移复制和pip包的转移复制以及替换成清华源channels,pip的阿里源
  3. 动手学PyTorch知识点汇总
  4. 欧几里得算法求最大公约数
  5. 领域驱动设计系列文章(2)——浅析VO、DTO、DO、PO的概念、区别和用处
  6. C++--第25课 - 异常处理 - 上
  7. Linux slab分配器【转】
  8. 常见makefile写法
  9. 【总结——HTTP协议】
  10. Dojo学习2 dojo快速安装