Во время работы над магистерской программой Игровые технологии в Университете прикладных наук Бреда (BUas) я столкнулся с интересной проблемой: Как я выполняю систематический обзор репозиториев GitHub?

Ни одна стандартная литература по методологии не охватывает этот случай. Хорошо, хорошо GitHub относительно новый и особенный!

Отсутствие ответов в литературе привело меня в дебри интернета. К сожалению, при поиске в Google «Систематический обзор репозиториев GitHub» вы не найдете руководства или действительно хорошего репозитория GitHub с каким-либо программным обеспечением.

То, что я мало нахожу в обычном Google, интересно, потому что Google Scholar дает вам много записей при поиске обзоров на GitHub. К сожалению, многие из этих обзоров, как обычно, находятся за платным доступом. Более того, в этих документах обычно просто говорится: «Мы сделали это описание», но редко можно найти какой-либо код, или если код и есть, то он написан на каком-то малоизвестном языке, который среднестатистический разработчик игр не использует.

Ну, я просто немного скорректировал свой поиск. Наконец, я наткнулся на эту фантастическую статью Департамента информационных и вычислительных наук Утрехтского университета: Систематический обзор клинического программного обеспечения с открытым исходным кодом на GitHub для улучшения повторного использования программного обеспечения в умном здравоохранении от Чжэнру Шен и Марко Спруит. Они проделали фантастическую работу, создав документ, в котором шаг за шагом объясняется, как проводить систематический обзор репозиториев GitHub!

Позвольте мне дать вам TL; DR (для получения более подробной информации вам нужно прочитать мою статью позже или ссылку на исходную статью выше):

Извлечение данных

  1. Мы делаем предварительный поиск нашей темы с некоторыми ключевыми словами или темами, которые нам нравятся, используя GitHub Search и GitHub Topics.
  2. Мы пробуем это на нескольких языках, чтобы найти правильный язык (я говорю о естественных языках, таких как английский). Может быть, наша конкретная тема чаще встречается на испанском, чем на английском, или нам нужно проанализировать и то, и другое. Это важно знать.
  3. Можем ли мы уже иметь временные рамки, основанные на нашем обзоре литературы? Это важно учитывать при поиске чего-либо на GitHub.
  4. Нам также необходимо решить: языки программирования важны или нет? Что вообще нужно от этого поиска для нашего анализа данных? Для этого рекомендую открыть справочник REST API: GitHub search REST API. Здесь есть список вещей, которые вы можете извлечь.
  5. 4.1 Нужна ли мне дополнительная информация помимо репозитория? Или использование размера байта имеет важное значение? Если да, проверьте остальную часть документации по API. Ознакомиться со справочником по API
  6. Мы подключаемся к GitHub search REST API с помощью нашего скрипта python с помощью токена: Как использовать токен для аутентификации? Мы используем Python и PyGitHub, которые выполняют большую часть работы. для нас.
  7. Мы можем определить несколько запросов для поиска, если это необходимо для вашей темы. GitHub позволяет выполнять поиск помимо обычных запросов, таких как языки сценариев, также по темам: topic:scripting-languages. Использование тематических запросов помимо обычных запросов может увеличить результаты вашего поиска. Кроме того, вы можете исключить вещи. Например, если вы хотите исключить из поиска все расширения Visual Studio, все, что вам нужно сделать, это: языки сценариев НЕ Visual+Studio (важно отметить +). потому что в противном случае он будет игнорировать только Visual, а не Visual Studio). Для получения дополнительной информации о синтаксисе поиска проверьте: Понимание синтаксиса поиска
  8. После последнего шага нужно сохранить выводы в какой-либо форме. Например, вы можете сохранить свои результаты в файле CSV или в базе данных.

Обработка данных

На этом мой TL;DR заканчивается, так как это сильно зависит от вашей темы. Например, вы можете провести описательный анализ, пример которого можно найти в оригинальной статье. Вы также можете использовать обобщенные аддитивные модели для обработки данных. Кроме того, вам может понадобиться ИИ для анализа всех файлов README, описаний и т. д., чтобы извлечь дополнительные данные, которые вам нужны. Zhengru Shen и Marco Spruit используют Watson для моделирования некоторых своих тем (см. 2.4. Тематическое моделирование).

В любом случае, как разработчик игр (или разработчик игр), я люблю примеры кода и практичные вещи! Вот почему мне очень нравится статья, о которой я упоминал ранее, поскольку авторы также предоставили репозиторий GitHub с исходным кодом используемого кода для их изучения. С академической точки зрения это радует мое сердце, поскольку я смог воспроизвести их статью. Разработчик во мне счастлив, так как у меня есть пример сценария для моей статьи! Оригинальный исходный код вы можете найти здесь: ianshan0915/clinical-opensource-projects (набор скриптов на Python).

