ArrayVator

ArrayVator

ArrayVator — DSL для анализа табличных данных. Простой синтаксис, два движка (RAM + DuckDB), компиляция в EXE, динамическая справка с алиасами.

ArrayVator

ArrayVator

Скриптовый язык и среда для анализа табличных данных
Простой синтаксис. Два движка. Готовый EXE.

🌐 Сайт • 📥 Скачать • 💻 GitHub • 🏛 Mos.Hub

ArrayVator Editor


✨ Что это

ArrayVator — это предметно-ориентированный язык (DSL) для анализа табличных данных. Это не очередной Python-фреймворк, а полноценный DSL со своим синтаксисом, редактором и встроенной поддержкой больших данных.

Один и тот же код работает и для матрицы в памяти, и для BigData на диске. ArrayVator сам решает, как выполнить логику — вам не нужно переписывать код.

// Открыть CSV с 100 миллионами строк и 7 колонками
m = OpenCSVShow()

// Отфильтровать по наценке и проданным товарам
r = filterif(m[all, "Наценка"] > 100 and m[all, "Продано"] > 10000)

// Показать результат в окне в стиле Excel
printshow(r, "Фильтруем по наценке и кол-ва проданных товаров")

🚀 Быстрый старт

📥 Готовый EXE (без Python)

👉 Скачать ArrayVator_Portable.zip

  1. Скачайте архив по ссылке выше.
  2. Распакуйте в любую папку.
  3. Запустите ArrayVator.exe.

Требования: Windows 10/11 (x64). Python не нужен.

Из исходников (для разработчиков)

pip install -r requirements.txt
python main.py

🎯 Главные фишки

1. Мутабельность: матрица сама расширяется

В большинстве языков обращение к несуществующему столбцу даёт ошибку. В ArrayVator матрица автоматически расширяется, когда вы пишете за её пределами.

Мутабельность: код

m = ["Имя", "Зарплата";
     "Аня", 50000;
     "Боб", 60000;
     "Света", 55000]

// Добавить столбец, которого нет — он создастся сам
m[all, "Налог"] = 0

// Добавить строку по имени — она создастся сама
m["Андрей", all] = 0

// Добавить ячейку за пределами матрицы
m[5, "Зарплата"] = 75000

Мутабельность: результат

Исходная таблица 3×2 превращается в 5×3 с новыми столбцами и строками. Никаких IndexError, никаких «out of bounds». Просто работает — как Excel, только с кодом.

2. BigData: миллион строк без проблем

Язык использует DuckDB под капотом для обработки данных, которые не влезают в оперативную память. Если файл весит более 250 МБ, язык автоматически использует DuckDB.

BigData: консоль и фильтр

Окно printshow отображает отфильтрованные данные в виде таблицы в стиле Excel. Работает с миллионами строк благодаря виртуальному рендерингу.

BigData: printshow 100 млн строк

Код не меняется. Один и тот же синтаксис работает и для матрицы в памяти, и для BigData на диске.

3. Простая компиляция в EXE

ArrayVator легко упаковывается в исполняемый файл. Вы пишете скрипт, компилируете его прямо из программы — и получаете .exe-файл, который можно передать коллеге, у которого не установлено ни Python, ни чего-либо ещё.

Меню: Экспорт в EXE

ArrayVator Compiler

4. Алиасы: пиши по-русски

Поддержка алиасов: не помните название функции — пишите по-русски. впр вместо vlookup, язык сам предложит варианты. Это снижает порог входа для тех, кто привык к русскоязычной терминологии.

Алиас: впр → vlookup

5. Умный автокомплит и динамическая справка

Редактор ArrayVator — это не просто текстовый редактор:

  • При наборе функции появляется автодополнение.
  • При клике на неё — динамическая справка с синтаксисом, примерами и пояснениями.

Автодополнение на 's'

Динамическая справка vlookup

Справка содержит: синтаксис, мнемонику, операторы в условии, модификаторы (inside, ignore), правила и примеры.

6. Обработчики ошибок, которые реально помогают

Вместо сухого SyntaxError язык говорит:

  • Где ошибка.
  • Что пошло не так.
  • Как это исправить.
  • Пример правильного кода.
m = ["Отдел", "Зарплата";
     "IT",     80000;
     "HR",     60000;
     "IT",     95000;
     "HR",     72000;
     "Sales",  80000;
     "HR",     60000;]

m = DeleteDuplicat(m)
print(m)

❌ Ошибка (строка 9):

  m = DeleteDuplicat(m)

  Неизвестная функция 'deleteduplicat'.

  💡 Возможно, вы имели в виду:
  💡      • DeleteDuplicate()
  💡      • deleteduplicate()
  💡      • delete()
  💡
  💡 Пример:
  💡      DeleteDuplicate(...)
  💡
  💡 Подсказка: при вводе работает автодополнение —
  💡            начните печатать имя, появится список.

