Как обрабатывать большие наборы данных
Вы дважды щелкаете файл данных, и Excel вращается, зависает или сообщает, что не может его открыть. Реальные наборы данных часто намного больше, чем может вместить электронная таблица, и каждый новичок упирается в эту стену, когда впервые берет серьезный набор данных. Это руководство о том, что делать дальше. В нем рассказывается, как распознать «большой» набор данных и почему вы перемещаете его в базу данных. Затем он перечисляет несколько реальных причуд, которые сбивают с толку всех на пути.
- Что на самом деле считается «большим»
- Почему база данных здесь лучше электронной таблицы
- Особенность загрузки: она поставляется в заархивированном виде.
- Импорт больших файлов (терпение и дисковое пространство)
- Единственный шаг, который ускоряет большие запросы: индекс
- Сначала пробуйте, затем запускайте все
- Агрегируйте заранее и проверяйте типы данных
Во-первых: что считать «большим»?
Поставьте на нем номер, прежде чем читать список. Сколько строк должно быть в файле, прежде чем электронная таблица перестанет быть подходящим инструментом? Ваша догадка, вероятно, слишком высока, и полезно знать, в каком направлении вы ошиблись.
«Большой» — это не вайб, у него реальные пороги. Набор данных достаточно велик, чтобы использовать это руководство, если любое из следующих условий верно:
- Он имеет более миллиона строк. Excel и Google Таблицы останавливаются на 1 048 576 строк. После этого файл физически не может полностью открыться. Строки, выходящие за пределы лимита, автоматически удаляются.
- Это от сотен мегабайт до нескольких гигабайт на диске.
- Ваша электронная таблица зависает, выходит из строя или сообщает «недостаточно памяти». когда вы пытаетесь его открыть.
Рабочий пример в этом руководстве — реальный: общедоступный набор данных обзоров игр Пар. recommendations.csv, примерно 2 ГБ и 41 миллион строк. Эксель не открывает. База данных справится с этим, не моргнув.
Шаг 1. Переместите данные в базу данных, а не в электронную таблицу.
Самый важный шаг: перестаньте пытаться открыть большие данные в электронной таблице. Вместо этого поместите его в базу данных. SQLite (через бесплатное приложение Браузер БД) не имеет практического ограничения на количество строк. Тот же файл, который привел к сбою Excel, становится таблицей, к которой можно обратиться за считанные секунды.
Это именно то создать, импортировать, проверить рабочий процесс из Руководство по базе данных SQL. Шаги идентичны для большого файла. Просто это займет больше времени, и именно к этому вас готовит остальная часть этого руководства.
Шаг 2. Ожидайте, что загрузка будет заархивирована (с дополнительными функциями, которые вам не нужны)
Большие общедоступные наборы данных почти никогда не загружаются в виде одного чистого CSV. Они приходят как .zip (часто называют чем-то общим, например archive.zip), который содержит несколько файлов, объединенных вместе. В нашем примере в застежка-молнияархиве содержалось четыре файла, а нам нужен был только один.
- Щелкните правой кнопкой мыши загруженный застежка-молнияархив и выберите Извлечь все.
- Откройте извлеченную папку и используйте только тот файл, который вам действительно нужен (для нас,
recommendations.csv). Остальное игнорируйте.
Шаг 3. Импорт выполняется медленно, а файл растет. Это нормально.
CSV-файл размером 2 ГБ не импортируется мгновенно. Дайте этому время. Людей удивляют две вещи, и обе ожидаемы:
- Импорт занимает минуты, а не секунды. Браузер БД может выглядеть зависшим во время работы. Пусть это закончится.
- Твой
.dbфайл вырастает до нескольких гигабайт. CSV-файл размером 2 ГБ может создать базу данных объемом несколько ГБ. Прежде чем приступить к работе, убедитесь, что у вас есть свободное место на диске: исходный файл CSV вместе с базой данных легко может занимать от 4 до 6 ГБ.
Импортируйте файл точно так же, как в руководстве по SQL (назовите таблицу, оканчивающуюся на _raw, отметьте «имена столбцов в первой строке»), затем нажмите Ctrl+S чтобы сохранить.
Шаг 4. Создайте индекс (шаг, который ускоряет большие запросы)
Представьте себе телефонную книгу и представьте одни и те же имена в том порядке, в котором люди переезжали в город. Оба содержат одну и ту же информацию. Только один позволяет найти имя, не читая каждую страницу. Держите эту картинку, потому что это именно то, что описано в следующем абзаце.
Ан индекс — это ярлык поиска в столбце. Без него каждый раз, когда вы выполняете поиск или присоединяетесь к этому столбцу, база данных считывает все 41 миллион строк сверху вниз. С одним он переходит прямо к нужным строкам. На маленьком столике этого никогда не заметишь. По большому счету, это разница между мгновенным и непригодным для использования.
Создайте индекс один раз по столбцу, к которому вы будете присоединяться или фильтровать по большинству (обычно идентификатор):
CREATE INDEX IF NOT EXISTS idx_rec_appid ON recommendations(app_id);
Ловушка: функция клавиши соединения отключает индекс.
Одно уточнение, которое раздражает даже людей, разбирающихся в индексах. Индекс на title помогает присоединиться ON a.title = b.title — но в тот момент, когда вы обертываете ключ в функцию, например ON LOWER(a.title) = LOWER(b.title), простой индекс не используется. Такая переноска является стандартным приемом для сопоставления имен без учета регистра. Индекс сортировал исходные значения, а не строчные. База данных молча возвращается к сравнению каждой строки с каждой строкой. И снова реальные цифры: объединение 13 000 строк против 33 000 — небольшие таблицы по меркам этого руководства! — это 427 миллионов сравнений без индекса, длительностью более 30 минут. Исправление представляет собой индекс выражения, построенный именно на том выражении, которое использует соединение:
CREATE INDEX IF NOT EXISTS idx_songs_lower
ON artist_songs (LOWER(primary_artist), LOWER(title));
Тот же запрос потом: секунды. Модернизированное практическое правило: индексируйте не только столбец, по которому выполняется поиск объединений, но и точное выражение они ищут по.
Шаг 5. Сначала напишите запрос к образцу
Вы не хотите ждать 41 миллион строк каждый раз, когда исправляете опечатку в своем запросе. Разработайте небольшой фрагмент, а затем запустите готовый запрос для всего.
- добавлять
LIMIT 1000пока вы пишете и тестируете, результаты возвращаются мгновенно. - Или оставьте небольшой образец CSV (несколько тысяч строк) в виде отдельной таблицы для построения запросов.
Как только запрос в образце будет правильным, удалите LIMIT и запустить его по-настоящему.
Шаг 6. Агрегируйте заранее и никогда не выбрасывайте на экран миллионы необработанных строк.
Если попросить инструмент отобразить 41 миллион строк, он заморозится. В любом случае вам почти никогда не нужны необработанные строки, вам нужен краткое содержание. Использовать GROUP BY чтобы свернуть данные в одну строку для каждой интересующей вас вещи:
SELECT app_id, COUNT(*) AS num_reviews, AVG(hours) AS avg_hours
FROM recommendations
GROUP BY app_id;
Это превращает 41 миллион строк обзора в одну аккуратную строку за игру. Достичь COUNT, AVG, SUM, и GROUP BY прежде чем ты когда-нибудь потянешься за SELECT *.
Причуда, которая незаметно ломает фильтр: типы данных
Этот не возвращает ни ошибок, ни строк. Прежде чем читать дальше, спросите себя, что бы вы сделали, если бы фильтр, в котором вы были уверены, оказался пустым. Если ответ «проверьте фильтр еще раз», следующий раздел сэкономит вам день, потому что с фильтром все в порядке.
Прежде чем доверять какому-либо фильтру в большой таблице, сначала посмотрите на фактические значения (SELECT * FROM recommendations LIMIT 10;). Большие реальные файлы любят хранить вещи удивительными способами. Классический вариант: столбец ВЕРНО/ЛОЖЬ, хранящийся как Текст 'true' и 'false', а не цифры 1 и 0.
Если вы предположите, что это число, и напишите WHERE is_recommended = 1, это молча соответствует Ничего, и вы получите уверенно неправильный ответ без сообщения об ошибке. Исправление заключается в том, чтобы просто соответствовать тому, как данные действительно хранятся:
WHERE is_recommended = 'true'
Еще одна честная привычка: следить за снимком
Большие наборы данных представляют собой снимки на определенный момент времени. Если вы объедините два больших набора данных, они могут быть собраны в разные даты (наши были), поэтому они описывают одни и те же вещи в несколько разные моменты. Это нормально, но скажите об этом в своей статье. Честность в анализе заключается в том, чтобы открыто сообщить, откуда взялись ваши данные и где два источника не совпадают.
Шпаргалка
| Ситуация | Что делать |
|---|---|
| Файл не открывается в Excel | Это более ~ 1 миллиона строк. Переместите его в базу данных SQLite. |
| Загрузка представляет собой застежка-молнияархив с дополнительными файлами. | Извлеките, используйте только один файл, который вам нужен. |
| Импорт кажется замороженным | Файл размером в несколько ГБ занимает несколько минут. Пусть это закончится. Проверьте, есть ли у вас место на диске. |
| Объединения или фильтры работают медленно | CREATE INDEX в столбце id один раз. |
| Запрос выполняется медленно | Развивайтесь с LIMIT 1000, затем удалите его. |
| Инструмент зависает на результатах | Не SELECT * миллионы строк. GROUP BY к резюме. |
| Фильтр ничего не возвращает/странные итоги | Проверьте типы данных. Логическое значение может быть текстом 'true', нет 1. |
Когда SQLite недостаточно
SQLite удобно обрабатывает многогигабайтные файлы, которые охватывают практически все, с чем вы столкнетесь во время обучения и создания портфолио. Если вы когда-нибудь перерастете это, следующие инструменты: DuckDB (создан для быстрого анализа больших файлов) и pandas с chunksize на Python (читать огромный файл по частям). Мышление, которое вы только что изучили, сохраняется и в дальнейшем: поместите его в базу данных, проиндексируйте ключ, делайте выборку во время построения, агрегируйте перед отображением.
тот Курс SQL обучает точным инструментам, которые укрощают большие данные: JOIN, GROUP BYи агрегатные функции с отработанными примерами, практикой и пробным экзаменом. Все в браузере, ничего устанавливать не нужно.
Или приступайте к делу и учитесь, написав запросы: открыть SQL-практикум, тринадцать запросов, каждый из которых добавляет что-то одно к последнему.
Думать как аналитик Это 64 страницы, посвященные половине работы: определение показателя, составление отчета по результатам анализа, изучение данных, прежде чем вы им поверите, и высказывание вслух того, о чем ваши данные не могут вам сказать.
Думать как аналитик, 19 $ →