{"id":14293,"url":"\/distributions\/14293\/click?bit=1&hash=05c87a3ce0b7c4063dd46190317b7d4a16bc23b8ced3bfac605d44f253650a0f","hash":"05c87a3ce0b7c4063dd46190317b7d4a16bc23b8ced3bfac605d44f253650a0f","title":"\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0435 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u043d\u0438 \u043a\u043e\u043f\u0435\u0439\u043a\u0438","buttonText":"","imageUuid":""}

Ищем аналоги для 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); //

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

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

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

// Получаем только имена поселенцев 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 будет не такой уж и плохой идеей. Тем более, что в ней имеются все те же инструменты с одним из которых мы сейчас и познакомились.

0
Комментарии
-3 комментариев
Раскрывать всегда