8 структур данных, которые должен знать каждый дата-сайентист

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

Поэтому дата-сайентисту необходимо знать, какие структуры существуют, а также понимать их преимущества и недостатки. Ниже приведен список из восьми типов данных, которые пригодятся на любом этапе работы.


Встроенные структуры данных Python

Начнем со встроенных структур данных Python. С ними, скорее всего, придется столкнуться в самом начале взаимодействия с этим языком программирования. Встроенные в Python структуры данных в дальнейшем можно использовать для реализации абстрактных типов данных или более сложных структур .

Список

Список  —  это одна из первых структур данных, с которыми предстоит иметь дело, если вы собираетесь программировать на языке Python. Она представляет собой реальный список, в котором можно хранить несколько точек данных в рамках одной структуры (в данном случае речь идет о переменной).

Списки обладают следующими свойствами:

  • изменяемость (их можно изменять после определения);
  • упорядоченность (они сохраняют свой порядок, если не изменены явно);
  • индексируемость (можно получить доступ к элементам по их индексу);
  • возможность хранить дубликаты записей.

Преимущество списка заключается в том, что пользователь легко получает доступ к отдельным точкам данных, если знает их индексы, поскольку их порядок сохраняется. Но если местоположение элемента неизвестно, его поиск может оказаться трудоемким процессом.

Словарь

Словари  —  это еще одна распространенная структура данных, которую придется освоить дата-сайентисту в начале знакомства с Python и другими языками программирования. По своей форме она похожа на настоящий словарь, содержащий ключи (слова) и значения (описания) в паре “ключ: значение”. Основные характеристики словарей:

  • изменяемость;
  • упорядоченность;
  • индексируемость (если пользователь знает ключ элемента);
  • отсутствие возможности содержать дубликаты записей в ключах (значения могут быть дубликатами).

Основной особенностью словарей является их структура “ключ: значение”, позволяющая пользователю получать доступ к значениям на основе ключа, а не числового индекса. Именно поэтому они занимают больше места, чем другие структуры данных, но в то же время позволяют осуществлять более эффективный поиск, если вы знаете ключи элементов.

Множество

Множество  —  это еще одна структура данных в Python, но она встречается и используется реже остальных. В этом случае одна переменная может использоваться для хранения нескольких точек информации, но их уникальность заключается в том, что они не упорядочены и не могут хранить дубликаты.

Ключевые характеристики множеств:

  • неупорядоченность;
  • неиндексируемость;
  • изменяемость;
  • отсутствие возможности содержать дубликаты значений.

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

Кортеж

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

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


Абстрактные типы данных

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

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

Очередь

Принцип действия абстрактного типа данных Queue похож на продвижение живой очереди в реальной жизни: элементы добавляются только сзади, а удаляются только спереди. Таким образом, Queue следует структуре FIFO (“первым поступил  —  первым выбыл”) и поддерживает порядок точек данных.

Как правило, такая структура данных применяется при планировании заданий для центрального процессора, постановке задач в очередь для принтера или при использовании алгоритмов поиска по принципу Breadth First (поиск в ширину). Queue следит за тем, чтобы первым в структуру добавлялся элемент, который удаляется первым.

Стек

Как и очередь, стек  —  это абстрактный тип данных, который хранит порядок добавления элементов в структуру. Однако в отличие от очереди, он позволяет добавлять и удалять элементы только в верхней части стека. Таким образом, он следует порядку LIFO (“последним поступил  —  первым выбыл”). Это похоже на то, как складывают тарелки в ресторане или едят стопку блинов.

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

Связный список

Связный список представляет собой набор узлов, которые содержат информацию и указывают друг на друга линейным образом (т. е. A -> b -> c ->d). Такой список может иметь одну из двух основных форм:

  • двусвязный список (ссылки на предыдущий и следующий узел);
  • односвязный список (указание только на следующий узел).

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

Граф

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

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


Заключение

Здесь представлено лишь подмножество различных типов структур данных, с которыми вам придется работать. Тем не менее понимание принципа работы этих конструкций станет основой для освоения многих других структур, таких как массивы Numpy и датафреймы Pandas. Вопросы по структурам данных и алгоритмам также часто встречаются на собеседованиях по программной инженерии и науке о данных, поэтому эти знания точно пригодятся в будущем.

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи Philip Wilkinson: 8 Data Structures every Data Scientist Should Know

Предыдущая статьяДвижки JavaScript. Часть 2: генерация кода и базовые оптимизации
Следующая статья#02TheNotSoToughML | Способы “подгонки линии”