С твердыми цифрами

В Simiotics мы пишем много кода, который анализирует код. GitHub - это крупнейшее в мире хранилище исходного кода. Это означает, что мы тратим много времени на анализ данных с GitHub. зеркало - это проект с открытым исходным кодом, в котором используются некоторые из наших поисковых роботов.

Хронология GitHub документирует рост доминирования GitHub как бизнеса. Мы будем использовать данные, собранные зеркалом, чтобы дополнить эту временную шкалу статистикой репозитория. Используемые нами данные были просканированы с конечной точки API / repositories GitHub. Вы можете запустить код, использованный для анализа, используя Блокнот Rise of GitHub Jupyter в зеркале репозитория.

Наша цель состояла в том, чтобы использовать информацию, которую GitHub предоставляет нам о общедоступных репозиториях, чтобы визуализировать, как общее количество репозиториев на GitHub росло с течением времени.

Большая часть работы, проделанной для создания этого сообщения в блоге, ушла на сканирование GitHub с использованием зеркала. При использовании подходящего бесплатного уровня t2.micro Экземпляр EC2 и запросов, аутентифицированных с помощью одной учетной записи GitHub, зеркалу потребовалось около 10 дней для получения базовых метаданных обо всех общедоступных репозиториях GitHub. .

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

Это визуализация, которую мы построили на основе сканирования. Мы пометили график интересными событиями из Хроники GitHub.

Конечная точка / repositories не возвращает дату создания каждого репозитория. Чтобы получить дату создания репозитория, мы должны запросить его конкретный URL-адрес API и прочитать поле created_at.

На GitHub более 128 миллионов публичных репозиториев. Одна учетная запись GitHub может выполнять не более 5000 запросов API в час требуемого типа. Это означает, что для получения даты создания каждого общедоступного репозитория потребуется 25600 часов, что составляет почти 3 года. Тем временем пользователи GitHub продолжат создавать еще больше общедоступных репозиториев.

Вместо этого мы решили получить время создания для равномерно распределенной выборки репозиториев и оценить количество репозиториев между выборками по разнице в их полях GitHub id. Списки репозиториев, которые возвращает конечная точка / repositories GitHub, содержат поле id для каждого репозитория. Это целочисленный идентификатор, который, похоже, используется как общедоступными, так и частными репозиториями. Хотя неясно, последовательно ли увеличиваются эти идентификаторы, наш анализ показывает, что это так.

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

Еще одна интересная статистика:

  1. Количество публичных репозиториев на GitHub примерно на 26 февраля 2020 г. = 128 411 417
  2. Количество владельцев публичных репозиториев на GitHub примерно на 26 февраля 2020 г. = 23 298 697

Если вы хотите воспроизвести этот анализ или расширить его, то Rise of GitHub Jupyter notebook - хорошая отправная точка. Мы разместили наш набор данных с образцами репозиториев, для которых мы собрали полные метаданные репозитория в виде Gist. Данные представлены в формате строки JSON.

В следующей статье моей серии GitHub я проанализирую распределение языков программирования в публичных репозиториях GitHub.

Свяжитесь со мной в LinkedIn, если у вас есть вопросы, и подпишитесь на меня в Twitter.