Подтвердить что ты не робот

Лучшее использование R и SQL, если оно ограничено локальной машиной

Я пытаюсь улучшить свой рабочий процесс, и я надеюсь, что сообщество сможет предоставить информацию, поскольку я относительно новичок в "больших данных".

Обычно я загружаю несколько фреймов данных из общедоступных источников, которые могут быть связаны друг с другом. После выполнения нескольких кадров данных я делаю различные шаги обработки данных (например, фильтрацию, сортировку, агрегирование, пользовательские вычисления) перед выполнением регрессионного анализа и/или других выводных статистических данных по моему окончательному набору данных.

В частности, какую стратегию вы бы порекомендовали:

  • Загрузка всех данных в виде отдельных файлов из Интернета на локальный компьютер, а затем использование R для его обработки непосредственно (как я делал). Потенциальная проблема, которую я вижу в этом, заключается в том, что все работает в рабочей среде Rs, что может замедлить процесс и сбой моей машины.

или

  1. Загрузка всех данных в виде отдельных файлов из Интернета на локальный компьютер, создание базы данных с sqldf на локальном компьютере и использование последующих запросов с помощью sqldf для вытягивания и агрегирования информации из этой базы данных до делая окончательный анализ данных в R. Потенциальная проблема, которую я вижу в этом, заключается в том, что база данных, состоящая из нескольких таблиц/данных, созданных на моей локальной машине с sqldf, больше по размеру, чем просто сохранение нескольких отдельных CSV файлов.

Мне очень знакомы статистические методы, но я, по общему признанию, имею несколько пробелов в знаниях, когда дело касается управления базами данных и операций с сервером. Я знаком с гайками и болтами SQL, как языком, и я знаю, как использовать sqldf с файлами данных, работающими в рабочей среде R. Тем не менее, я, откровенно говоря, не знаю, какую выгоду вы предлагаете, просто изучая, как использовать базовые функции R для фильтрации, сортировки и агрегирования данных. Кроме того, я прочитал несколько веб-страниц об ажиотаже спаривания SQL Server с R, но Im unsure, если это хороший вариант для меня, так как я запускаю все локально.

Какие-нибудь советы для этого новичка о том, как улучшить обработку и аналитику данных путем объединения R с некоторой реализацией SQL?

Заранее благодарю вас!

4b9b3361

Ответ 1

Учитывая, что вы ищете "лучшие методы работы", существует высокая премия, которая должна быть размещена как на воспроизводимости, так и на прозрачности. Поскольку ваша цель - анализ данных, а не сбор данных или управление базами данных, нет оснований для создания собственных баз данных, и пользовательская база данных, скорее всего, сделает ваш рабочий процесс и анализ менее прозрачным. Короче говоря, если вам не нужно создавать базу данных, не делайте этого.

Похоже, ваш рабочий процесс выглядит следующим образом:

  • Загрузка данных из общедоступных источников (в идеале .csv или аналогично хороший формат)
  • Очистить и обработать данные
  • Провести анализ по (потенциально связанным) очищенным данным

Я бы рекомендовал разделить рабочий процесс на два разных этапа:

1. Загрузка и очистка данных

Если ваши файлы - все .csv(или другие файлы с регулярным ограничением), вам просто нужен пакет data.table для этого шага. Вы можете написать один R script для загрузки, очистки и сохранения необходимых данных. Ниже приведен минимальный пример:

# Download data
library(data.table)
salary_data <- fread('https://data.phila.gov/api/views/25gh-t2gp/rows.csv')

# Clean data (only looking at City Council salaries)
cleaned_data <- salary_data[Department == 'CITY COUNCIL']

# Saving cleaned data
save(cleaned_data, file = 'my_file_name.rda', compress = TRUE)

В идеале вам нужно будет только один раз запустить этот файл, чтобы создать набор данных, на котором вы фактически выполняете свой статистический анализ. Если вы решите очистить или обработать свои данные по-другому, просто перейдите к этому файлу, внесите соответствующие изменения и повторите попытку. Я бы рекомендовал иметь один script для каждого загружаемого файла, чтобы было легко увидеть, как вы обрабатываете необработанные данные прямо из источника (прозрачность). Просто наличие этого файла удовлетворяет воспроизводимости.

2. Статистический анализ

Если вам нужно объединить ваши наборы данных, data.table обеспечивает быстрый и прозрачный способ сделать это. Просто загрузите очищенные отдельные наборы данных, определите ключ, который вы будете использовать для их слияния, а затем объедините их. Затем запустите свой анализ в объединенном наборе данных. Ниже приведен пример этой функции:

# dt1 has salary information for 10 people and dt2 
# has the number of kids for the same 10 people
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)

# Loading and merging data
load(file = 'dt1.rda')
load(file = 'dt2.rda')
setkey(dt1, id)
setkey(dt2, id)
merged_dt <- merge(dt1, dt2)

# Doing regression analysis on merged data
reg <- lm(salary ~ kids, data = merged_dt)

Это делает процедуру слияния и последующий анализ прозрачной и воспроизводимой.

Резюме