7. Отчёты с графиками

PDF-отчёт с графиком

m = ["Товар",  "Продажи";
     "Яблоки", 120;
     "Бананы", 80;
     "Груши",  150;
     "Сливы",  50]

report("Продажи фруктов", "fruits_report.html")
report_section("1. Исходные данные")
report_text("Продажи фруктов за месяц.")
report_table(m, title "Таблица продаж")
report_section("2. График продаж")
report_chart(bar, m[:, "Товар"], m[:, "Продажи"],
             title "Продажи по товарам")
report_save()

📚 Примеры кода

Условные агрегаты

// Средняя зарплата IT-специалистов старше 26 лет
avgif(m[:, "Отдел"] == "IT" and m[:, "Возраст"] > 26, m[:, "Зарплата"])

// Минимальная зарплата среди IT и HR
minif(m[:, "Отдел"] == "IT" or m[:, "Отдел"] == "HR", m[:, "Зарплата"])

// Количество уникальных городов в IT
countuniqueif(m[:, "Отдел"] == "IT", m[:, "Город"])

Оконные функции

// Топ-2 по зарплате в каждом отделе
r = qualify(m, rownumber(m,
                         by m[:, "Отдел"],
                         order m[:, "Зарплата"],
                         ZA) <= 2)

// Накопительная сумма
r = winsum(m[:, "Зарплата"], by m[:, "Отдел"], order m[:, "Дата"], AZ)

// Предыдущее значение (lag)
r = lag(m[:, "Зарплата"], 1, 0)

ZA — сортировка по убыванию, AZ — по возрастанию.


🎯 Возможности языка

Агрегация

sum, avg, min, max, median, count, std — с by.

Фильтрация и удаление

filterif, deleteif, delete, insertif, matrixmod.

Группировка

groupby, groupagg, pivot, unpivot, addcolumn, addrows.

Оконные функции

rownumber, rank, denserank, percentrank, cumedist, ntile, lag, lead, firstvalue, lastvalue, nthvalue, winsum, winavg, wincount, winmin, winmax, winmedian, winstdev, qualify.

Условные агрегаты

sumif, countif, avgif, minif, maxif, medianif, countuniqueif, sumproduct.

Аналитика

abc, percentof, anomaly.

Соединения

join (left/inner/right/outer), joinarray, vlookup.

Даты и время

date, DateDiff, datenow, timenow, timestamp, calendar, calendarpro, year, month, day, quarter, weekday, weekdayname, monthname, adddays, addmonths, addyears, datetrunc, hour, minute, second, ampm, is_pm, addhours, addminutes, addseconds, timetrunc, time, is_valid_time.

Строки

trim, trimleft, trimright, replacetext, clean, deletetextleft, deletetextright, split, joinvector.

Типы и None

type, is_number, is_integer, is_float, is_string, is_boolean, isnone, to_string, to_number, fillna, dropna, coalesce, noneif.

Файлы

OpenExcel, SaveExcel, OpenCSV, SaveCSV, OpenTXT, SaveTXT, OpenParquet, SaveParquet, OpenSQLite, QuerySQLite, SaveSQLite.

Конвертация

ToMatrix, ToBigData, Convert_Matrix_To_BigData, Convert_BigData_To_Matrix.

Создание

matrix, vector, zeros, ones, fill, range, Number, random, sample.

Графики

chart (bar, line, pie, hist, scatter, box, heatmap, pair) с Plotly и Matplotlib.

Отчёты

report, report_section, report_text, report_table, report_chart, report_save, report_show, report_save_pdf.

Ввод/вывод

InputShow, InputShowForm, InputListShow, PrintShow, LogToFile, LogOff.

Управление

for, while, break, if/then/else, try/catch, case/when/then/else, applyif, matrixmod.


👥 Для кого этот язык

  • Аналитики, которые устали от Excel, но не хотят учить Python.
  • Разработчики, которым нужен быстрый инструмент для ETL-задач.
  • Исследователи данных, работающие с большими объёмами.
  • Студенты, изучающие анализ данных.

🛠 Редактор

  • Подсветка синтаксиса.
  • Автодополнение с алиасами.
  • Динамическая справка.
  • Компилятор в .exe.
  • Тёмная и светлая темы.
  • Поиск и замена.
  • Консоль с копированием и сохранением.
  • Настройки шрифта, темы, языка и палитры синтаксиса.
  • Локализация: русский / английский.

📚 Документация

  • Справка внутри редактора (клик по слову или автодополнение).
  • Примеры в папке examples/.
  • Инструкция по сборке — BUILD_INSTRUCTIONS.txt.

🔗 Ссылки


🤝 Участие

Проект открыт для предложений и баг-репортов.


📄 Лицензия

MIT — см. LICENSE.


Сделано с ❤️ для аналитиков и разработчиков