Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook? / 22 сообщений из 22, страница 1 из 1
01.08.2021, 01:34
    #40087554
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Привет, я сделал Отчеты с Графиками, Таблицами , похожий на Jupyther Notebook.

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

Отличие от Jupyther Notebook в том что Этот Ноутбук можно использовать из любого обычного редактора типа идеи или вижл студио. И не нужно устанавливать никаких зависимостей, это просто html страничка, которую можно сохранить локально или опубликовать на любом сайте.

Пример как выглядит код для такого ноутбука, это Python (точнее Nim), для Java он будет выглядеть примерно так же. Можно вызвать из любого места программы и сгенерировать отчет.

Насколько это может быть нужно в Java? По идее Jupyther Notebook имеет кернел Java. Но мне лично он кажется менее удобным чем работа в скажем идее или вижл студии.

Какие инструменты анализа данных вы используете в Java? Eсть Java Kernel для Jupyther и еще различные варианты, в том числе плагины. Но интересно что именно вы реально использовали и что понравилось?
...
Рейтинг: 0 / 0
02.08.2021, 01:25
    #40087711
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Сделал API для Groovy

Пример странички - онлайн и скриншот:



Groovy код который генерирует страничку выше

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
def page = new Page(title: 'Some page', desc: 'Some description')


page.text('Some text', """
Some formula \$E=mc^2\$

Some code `puts 'Hello World'`
""")


// Data as TidyData or Array or Column Array
def table_data = [
  [ name: 'Jim Raynor',   age: 30, hp: 250,  is_alive: true ],
  [ name: 'Angus Mengsk', age: 50, hp: 100,  is_alive: false ],
  [ name: 'Amon',                  hp: 500,  is_alive: true ]
]
page.table('Some table', table_data, [
  columns: [
    [ id: 'name' ],
    [ id: 'age' ],
    [ id: 'hp', format: [ type: 'line', ticks: [100] ] ],
    [ id: 'is_alive' ]
  ]
])


// Data as TidyData or Array or Column Array
chart_data = [
  a: [1, 2, 3,  4, 5],
  b: [1, 3, 2, -1, 2]
]
page.chart('Some chart', chart_data, [
  'bar',
  [ x: 'a', type: 'nominal' ],
  [ y: 'b' ]
])


// page.image('Some image', [
//   // Tiny black pixel encoded as base64 image.
//   // Also url could be supplied as `url: 'http://some-url'`.
//   base64: 'R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='
// ])


// Saving report as HTML file, open it the Browser to see the Notebook
// You can publish Notebook by copying it to any Web Server
page.save('play.html')


// Optionally, you can publish Notebook on the http://pl0t.com site.
// You would need to get API Token from http://pl0t.com and store it as `plot_api_token` env variable
// The Notebook will be available as http://al6x.pl0t.com/groovy_test/page.json:view
// page.publish('http://al6x.pl0t.com/groovy_test/page.json')
...
Рейтинг: 0 / 0
02.08.2021, 09:39
    #40087741
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Для формирования каких-нибудь отчётов может быть полезно. Но вообще, анализ данных на джаве то ещё извращение.
...
Рейтинг: 0 / 0
02.08.2021, 14:45
    #40087867
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Графики обычно требуют много дизайнерского подхода. Тоесть нарисовал в Excel.
Подвигал мышкой. Посмотрел. Перерисовал e.t.c.

Тоесть процесс - итеративный.

Сразу с нуля никто не может сделать векторный Chart так чтобы было красиво и цифры
шкалы или легенды не наползали друг на друга.

Программирование графиков может быть сколь угодно сложным или легким
но где-то в стеке должен быть принцип WYSIWYG.
...
Рейтинг: 0 / 0
02.08.2021, 15:11
    #40087871
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Здесь принципиально другой подход, используется декларативная , визуальная грамматика Vega, точнее один из ее упрощенных диалектов (несколько похож на Альтаир).

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

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

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

...
Рейтинг: 0 / 0
02.08.2021, 15:19
    #40087875
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
авторДля формирования каких-нибудь отчётов может быть полезно. Но вообще, анализ данных на джаве то ещё извращение.Я использую его и для анализа и для продакшена.

