Deedle как альтернатива pandas под C#
Обработка данных. Как с помощью библиотеки Deedle получить результат аналогичный использованию метода Pandas в Python?
Данные – это новое золото. Данные рассматриваются как чрезвычайно ценный ресурс, который может предоставить организациям действенную информацию, которая повысит их деловые возможности. Данные можно сравнить с нефтью: при «перегонке» через МО и ИИ можно получить ценный продукт. В последнее время языком, на котором ведется общение с данными — является Python (с редкими «вкраплениями» других языков). Причин для этого много, не будем пытаться выделить все, но, безусловно, одной из основных причин является наличие удобного инструментария для работы с данными, например pandas. Pandas — программная библиотека на языке Python для обработки и анализа данных, которая предоставляет специальные структуры данных и операции для манипулирования числовыми таблицами и временными рядами. Имеется довольно большой набор возможностей по работе с многомерными структурированными наборами информации, в первую очередь предназначенных для очистки и первичной оценки данных по общим показателям (например, по среднему значению, квантилям и некоторым другим статистическим показателям).
Однако работа с данными — это не всегда Python. Под большую часть популярных языков существуют различные наборы библиотек, которые позволяют получать схожий, пусть и не всегда исчерпывающий функционал. Например, для C# есть Accord.Net, который решает множество задач в рамках широкого понятия «Data Science». Однако, манипуляция с внешними данными не всегда выглядит так удобно и легко, как выглядела бы на Python с использованием pandas. На помощь в данной ситуации может прийти Deedle.
Установка Deedle достаточно проста и полностью аналогична установке любого другого внешнего пакета:
- Откройте диспетчер пакетов (Инструменты | Диспетчер пакетов NuGet | Консоль диспетчера пакетов)
- Установите Deedle с помощью следующей команды: PM> Install-Package Deedle
Попробуем, решить какую-нибудь несложную задачу с ее помощью. Предположим, у нас есть ежедневные данные по стоимости каких-либо акций. Пусть в этих данных будут: дата, стоимость на момент открытия, максимальная стоимость, минимальная стоимость, стоимость на момент закрытия и количество. Допустим, нам интересно было бы узнать разницу между открытием и закрытием и, например, вычислить ежедневный доход.Для начала считываем данные и выводим их на экран
Получаем:
Пока все просто, для того чтобы выполнить необходимые вычисления, было бы не лишним проиндексировать данные по дате. Это также происходит довольно просто
После этого, наши данные выглядят так
Чтобы рассчитать процентное изменение от открытия к закрытию нужно сделать следующее (вычисляем значение и добавляем к нашим данным):
И снова, никаких сложностей. На выходе имеем
Наконец, после смещения цен закрытия на одну строку и вычисления дневной доходности таким образом:
Получаем следующие данные
Выше приводится пример проекта Deedle. Можно заметить, что операции манипулирования, для которых потребовались бы определенные навыки и немалое количество строк кода на C#, можно выполнить всего в пару «движений», что отлично работает в случае если мы применяем Deedle в совокупности с Accord.Net, при разработке ML решений для C# и.Net.