Original size 1140x1600

Анализ GitHub-репозиториев

PROTECT STATUS: not protected
7

Описание

GitHub — это такая платформа для разработчиков, где они могут хранить, совместно работать и управлять своим кодом. Это как социальная сеть для программистов: здесь можно создавать репозитории (хранилища кода), делиться проектами, участвовать в чужих разработках, предлагать улучшения и отслеживать изменения.

В качестве материала для анализа был выбран датасет с сайта Kaggle. Этот датасет представляет особый интерес, так как отражает глобальные тренды в разработке ПО: популярность языков, динамику роста open-source-сообщества, предпочтения в лицензировании и взаимосвязь ключевых метрик.

В ходе изучения датасета было решено использовать графики следующих типов: Гистограмма Облако слов Линейный график Круговая диаграмма Тепловая карта

Цветовая палитра

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

График № 1 — Топ-10 репозиториев по звёздам

Звёзды являются ключевым фактором популярности репозитория, что позволяет изучить, какие репозитории актуальны и имеют известность на GitHub. Было необходимо отсортировать параметр stars_count, и взять первые 10 самых больших значений. Дальше эти значения нужно вывести параллельно с названиями репозиториев в гистограмму.

import pandas as pd import matplotlib.pyplot as plt from matplotlib import font_manager

df = pd.read_csv ('repository_data.csv')

font_path = 'gramatika_regular.ttf' font_manager.fontManager.addfont (font_path) prop = font_manager.FontProperties (fname=font_path)

top_repos = df.sort_values (by='stars_count', ascending=False).head (10)

plt.figure (figsize=(10, 6)) plt.barh (top_repos['name'], top_repos['stars_count'], color='black') plt.xlabel ('Количество звёзд', fontproperties=prop) plt.ylabel ('Репозитории', fontproperties=prop) plt.title ('Топ 10 самых популярных репозиториев по звёздам', fontproperties=prop) plt.gca ().invert_yaxis ()

plt.show ()

Original size 1012x542

График № 2 — Самые популярные языки программирования

Позволяет выделить доминирующие языки программирования через частоту их использования в репозиториях. Получать данные об этом будем по параметру primary_language, чтобы не учитывать второстепенные языки. Построим это всё в облако слов.

from wordcloud import WordCloud

language_counts = df['primary_language'].value_counts ()

language_data = language_counts.to_dict ()

def black_text_color (word, **kwargs): return «black»

wordcloud = WordCloud (width=800, height=400, background_color='white', font_path=font_path, color_func=black_text_color).generate_from_frequencies (language_data)

plt.figure (figsize=(10, 6)) plt.imshow (wordcloud, interpolation='bilinear') plt.axis ('off') plt.title ('Самые популярные языки программирования', fontsize=16) plt.show ()

Original size 794x431

График № 3 — Количество репозиториев по годам (до 2022 включительно)

Данный график позволяет выявить основные этапы развития GitHub-экосистемы. Изначально необходимо отфильтровать все даты до 2022 года, так как информация о репозиториях обрывается на середине 2023 года, что может создать неполноценную картину. Дальше создаём параметр year, в котором наши года будут храниться. Из всего этого строим линейный график.

df['created_at'] = pd.to_datetime (df['created_at'])

df = df[df['created_at'].dt.year <= 2022] df.loc[:, 'year'] = df['created_at'].dt.year

repos_by_year = df['year'].value_counts ().sort_index ()

plt.figure (figsize=(10, 6)) plt.plot (repos_by_year.index, repos_by_year.values, marker='o', color='black') plt.title ('Количество репозиториев по годам (до 2022 года включительно)', fontsize=32, fontproperties=prop) plt.xlabel ('Год', fontproperties=prop) plt.ylabel ('Количество репозиториев', fontproperties=prop) plt.grid (True) plt.show ()

Original size 875x542

График № 4 — Распределение лицензий среди репозиториев

Лицензии также являются важным фактором. Например, если видно, что MIT или Apache 2.0 лидируют, это говорит о том, что большинство проектов ориентированы на открытость и свободное использование. Отсортируем все те лицензии, процент использование которых меньше 1,5, переместив их в категорию 'Остальные'. Дальше визуализируем это всё в круговую диаграмму.

import numpy as np

licence_counts = df['licence'].value_counts ()

other_licences = licence_counts[licence_counts / licence_counts.sum () < 0.015].index

df['licence'] = df['licence'].replace (other_licences, 'Остальные') df['licence'] = df['licence'].replace ('Other', 'Остальные')

licence_counts = df['licence'].value_counts ()

colors = plt.cm.Greys (np.linspace (0.2, 0.8, len (licence_counts)))

plt.figure (figsize=(8, 8)) plt.pie (licence_counts, labels=licence_counts.index, autopct='%1.1f%%', startangle=140, colors=colors, textprops={'fontproperties': prop}) plt.title ('Распределение лицензий среди репозиториев', fontsize=32, color='black', fontproperties=prop) plt.show ()

Original size 786x654

График № 5 — Корреляция параметров репозиториев

Выявление связи между метриками активности (звёзды, форки, наблюдатели, пулл-реквесты) очень важный аспект, потому что оно может подтвердить, например, взаимозависимость количества звёзд и количества наблюдателей. Подготовим данные по всем параметрам из numeric_cols, переведём их и визуализируем через seaborn.

import seaborn as sns

sns.set_theme (font=prop.get_name ())

numeric_cols = ['stars_count', 'forks_count', 'watchers', 'pull_requests', 'commit_count']

col_translation = { 'stars_count': 'Количество звезд', 'forks_count': 'Количество форков', 'watchers': 'Количество наблюдателей', 'pull_requests': 'Количество пулл-реквестов', 'commit_count': 'Количество коммитов' } df_numeric = df[numeric_cols].rename (columns=col_translation)

correlation_matrix = df_numeric.corr ()

plt.figure (figsize=(10, 6)) sns.heatmap (correlation_matrix, annot=True, cmap="Greys», fmt=».2f», linewidths=0.5, cbar=True)

plt.title ('Матрица корреляции параметров репозиториев', color='black')

plt.show ()

Original size 957x719

Блокнот и датасет

Анализ GitHub-репозиториев
7
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more