Время прочтения: 4 мин.
Данные – это новое золото. Данные рассматриваются как чрезвычайно ценный ресурс, который может предоставить организациям действенную информацию, которая повысит их деловые возможности. Данные можно сравнить с нефтью: при «перегонке» через МО и ИИ можно получить ценный продукт. В последнее время языком, на котором ведется общение с данными, ведется обработка методами МО и ИИ, является Python (с редкими «вкраплениями» других языков). Причин для этого много, не будем пытаться выделить все, но, безусловно, одной из основных причин является наличие удобного инструментария для работы с данными, например pandas. Pandas — программная библиотека на языке Python для обработки и анализа данных, которая предоставляет специальные структуры данных и операции для манипулирования числовыми таблицами и временными рядами. Имеется довольно большой набор возможностей по работе с многомерными структурированными наборами информации, в первую очередь предназначенных для очистки и первичной оценки данных по общим показателям (например, по среднему значению, квантилям и некоторым другим статистическим показателям).
Однако работа с данными — это не всегда Python. Под большую часть популярных языков существуют различные наборы библиотек, которые позволяют получать схожий, пусть и не всегда исчерпывающий функционал. Например, для C# есть Accord.Net, который решает множество задач в рамках широкого понятия «Data Science». Однако, манипуляция с внешними данными не всегда выглядит так удобно и легко, как выглядела бы на Python с использованием pandas. На помощь в данной ситуации может прийти Deedle. Как сообщает нам сайт Deedle: «Deedle — это библиотека с открытым исходным кодом .NET для программирования фреймов данных. Deedle позволяет вам манипулировать данными способом, аналогичным R-фреймам данных и фреймам данных Pandas в Python».
Установка Deedle достаточно проста и полностью аналогична установке любого другого внешнего пакета:
- Откройте диспетчер пакетов (Инструменты | Диспетчер пакетов NuGet | Консоль диспетчера пакетов)
- Установите Deedle с помощью следующей команды: PM> Install-Package Deedle
Попробуем, решить какую-нибудь несложную задачу с ее помощью. Предположим, у нас есть ежедневные данные по стоимости каких-либо акций. Пусть в этих данных будут: дата, стоимость на момент открытия, максимальная стоимость, минимальная стоимость, стоимость на момент закрытия и количество. Допустим, нам интересно было бы узнать разницу между открытием и закрытием и, например, вычислить ежедневный доход.
Для начала считываем данные и выводим их на экран
var root = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName;
var aaplData = Frame.ReadCsv(Path.Combine(root, "table_aapl.csv"));
Console.WriteLine("-- Raw Data --");
aaplData.Print();
Получаем:
Пока все просто, для того чтобы выполнить необходимые вычисления, было бы не лишним проиндексировать данные по дате. Это также происходит довольно просто
var aapl = aaplData.IndexRows("Date").SortRowsByKey();
После этого, наши данные выглядят так
Чтобы рассчитать процентное изменение от открытия к закрытию нужно сделать следующее (вычисляем значение и добавляем к нашим данным):
var openCloseChange =
((
aapl.GetColumn("Close") - aapl.GetColumn("Open")
) / aapl.GetColumn("Open")) * 100.0;
aapl.AddColumn("openCloseChange", openCloseChange);
И снова, никаких сложностей. На выходе имеем
Наконец, после смещения цен закрытия на одну строку и вычисления дневной доходности таким образом:
var dailyReturn = aapl.Diff(1).GetColumn("Close") / aapl.GetColumn("Close") * 100.0;
aapl.AddColumn("dailyReturn", dailyReturn);
Получаем следующие данные
Выше приводится пример проекта Deedle. Можно заметить, что операции манипулирования, для которых потребовались бы определенные навыки и немалое количество строк кода на C#, можно выполнить всего в пару «движений», что отлично работает в случае если мы применяем Deedle в совокупности с Accord.Net, при разработке ML решений для C# и.Net.