Машин лернинг это чисто питоновская тема. Но, мне на практике не нужно обучать сверточную нейросеть или настраивать классификаторы.

Скорей это задачи получения и очистки данных, нормализации, различные источники и форматы хранения, простые расчеты, и визуализации типа гистограмы и других простых графиков.

И удобно когда не нужно ради этого переключаться на другой язык и другие инструменты, делать экспорт данных из продакшена в формат питоновского ноутбука юпитера, только ради того чтобы построить пару простых графиков и посмотреть как они выглядят. Когда это можно сделать прямо из жава продакшена так же как печать в консоль.
...
Рейтинг: 0 / 0
02.08.2021, 15:19
    #40087876
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Если я брошу на график количество точек, превышающих разрешение экрана по
горизонтали в текущем зуме - твой движок поймет что надо как-то интерполировать или
уменьшить объем отрисовки?
...
Рейтинг: 0 / 0
02.08.2021, 15:28
    #40087881
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Да, интерполирует.

Не могу похвастаться что это мой движек :). Это отличнейший, популярный, и много лет известный и используемый движек Vega. Я лишь добавил несколько упрощений, небольшую надстройку упрощающую его использование, что то типа Питоновского Альтаира (Альтаир это тоже надстройка над Vega) все графии которые там показаны можно сделать и тут, примерно с таким же синтаксисом. Либо, если кто знает Vega можно использовать ее оригинальную.
...
Рейтинг: 0 / 0
02.08.2021, 16:49
    #40087905
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
private
Да, интерполирует.

Можешь показать на скрине?
...
Рейтинг: 0 / 0
02.08.2021, 19:07
    #40087972
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Например http://inv6st.com/experiments/gold_price/7-plot.png

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

Еще немного графиков http://inv6st.com/experiments/gold_price.html
...
Рейтинг: 0 / 0
02.08.2021, 19:12
    #40087974
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Про интерполяцию наверно не совсем верно я сказал. Интерполировать график с "шумом" нельзя. И если библиотека графическая это делает, то это ошибка. Потому что это не шум, и убирать его нельзя. Например в графике с ценами, где за год скажем 10000 значений цены и все 9999 примерно одинаковые а одна сильно отличается, прыгает, это одно значение может быть самым ценной информацией, а 9999 ненужным шумом.
...
Рейтинг: 0 / 0
02.08.2021, 19:15
    #40087976
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Сгладить график можно принудительно, сказав Веге что нужно включить интерполяцию, тогда она это сделает. https://vega.github.io/vega/docs/marks/line/
...
Рейтинг: 0 / 0
02.08.2021, 19:19
    #40087977
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Интерполяция - эт когда между двумя точками дырка которую нужно заполнить. Т.е. мы определяем неизвестные точки между двумя известными. Когда же мы заменяем N точек на M где N > M, то хз как это называется. Я слышал о таком только под некрасивым именем bunching.

Хотя если честно я не понимаю зачем в случае "точки не влазят в экран" делать bunching - ну какие-то точки на одной X координате будут находиться. Не звучит как трагедия.

PS: я помню, кстати, был какой-то аналог Jupyther на Java..
...
Рейтинг: 0 / 0
02.08.2021, 19:23
    #40087978
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
У меня что-то крутится в голове из инженерной графики. Может scaling. Может mip-mapping.
Но рендерить 100500 точек на одном графике точно не стоит. Нужен умный алгоритм прореживания.

Для нас ведь эти точки сливаются в толстую шумящую полосу.
...
Рейтинг: 0 / 0
02.08.2021, 19:27
    #40087980
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Это называется сглаживание наверно, kernel density estimation и т.п. Автоматически его сделать невозможно, потому что это операция сжатия с потерей информации, и какую именно информацию нужно выкинуть аутлаеры или наоборот близкие значения зависит от цели исследования.
...
Рейтинг: 0 / 0
02.08.2021, 19:41
    #40087992
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Я думаю что график очень похож на свечные диаграммы. И возможно сами свечки возникли
как побочный эффект от сжатия с двух сторон во времени графика измеряемой величины.