Эта процедура гарантирует, что ваши источники данных, очистка/обработка данных и анализ хорошо документированы, прозрачны и воспроизводимы. Кроме того, эта процедура масштабируется с вашего компьютера. Если вам не нужно создавать базу данных, не делайте этого.

Что делать, если данные слишком большие для моего компьютера? Если вам нужно больше места, просто запустите код, который вы уже написали на выделенном сервере или машине Amazon Web Services.

Что делать, если данные слишком велики для выделенного сервера? Скорее всего, данные хранятся в реальной базе данных, и единственная часть рабочего процесса, которая изменяется, - это загрузка ваших данных и (потенциально) некоторые обработки будет SQL-запрос к базе данных (скорее всего, с помощью пакета DBI, который запускает SQL-запросы в R), который затем должен быть достаточно малым для запуска локально или на выделенном сервере.

Что делать, если мои данные слишком велики для этого?. Вам, вероятно, следует изучить более тяжелые большие языки данных, такие как Hadoop.

Дополнительная заметка: Если ваши данные не находятся в стандартном формате (например, файл Excel, SAS или Stata), я бы рекомендовал использовать функцию download_file() в сочетании с tidyverse (который имеет фантастическую способность читать эти менее приятные, но распространенные файлы)

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')

Затем сделайте очистку как обычно.

Ответ 2

Прежде всего. sqldf не является базой данных, это пакет, который позволяет вам манипулировать объектом data.frame в синтаксисе SQL. Ну, точнее, он использует SQLite в фоновом режиме, но вы не должны рассматривать пакет sqldf как базу данных.

sqldf - хороший и удобный пакет. В некоторых случаях это может быть эффективным, но эффективность не является его основной целью. Я рекомендую вам рассмотреть пакет data.table. Он рассчитан на эффективность, и производительность может удивить вас.

Первый и главный совет по выбору стратегии выглядит следующим образом: Уважайте торговый фактор! Развертывание фактической базы данных SQL с помощью R может дать вам огромное преимущество, но это создает значительные накладные расходы в процессе разработки. Все зависит от объема проекта. Нет общих правил, но я могу попытаться указать некоторые эмпирические правила.

  • По умолчанию я стараюсь избегать использования базы данных SQL, если только я не сталкиваюсь с конкретными аргументами проекта для SQL.

  • Если шея бутылки - ОЗУ, а R - только для агрегированных данных, то вы должны действительно рассмотреть возможность использования базы данных SQL. Например, MySQL позаботится о подкачке, кешировании и многопоточности - это могут быть важные аргументы.

  • Если структура данных разных источников имеет существенные отличия, то использование SQL добавит дополнительные накладные расходы, потому что вам придется управлять им в R и SQL - постарайтесь избежать этого. С другой стороны, если есть много источников с одинаковой структурой данных, то база данных даст вам хорошее улучшение.

  • Если вам нужны только исходные данные, тогда работа с файлами в порядке. Но если вам нужно многократно запускать его и сохранять все выходы, изменения, версии и т.д., Тогда база данных становится необходимостью.

Это просто мое скромное мнение.

Ответ 3

Это очень зависит от инфраструктуры вашей среды, но в мире "больших данных" я бы рекомендовал использовать оба, потому что у каждого есть преимущества, которые трудно отказаться.

Большинство действий по очистке данных и манипуляциям могут выполняться на обеих платформах как за счет производительности, так и за счет ресурсов.

In-Memory: R в основном находится в ОЗУ. Это намного быстрее, но не всегда необходимо. Если у вас есть 100-гигабайтный набор данных, загружающий его в ОЗУ, это было бы неосуществимо. В большинстве баз данных уже введены таблицы памяти, поэтому, если есть конкретные таблицы, для которых требуется быстрый доступ, вы всегда можете их загрузить в ОЗУ.

Индексы и разделы: Его гораздо проще запросить данные, которые были эффективно проиндексированы и разбиты на разделы в базе данных, чем на файлы CSV. Большинство поисковых анализов делается на разделах или кластерах данных, и это дает огромный компромисс производительности.

Загрузка и сохранение: В R очень легко написать script для загрузки данных и их загрузки в базу данных. В базе данных данные могут легче сохраняться для быстрого доступа, а также эффективно сжиматься для повышения производительности и масштабируемости.

Таблица Просмотров: Существует множество наборов данных или базовых манипуляций с наборами данных, которые вы хотите сохранить для последующего использования. В базе данных вы можете использовать представления таблиц, которые могут объединяться и обрабатывать данные через любое количество таблиц. Чтобы получить тот же результат в R, вам придется загружать все соответствующие таблицы и выполнять слияния и манипуляции каждый раз, когда вы хотите получить доступ к тем же данным.

Анализ: Это то, ради чего был построен R. Многие базы данных делают невозможным выполнение даже самого элементарного анализа, и поэтому я бы оставил весь статистический анализ в R.

Я уверен, что есть много других преимуществ/недостатков, которые можно сравнить между R и использованием баз данных. Опять же, если вы работаете над небольшим количеством данных для развлечения, вы можете использовать R полностью. В противном случае используйте оба параметра. Его проще, быстрее и намного удобнее.