鉴于您正在寻找“工作流程最佳实践”,对于
可重复性和
透明度应给予高度重视。由于您的目标是数据分析而不是数据收集或数据库管理,因此没有充分的理由创建您自己的数据库,自定义数据库可能会使您的工作流程和分析更加不透明。简而言之,如果您不需要构建数据库,请勿这样做。
听起来您的工作流程如下:
1. 从公共来源下载数据(最好是.csv或类似的格式)
2. 清理和处理数据
3. 对(可能链接的)已清洁的数据运行分析
我建议将您的工作流程划分为两个不同的步骤:
1. 下载和清理数据
如果您的文件都是 .csv(或其他常规分隔符文件),则只需要使用
data.table
包即可完成此步骤。您可以编写单个R脚本来下载、清理和保存所需的数据。以下是一个最小示例:
library(data.table)
salary_data <- fread('https://data.phila.gov/api/views/25gh-t2gp/rows.csv')
cleaned_data <- salary_data[Department == 'CITY COUNCIL']
save(cleaned_data, file = 'my_file_name.rda', compress = TRUE)
理想情况下,您只需要运行一次该文件即可生成您实际执行统计分析的数据集。如果您决定以不同的方式清洗或处理数据,请返回此文件,进行适当的更改并重新运行它。建议为每个要下载的文件编写一个脚本,以便轻松查看从源头直接处理原始数据的方式(
透明性)。仅拥有此文件即可满足
可重复性。
2. 统计分析
如果您需要合并数据集,
data.table
提供了一种快速而透明的方法。只需加载已清理的各个数据集,确定要用于合并它们的键,然后将它们合并。然后在合并的数据集上运行您的分析。以下是此功能的示例:
library(data.table)
dt1 <- data.table(id = 1:10, salary = sample(0:100000, 10)
dt2 <- data.table(id = 1:10, kids = sample(0:5, 10)
save(dt1, file = 'dt1.rda', compress = TRUE)
save(dt2, file = 'dt2.rda', compress = TRUE)
load(file = 'dt1.rda')
load(file = 'dt2.rda')
setkey(dt1, id)
setkey(dt2, id)
merged_dt <- merge(dt1, dt2)
reg <- lm(salary ~ kids, data = merged_dt)
这使得合并过程和后续分析变得透明和可重复。
总结
该过程确保您的数据源、数据清理/处理和分析有良好的文档记录,透明且可重复。此外,该过程可以随着计算机而扩展。如果您不需要构建数据库,则不要构建。
如果数据对我的计算机来说太大怎么办?如果需要更多空间,只需在专用服务器或亚马逊 Web 服务机器上运行已经编写的代码。
如果数据对专用服务器来说太大怎么办?很可能数据存储在实际数据库中,工作流程中唯一更改的部分是数据下载和(可能)部分处理将成为 SQL 查询到数据库(最可能使用运行 R 中的 SQL 查询的 DBI
包),然后应该足够小以在本地或专用服务器上运行。
如果我的数据太大怎么办?您可能应该考虑更重型的大数据语言,如 Hadoop。
补充说明:如果您的数据不是常规分隔格式(如 Excel、SAS 或 Stata 文件),那么我建议使用tidyverse
包中的download_file()
函数(具有读取这些不太愉快但常见文件的出色功能)。
library(tidyverse)
taxi_data_excel <- download.file(url = 'http://www.nyc.gov/html/tlc/downloads/excel/current_medallion_drivers.xls', destfile = 'taxi_data_excel.xls')
taxi_data <- read_excel('taxi_data_excel.xls')
然后像往常一样进行清洁。
sqldf
,否则请不要使用它:当你有SQL
经验时,强大的data.table
相当简单易学,并提供了更多可能性。将数据表写入文件是一个非常灵活和高效的替代方法。 - Jealie