Ищем аналоги для pandas в Java

Пришло время познакомиться с удобным способом обработки больших данных на манер pandas, а именно – с joinery.

Для начала работы нужно создать новый maven проект и добавить в pom.xml всё необходимое для работы с joinery:

1. Прописываем дополнительный maven репозиторий. Именно в нём находится артефакт joinery

<repositories> <repository> <id>JCenter</id> <name>JCenter repo</name> <url>https://jcenter.bintray.com/</url> </repository> </repositories>

2. Прописываем joinery и все другие зависимости проекта

<dependencies> <dependency> <groupId>joinery</groupId> <artifactId>joinery-dataframe</artifactId> <version>1.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>ooxml-schemas</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>openxml4j</artifactId> <version>1.0-beta</version> </dependency> </dependencies>

Перезагружаем maven проект для того, чтобы он сделал всю работу по загрузке необходимых артефактов. Скачиваем какой-нибудь датасет для работы с ним (в моём случае — это перечень возможных поселенцев на острове игрока из Animal Crossing) и переходим к написанию непосредственно кода.

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

DataFrame df = DataFrame.readCsv(MainClass.class.getResourceAsStream("villagers.csv")); System.out.println(df); //

И сразу выведем загруженные данные в консоль

Уже можно запустить этот код и увидеть в консоли примерно следующее:

Ищем аналоги для pandas в Java

Теперь, когда данные загружены, попробуем произвести несколько операций с ними:

// Получаем только имена поселенцев var tempDf = df.retain(0); System.out.println(tempDf); // Получаем уникальные типы поселенцев tempDf = df.retain("Species").unique("Species"); System.out.println(tempDf); // Получаем только те строки, в которых Species=="Pig" tempDf = df.select(new DataFrame.Predicate<Object>() { @Override public Boolean apply(List<Object> values) { return values.get(1).toString().equals("Pig"); } }); System.out.println(tempDf);

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

В заключение хочется напомнить, что для каждой задачи желательно использовать подходящий инструмент. Так, например, при работе с умеренно большими данными вполне хватит связки python и pandas, но, если данных становится слишком много, а вопрос произвольности встаёт всё острее – использовать Java будет не такой уж и плохой идеей. Тем более, что в ней имеются все те же инструменты с одним из которых мы сейчас и познакомились.

11
Начать дискуссию