Прототип - это самое важное при работе с большими данными.Разумно разбейте его на части, чтобы вы могли загрузить его в память для доступа к нему с помощью интерпретатора - например, Python, R. Это лучший способ создания и уточнения потока аналитического процесса в масштабе.
Другими словамиОбрежьте ваши файлы данных размером в несколько ГБ, чтобы они были достаточно малы для выполнения аналитики командной строки .
Вот рабочий процесс, который я использую для этого - конечно, не лучший способсделать это, но это один из способов, и он работает:
I. Использование отложенная загрузка методы (надеюсь) доступны в вашемЯзык, выбранный для чтения в больших файлах данных, особенно тех, которые превышают около 1 ГБ.Затем я бы порекомендовал обработать этот поток данных в соответствии с методами, которые я расскажу ниже, а затем, наконец, сохранить эти полностью предварительно обработанные данные в Data Mart или промежуточном промежуточном контейнере.
Один пример использования Python для lazyзагрузить большой файл данных :
# 'filename' is the full path name for a data file whose size
# exceeds the memory on the box it resides. #
import tokenize
data_reader = open(some_filename, 'r')
tokens = tokenize.generate_tokens(reader)
tokens.next() # returns a single line from the large data file.
II. Отбеливание и перерисовка :
Пересчет ваших столбцов с категориальными переменными (например, мужчина / женщина) какцелые числа (например, -1, 1).Сохраните справочную таблицу (тот же хеш, который вы использовали для этого преобразования, за исключением того, что ключи и значения поменялись местами), чтобы преобразовать эти целые числа обратно в удобочитаемые строковые метки в качестве последнего шага в вашем аналитическом рабочем процессе;
отбелите ваши данные, т. Е. «Нормализуйте» столбцы, которые содержат непрерывные данные.Оба эти шага существенно уменьшат размер вашего набора данных - без какого-либо шума.Побочным эффектом отбеливания является предотвращение ошибки аналитики, вызванной чрезмерным взвешиванием.
III. Выборка: обрежьте данные по длине .
IV * * тысяча пятьдесят-одна. Уменьшение размеров : ортогональный аналог для выборки.Определите переменные (столбцы / поля / функции), которые не оказывают или не оказывают минимального влияния на зависимую переменную (иначе говоря, «результаты» или переменная ответа), и удалите их из своего куба рабочих данных.
Анализ главных компонентов (PCA) - это простой и надежный метод для этого:
import numpy as NP
from scipy import linalg as LA
D = NP.random.randn(8, 5) # a simulated data set
# calculate the covariance matrix: #
R = NP.corrcoef(D, rowvar=1)
# calculate the eigenvalues of the covariance matrix: #
eigval, eigvec = NP.eig(R)
# sort them in descending order: #
egval = NP.sort(egval)[::-1]
# make a value-proportion table #
cs = NP.cumsum(egval)/NP.sum(egval)
print("{0}\t{1}".format('eigenvalue', 'var proportion'))
for i in range(len(egval)) :
print("{0:.2f}\t\t{1:.2f}".format(egval[i], cs[i]))
eigenvalue var proportion
2.22 0.44
1.81 0.81
0.67 0.94
0.23 0.99
0.06 1.00
Итак, как вы видите, первые три собственных значения составляют 94% дисперсии наблюдается в исходных данных.В зависимости от вашей цели вы часто можете обрезать исходную матрицу данных D, удалив последние два столбца:
D = D[:,:-2]
V. Data Mart Storage : вставьте слой между вашим постоянным хранилищем (Data Warehouse) и вашим процессом аналитики .Другими словами, в значительной степени полагайтесь на витрины данных / кубы данных - «промежуточную область», которая находится между вашим хранилищем данных и уровнем аналитических приложений.Эта витрина данных - намного лучший уровень ввода-вывода для ваших аналитических приложений.«Фрейм данных» R или «таблица данных» (из одноименного пакета CRAN) являются хорошими кандидатами.Я также настоятельно рекомендую redis - быстрое чтение, краткая семантика и нулевая конфигурация, что делает его отличным выбором для этого варианта использования.Redis легко справится с наборами данных того размера, который вы указали в своем вопросе.Например, используя структуру хэш-данных в Redis, вы можете иметь ту же структуру и ту же гибкость в отношении отношений, что и MySQL или SQLite, без утомительной настройки.Еще одно преимущество: в отличие от SQLite, redis фактически является базой данных server .На самом деле я большой поклонник SQLite, но я считаю, что redis здесь работает лучше по причинам, которые я только что привел.
from redis import Redis
r0 = Redis(db=0)
r0.hmset(user_id : "100143321, {sex : 'M', status : 'registered_user',
traffic_source : 'affiliate', page_views_per_session : 17,
total_purchases : 28.15})