Itinai.com it company office background blured chaos 50 v 7b8006c7 4530 46ce 8e2f 40bbc769a42e 2

Кодовый датасет из Nemotron‑v3: потоковый Pandas и tiktoken

Itinai.com it company office background blured chaos 50 v 7b8006c7 4530 46ce 8e2f 40bbc769a42e 2

Почему визуализация репозитория важна?

Когда в каталоге скопилось несколько десятков тысяч файлов, трудно представить «внутреннее устройство» проекта. Простой график сразу показывает, какие языки доминируют, какие типы файлов встречаются чаще всего и насколько глубоко зарыты файлы в иерархии каталогов. Это помогает быстро выявить аномалии, оптимизировать структуру проекта и принять обоснованные решения о дальнейшем развитии.

Что будем строить?

С помощью 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, чтобы каждый пуш генерировал актуальные графики.

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

Запустите свой ИИ проект бесплатно

ИИ-агенты искусственный интеллект онлайн для бизнеса

Лучший ИИ онлайн