Почему визуализация репозитория важна?
Когда в каталоге скопилось несколько десятков тысяч файлов, трудно представить «внутреннее устройство» проекта. Простой график сразу показывает, какие языки доминируют, какие типы файлов встречаются чаще всего и насколько глубоко зарыты файлы в иерархии каталогов. Это помогает быстро выявить аномалии, оптимизировать структуру проекта и принять обоснованные решения о дальнейшем развитии.
Что будем строить?
С помощью matplotlib и pandas подготовим четыре визуализации, размещённые в сетке 2×2:
- Топ‑12 языков программирования по количеству файлов.
- Топ‑12 расширений файлов.
- Гистограмма глубины вложенности каталогов.
- Топ‑10 репозиториев, откуда импортированы файлы.
Подготовка данных
Предположим, у вас уже есть DataFrame df с колонками:
lang– язык программирования.ext– расширение файла.depth– количество символов «/» в полном пути (глубина).repo– название репозитория‑источника.
Если данных нет, их можно собрать, например, с помощью GitHub Linguist или скриптов на os.walk.
Код построения графиков
Ниже – минимально необходимый код. Он полностью автономный и не зависит от внешних стилей.
import matplotlib.pyplot as plt
import pandas as pd
# df – ваш DataFrame
fig, ax = plt.subplots(2, 2, figsize=(14, 9))
# 1. Топ‑12 языков
lang_counts = df['lang'].value_counts().head(12)
lang_counts.iloc[::-1].plot.barh(ax=ax[0, 0], color="#76b900")
ax[0, 0].set_title("Top 12 languages (sample)")
ax[0, 0].set_xlabel("files")
# 2. Топ‑12 расширений
df['ext'].value_counts().head(12).iloc[::-1].plot.barh(ax=ax[0, 1], color="#5b8def")
ax[0, 1].set_title("Top 12 file extensions (sample)")
ax[0, 1].set_xlabel("files")
# 3. Глубина вложенности
df['depth'].clip(upper=12).plot.hist(bins=range(0, 14), ax=ax[1, 0],
color="#f4a261", edgecolor="white")
ax[1, 0].set_title("Directory nesting depth")
ax[1, 0].set_xlabel("'/' count in path")
# 4. Топ‑10 репозиториев
df['repo'].value_counts().head(10).iloc[::-1].plot.barh(ax=ax[1, 1], color="#9b5de5")
ax[1, 1].set_title("Most common repos (sample)")
ax[1, 1].set_xlabel("files")
plt.tight_layout()
plt.show()
Разбор кода по шагам
- fig, ax = plt.subplots(2, 2, figsize=(14, 9)) – создаём сетку из четырёх подграфиков. Размер 14×9 дюймов удобно помещает все детали.
- value_counts() считает частоту появления каждого значения в колонке.
- .head(12) оставляет только 12 самых популярных записей.
- .iloc[::-1] разворачивает порядок, чтобы на графике сверху был самый частый элемент (читаем слева направо, снизу вверх).
- clip(upper=12) ограничивает глубину вложенности 12‑ю уровнями – более глубокие каталоги обычно редки и могут исказить гистограмму.
- plt.tight_layout() автоматически подгоняет отступы, чтобы подписи не налезали друг на друга.
Полезные подсказки
- Для больших наборов данных замените
.head(12)на.nlargest(12)– быстрее. - Если хотите видеть абсолютные цифры на столбцах, добавьте
ax[0,0].bar_label(ax[0,0].containers[0])после построения графика. - Цветовую схему можно менять, подбирая оттенки из документации matplotlib.
- Чтобы сохранить результат в файл, используйте
plt.savefig('repo_stats.png', dpi=300, bbox_inches='tight').
Что дальше?
Получив набор визуализаций, вы можете:
- Отправить их в отчёт руководству – цифры говорят громче, чем таблицы.
- Сравнить несколько веток проекта, наложив графики друг на друга.
- Автоматизировать процесс: добавить скрипт в CI, чтобы каждый пуш генерировал актуальные графики.
Всё, что нужно, – небольшая часть кода и несколько строк данных. Теперь вы видите репозиторий «с высоты птичьего полёта» и можете принимать обоснованные решения без лишних догадок.





















