Оригинальный подход, молодец (:
Если сделать подобное в 3D и с размером шаров, пропорциональным размеру директорий или количеству файлов в них, получится прикольная утилита для анализа засорённости файлопомойки.
Спасибо.
Про соответствие шаров размеру идея тоже приходила в голову, а про 3D нет.
Надо будет попробовать. Возможно на чем то более мощном, чем питон. Он крут для быстрого создания прототипов, но пока я не смог заставить змия быстро работать.
Не соглашусь, здесь не питон будет узким местом.
Скорость работы будет, в основном, определяться скоростью работы с файловой системой.
Расход памяти будет большим в любом случае, и, большей частью, будет определяться потреблением networkx — все-таки число узлов огромное.
Да, проблема памяти существенна. Возможно, надо сбрасывать данные на диск, по мере увеличения графа. Но возникнет вопрос как потом вывести единый результат.
Немного потестил на 10 000 ребер (случайное соединение между 10 000 узлами).
Много времени уходит на построение самого графа. В коде это строка: nx.draw(G, with_labels=False, node_color="blue", alpha= 0.6, node_size=50)
При этом было съедено около 50Mb памяти и потребовалось около получаса на построение.
Так что здесь все больше упирается в процессорное время, а не в память.
Как Вы думаете, стоит ли поменять библиотеку с matplotlib на pygraphviz для ускорения прорисовки? Pygraphviz это прямой интерфейс к библиотеке, а matplotlib делает расчеты, базируясь на NumPy, что может замедлять работу.
И питон потянет, Вы просто не умеете его готовить.
Когда работаете с такими вещами, думаю и на C пришлось бы оптимизировать. Нечего весь disk tree в память структурой пихать :).
Жаль 3д мне не дается, так бы мог бы помочь.
Лет шесть уже пользуюсь маленькой программкой Scanner для анализа той самой помойки. Там все реализовано не графом, а разветвленной диаграммой.
Но интересно то, что там же лежат Delphi sources утилиты. Работает быстро, думаю интересно будет покопаться.
Я все задачи визуализации графов делаю с помощью graphviz. На питоне скрипты пишут текстовые файлы типа A -> B
B -> C
B -> D
и кормят их приложению graphviz. Полный контроль над внешним видом графов, надписи в узлах и на ребрах и генерация тегов AREA MAP и много еще чего. Правда операций линейной алгебры и теории графов не поддерживает. Не нужно держать в памяти весь граф дисковой системы — по мере обхода дерева просто пишешь в файл. А graphviz очень хорошо справляется с большими графами, правда может сгенерить простыню на 100Мб (графический файл PNG или JPEG).
Через gv вы создаете структуру в памяти. Если говорить об очень больших графах, то сливать данные в текстовый файл можно до бесконечности (правда бумаги много понадобится для распечатки графа :)
Нее, труъ-ниндзя хранят порно в шифрованных многотомных архивах, разбросанных по разным дискам и замаскированных под DLL, EXE, SYS и прочие файлы, уже своим названием кричащие о своей неприкосновенности :)
Визуализация каталогов на Python средствами NetworkX