Python中如何可视化GitHub上不同语言star最多的项目

我把以下 10 种编程语言在 GitHub 上 star 最多的项目可视化了一下,贴出来给大家参考:

看看有没有大家喜欢的语言:),排名不分先后

(链接里是具有简单交互功能的图表,而下面贴出来的只是静态的预览图)

Python: Python

Go Go

下面这些就不贴图了:

C

C#

C++

R

PHP

JavaScript

Java

Perl

原文链接


Python中如何可视化GitHub上不同语言star最多的项目

13 回复

docker -> moby


这个问题挺有意思的,用Python来可视化GitHub上不同语言里star最多的项目,我们可以分几步走:爬数据、处理数据、最后画图。核心就是调用GitHub API拿到数据,然后用matplotlib或者seaborn画出来。

下面是一个完整的例子,我们按语言分组,找出每个语言里star数最高的项目,然后做个条形图。

import requests
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime

# GitHub API的基础URL和你的token(如果没有,可以去掉,但会有速率限制)
BASE_URL = "https://api.github.com"
# 如果需要认证,取消下面这行的注释,并把YOUR_TOKEN换成你的token
# headers = {'Authorization': 'token YOUR_TOKEN'}
headers = {}

def get_top_repo_by_language(languages, max_repos_per_lang=10):
    """
    获取指定编程语言中star最多的仓库。
    
    参数:
        languages: 一个包含编程语言字符串的列表,例如 ['python', 'javascript', 'java']
        max_repos_per_lang: 每种语言最多获取多少个仓库进行排序(默认10个)
    
    返回:
        一个Pandas DataFrame,包含语言、仓库名、star数等信息。
    """
    all_data = []
    
    for lang in languages:
        print(f"正在获取 {lang} 语言的数据...")
        # 构建搜索查询,按star数降序排列
        query = f"language:{lang}+sort:stars"
        url = f"{BASE_URL}/search/repositories?q={query}&per_page={max_repos_per_lang}"
        
        try:
            response = requests.get(url, headers=headers)
            response.raise_for_status()  # 检查请求是否成功
            data = response.json()
            
            for repo in data.get('items', []):
                all_data.append({
                    'language': lang,
                    'repo_name': repo['full_name'],
                    'stars': repo['stargazers_count'],
                    'forks': repo['forks_count'],
                    'url': repo['html_url'],
                    'description': repo['description'],
                    'updated_at': repo['updated_at']
                })
        except requests.exceptions.RequestException as e:
            print(f"获取 {lang} 数据时出错: {e}")
            continue
    
    df = pd.DataFrame(all_data)
    # 按语言分组,并找出每组中star数最高的那个仓库
    top_repos = df.loc[df.groupby('language')['stars'].idxmax()].reset_index(drop=True)
    return top_repos

def visualize_top_repos(df):
    """
    可视化每个语言中star最多的仓库。
    
    参数:
        df: 包含top仓库数据的DataFrame
    """
    if df.empty:
        print("没有数据可可视化。")
        return
    
    # 按star数排序,让图表看起来更有序
    df = df.sort_values('stars', ascending=False)
    
    plt.figure(figsize=(12, 8))
    bars = plt.barh(df['language'], df['stars'], color='skyblue')
    plt.xlabel('Star数量', fontsize=12)
    plt.title('GitHub上不同编程语言中Star最多的项目', fontsize=14, pad=20)
    plt.gca().invert_yaxis()  # 让最高的在最上面
    
    # 在每个条形末端显示star数
    for bar, star in zip(bars, df['stars']):
        width = bar.get_width()
        plt.text(width + max(df['stars'])*0.01, bar.get_y() + bar.get_height()/2,
                f'{star:,}', va='center', fontsize=10)
    
    plt.tight_layout()
    plt.show()

# 主程序
if __name__ == "__main__":
    # 定义你想分析的语言列表
    languages_to_check = ['python', 'javascript', 'java', 'c++', 'go', 'rust', 'typescript']
    
    # 获取数据
    top_repos_df = get_top_repo_by_language(languages_to_check, max_repos_per_lang=15)
    
    # 打印结果看看
    print("\n各语言中Star最多的仓库:")
    print(top_repos_df[['language', 'repo_name', 'stars']].to_string(index=False))
    
    # 可视化
    visualize_top_repos(top_repos_df)

代码解释:

  1. get_top_repo_by_language 函数

    • 接收一个语言列表(比如 ['python', 'javascript'])。
    • 对每种语言,调用GitHub的搜索API (/search/repositories),查询条件是按该语言筛选并按star数排序。
    • 从返回的JSON数据里提取我们需要的信息:仓库全名、star数、fork数等。
    • 最后,用Pandas的 groupby 找出每种语言里star数最高的那个仓库,返回一个DataFrame。
  2. visualize_top_repos 函数

    • 接收上面生成的DataFrame。
    • 用matplotlib创建一个水平条形图,y轴是编程语言,x轴是star数量。
    • 为了让图表更清晰,我们按star数从高到低排序,并在每个条形后面标注具体的star数。
  3. 主程序部分

    • 定义你想分析的语言列表。
    • 调用函数获取数据并打印出来。
    • 调用函数生成图表。

运行前你可能需要做的:

  • 安装库:如果你还没装 requests, pandas, matplotlib,用pip装一下:pip install requests pandas matplotlib
  • GitHub API限制:未认证的请求每小时只能发60次。如果你要查很多语言,建议在代码里加上你的GitHub Personal Access Token(在GitHub设置里生成)。把上面代码里的 headers = {} 换成:
    headers = {'Authorization': 'token YOUR_ACTUAL_TOKEN'}
    
    这样每小时可以发5000次请求。

输出示例: 运行后,你会在控制台看到一个表格,大概长这样:

    language         repo_name      stars
     python     torvalds/linux   150000
 javascript  facebook/react     210000
      java   spring-projects...  50000

同时会弹出一个条形图,直观地展示哪个语言里的“明星项目”获得的star最多。

总结建议: 这个方案直接调API拿数据画图,简单有效,你可以根据需要调整语言列表或图表样式。

为何没有我大 iOS 的两大语言

已经补充了

Swift 一堆 MD 。。。

楼主你应该可以做一个 Markdown 的——这样就可以看出到底 markdown 程序员到底是哪种人了

C 的简直不能更威武霸气了,今天才看到 Telegram 是用 C 搞的,有点吃鲸~

还有 CSharp 下面的第二名,呵呵呵呵

有些编程语言的解释器都是 c 写的. 底层的东西也只能用 c 或 c++ 了

js 的数据高出其他语言一个数量级……

thefuck 真是霸气侧漏啊

非常感谢。厉害了我的哥。数据哪里来的

回到顶部