Только не классическая свечка а диаграмма баров. Выглядит как такая полицейская палка.

Код: java
1.
2.
3.
4.
5.
 |
-|
 |
 |-
 |
...
Рейтинг: 0 / 0
03.08.2021, 21:28
    #40088406
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Добавил больше примеров графиков (картинки-карточки на заднем фоне). Все они построены этим же инструментом, только предыдущей версией.
...
Рейтинг: 0 / 0
03.08.2021, 21:29
    #40088407
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Ссылку забыл http://pl0t.com
...
Рейтинг: 0 / 0
06.08.2021, 01:18
    #40089052
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Наконец таки добавил API для Java https://github.com/al6x/pl0t/tree/main/api/java

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
import pl0t.Page;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Play {

  // Data class for table
  public static class Row {
    public String  name;
    public int     age;
    public int     hp;
    public boolean is_alive;

    public Row(String name, int age, int hp, boolean is_alive) {
      this.name = name; this.age = age; this.hp = hp; this.is_alive = is_alive;
    }
  }


  public static void main(String[] args) {
    Page page = new Page("Some page", "Some description");

    page.text("Some text",
      "Some formula $E=mc^2$\n" +
      "\n" +
      "Some code `puts 'Hello World'`"
    );


    // Data as TidyData or Array or Column Array
    Row[] table_data = {
      new Row("Jim Raynor",   30,    250, true),
      new Row("Angus Mengsk", 50,    100, false),
      new Row("Amon",         15000, 500, true),
    };
    // Flexible JSON used, you can omit quotes
    page.table("Some table", table_data,
      "{\n" +
      "  columns: [\n" +
      "    { id: name },\n" +
      "    { id: age },\n" +
      "    { id: hp, format: { type: line, ticks: [100] } },\n" +
      "    { id: is_alive }\n" +
      "  ]\n" +
      "}"
    );


    // Data as TidyData or Array or Column Array
    Map<String, List<Integer>> chart_data = new HashMap<>();
    chart_data.put("a", List.of(1, 2, 3,  4, 5));
    chart_data.put("b", List.of(1, 3, 2, -1, 2));
    // Flexible JSON used, you can omit quotes
    page.chart("Some chart", chart_data, "[\n" +
      "  bar,\n" +
      "  { x: a, type: nominal },\n" +
      "  { y: b }\n" +
      "]"
    );

    // Tiny black pixel encoded as base64 image.
    // page.image("Some image", "R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=");

    // Saving report as HTML file, open it the Browser to see the Notebook
    // You can publish Notebook by copying it to any Web Server
    page.save("play.html");
  }
}
...
Рейтинг: 0 / 0
06.08.2021, 01:19
    #40089053
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Этот Жава код построит вот такую страничку с графиками

...
Рейтинг: 0 / 0
02.09.2021, 02:13
    #40094656
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Ну и наконец то, боль менее нормалный репорт, по австралийской недвиге.

Кстати отличный случай вспомнить статистику, статистика по недвиге гораздо интересней чем высчитывать размеры лепестков на классическом Iris flower data set.

Отчет открытый, можно запустить самостоятельно, поменять чтото, единственно он на Deno & TypeScript, но на Java/Kotlin перекладывается просто 1 к 1 :)

Отчет http://files.pl0t.com/experiments/ausprops/report-2021-08.html

...
Рейтинг: 0 / 0
02.09.2021, 02:14
    #40094657
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook?
Ну и наконец то, боль менее нормалный репорт, по австралийской недвиге.

Кстати отличный случай вспомнить статистику, статистика по недвиге гораздо интересней чем высчитывать размеры лепестков на классическом Iris flower data set.

Отчет открытый, можно запустить самостоятельно, поменять чтото, единственно он на Deno & TypeScript, но на Java/Kotlin перекладывается просто 1 к 1, API на всех языках одно и тоже :)

Отчет http://files.pl0t.com/experiments/ausprops/report-2021-08.html

...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужна Java возможность печатать Графики, Таблицы? Как Jupyther Notebook? / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]