Внимание! Этот репозиторий не предназначен для повторного использования в вашем собственном проекте. Вы можете (как и я), но вам все равно нужно читать исходный код и находить то, что вам не нужно. Как я уже сказал, я люблю, абсолютно люблю пример кода! Вот для чего этот код.

Что содержит этот репозиторий? Прежде чем мы откроем репозиторий GitHub и клонируем его, давайте посмотрим, как они описывают это в своей статье:

Конвейер извлечения данных был написан на Python с использованием сторонней библиотеки «PyGitHub. Конвейер принимал выбранные условия поиска в качестве входных данных и получал данные репозитория в формате JSON. Ответы JSON были сначала отфильтрованы, а затем преобразованы в записи базы данных и помещены в таблицы в базе данных MySQL. Репозитории без описания или без указания языка программирования были исключены из дальнейшего анализа по той причине, что основное внимание в нашем исследовании уделялось клиническому программному обеспечению. Весь процесс можно воспроизвести, запустив сценарии Python по ссылке [22]. Кроме того, замена поискового термина другим масштабирует конвейер на другие домены.» (22: Исходные коды клинического программного обеспечения с открытым исходным кодом. Доступно в Интернете: https://github.com/ianshan0915/clinical- opensource- проектов (по состоянию на 25 ноября 2018 г.)) Систематический обзор клинического программного обеспечения с открытым исходным кодом на GitHub для улучшения повторного использования программного обеспечения в умном здравоохранении

Прочитав описание их конвейера извлечения данных, мы открываем репозиторий. Однако в README нет инструкций по использованию/установке скриптов. Но не беспокойтесь, у меня есть краткий обзор того, что вам нужно:

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

Моя точка зрения

Вот что я сделал, и в итоге у меня получился небольшой скрипт Python, который можно использовать для моих целей. Если вам нужен только сбор данных с GitHub, вы также можете использовать его: GitHub search query python

Скрипт позволяет написать простой JSON-файл конфигурации:

{ "token": "my token", "readme_dir": "./", "output": "./", "format": "CSV", "criteria": { "time": { "min": 2010, "max": 2022 } }, "terms": [ "MY SEARCH QUERY", "MY SEARCH QUERY", ], "attrs": [ "id", "full_name", ] }

Для связи с GitHub API вам нужен токен, который вы можете получить через свою учетную запись GitHub. Это поле является необязательным, и вы также можете передать его в качестве аргумента скрипту, если хотите! На момент написания у вас есть почасовая частота запросов 5000 запросов. Кроме того, скрипт подчиняется некоторому времени восстановления между запросами, чтобы не быть заблокированным DDOS-защитой API. Поле вывода позволяет указать, где будут храниться собранные вами данные. Имя файла будет repositories_DATE.[csv,json], так как я решил выложить файл CSV или JSON, вы можете разобрать его позже, если вам нужно. Если вам нужно загрузить README файлов, вы также указываете поле readme_dir. Они будут сохранены там repo + date. Если его нет, скрипт считает, что они вам не нужны. Критерии принимают временные рамки от того, когда до того, когда вам это нужно, которые будут использоваться для сбора репозиториев в течение определенного периода времени. Сердцем вашей конфигурации является список терминов, которые вы ищете:

"terms": [ "topic:visual-scripting-language NOT Visual+Studio", "topic:visual-programming-language NOT Visual+Studio", "topic:visual-programming NOT Visual+Studio", "topic:visual-scripting NOT Visual+Studio", "topic:visual-programming-editor NOT Visual+Studio", "topic:dataflow-programming NOT Visual+Studio" ],

Это будет выполнять критерии для этих условий поиска каждый раз!

И последнее, но не менее важное: у нас есть attrs, которые позволяют вам определять нужные вам поля из репозитория REST API. Там больше информации о том, что писать: GitHub search REST API

Теперь вы можете задаться вопросом, как на самом деле запустить этот скрипт:

python github-search-query.py --help

Предыдущая команда даст вам некоторые идеи о том, как ее запустить. Но есть более быстрый способ:

python github-search-query.py config.json

И если вы хотите передать токен:

python github-search-query.py --token my_token config.json

Ну вот и все! Получайте удовольствие от сбора данных!

Первоначально опубликовано на https://simonrenger.de 27 декабря 2021 г.