Время прочтения: 2 мин.
Мы живем в эпоху больших данных, но не всегда эти данные сразу пригодны для решения поставленных задач. Представьте, вы наконец-то нашли ту информацию, которая необходима вам для анализа, открываете, а там… длинная строка сплошного текста с сложно интерпретируемой структурой. Спокойно, это JSON, и за последние 15 лет он стал стандартом обмена информацией.
JSON (JavaScript Object Notation) – простой, основанный на использовании текста, способ хранить и передавать структурированные данные. Как можно догадаться из названия, JSON изначально основывается на языке JavaScript, но благодаря своей универсальности и гибкости отлично работает на разных платформах.
В своей работе мы столкнулись с необходимостью проанализировать csv файл с расчетными данными по клиентам общим размером 85 Гб. Ключевая информация представлена в колонке в формате JSON «ключ-значение».
id | level | amount | oper date | num id | str as json |
10000398 | 1 | 235000.00 | 2020-06-02 | 5712166429 | «{«status»: {«Code»: 0,»Desc»: «POS»}, «gId»: «F135*****422», «TypeID»: «A»,»Results»: {«Results»: [{«Index»: 3, … ,»ttl»: 10000,»Id»: 13*****654},]}, «eId»: «254*****894», «Flag»: true,»channelSales»: Y}}]}}» |
При простом импорте csv файла в dataframe колонка, содержащая JSON, не будет автоматически сформирована в табличном виде, что затруднит эффективную работу с данными. Выходом является преобразовать данные JSON в объект Python Pandas.
Учитывая большой объем данных и ограниченные ресурсы АРМ, логично использовать пакетную обработку csv файла. Будем считывать по 100 тыс. строк, выбирая только требуемый период и необходимые «ключи-столбцы».
В результате получилась плоская таблица, доступная для дальнейшего анализа. За счет выбора необходимых полей и строк, общий размер таблицы уменьшился в десять раз по сравнению с первоначальной.
cln | tr info | code | id | oper date |
2 | 894612234 | q | 10000498 | 03.06.2020 |
1 | 894612235 | q | 10000498 | 04.06.2020 |
9 | 894612236 | q | 10000498 | 05.06.2020 |
14 | 894612239 | br | 10000498 | 06.06.2020 |
15 | 894612241 | cr | 10000498 | 07.06.2020 |