利用python解决图中问题

img

请问图中的对排名相同的大学,如排名均为“201~205“,处理后排名分别为201,202等以及同一个国家进入榜单的学校排名这两个要求该如何处理?用越基础越简单的方法越好

第一个问题,排名相同的大学可以用计数,如果有5所大学的排名都是201-205,分别设置为201、202、203、204和205。
下一个问题,对于同一个国家进入榜单的学校排名,先对所有学校按照排名进行排序,再遍历列表,对于同一个国家的学校,将它们的排名设置为相同的值,哈希表能够实现这种需求,将国家作为键,将该国家的排名作为值。

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7554040
  • 这篇博客你也可以参考下:干货来袭!3天0基础Python实战项目快速学会人工智能必学数学基础全套(含源码)(第2天)微积分篇:极限与导数、梯度下降与积分
  • 同时,你还可以查看手册:python- 定义扩展类型:已分类主题- 对象展示 中的内容
  • 除此之外, 这篇博客: 【Python数据分析与可视化】关于星巴克数据分析与制图的九道题中的 3.打印出全世界一共有多少个国家开设了星巴克门店,显示门店数量排名前10和后10的国家 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  

    结果:

     4. 用柱状图绘制排名前10的分布情况,横坐标有国家名,纵坐标为数量。

    结果:

     

      5、显示拥有星巴克门店数量排名前10的城市。

     

    结果:

     

     6.绘制星巴克门店数前10的城市分布柱状图,横坐标有城市名,纵坐标为数量。

    结果:

     

    7.按照星巴克门店在中国的分布情况,统计排名前10的城市。

     

    结果:

     

    8.绘制柱状图,横坐标有城市名,纵坐标为数量。

     

    结果 :

        9、用饼状图显示星巴克门店的经营方式有几种。(ownership)

     结果:

    源文件:

    1.
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    
    shuju=pd.read_csv('directory.csv')
    print(shuju)
    
    2.
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    
    shuju=pd.read_csv('directory.csv')
    A=shuju['Brand'].value_counts()
    print("星巴克旗下品牌有:\n%s"%A)
    
    3.
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    
    shuju=pd.read_csv('directory.csv')
    B=len(shuju['Country'].unique())
    print("全世界一共有%d个国家开设了星巴克门店。"%B)
    C=shuju['Country'].value_counts()
    print("排名前十的国家和数量为:\n%s"%C[:10])
    print("排名后十的国家和数量为:\n%s"%C[-10:])
    
    4.
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    plt.rcParams["font.family"]=['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    shuju=pd.read_csv('directory.csv')
    C=shuju['Country'].value_counts()
    plt.figure(figsize=(10,5))
    keduxian = list(C[:10].index)
    a="国家"
    b="数量"
    c="星巴克门店数量排名前10的国家"
    plt.xlabel(a)
    plt.ylabel(b)
    plt.title(c)
    plt.bar([i for i in keduxian], C[:10])
    plt.show()
    
    5.
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    
    shuju=pd.read_csv('directory.csv')
    D= shuju['City'].value_counts()
    print(D[:10])
    
    6.
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    
    plt.rcParams["font.family"]=['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    shuju=pd.read_csv('directory.csv')
    D= shuju['City'].value_counts()
    plt.figure(figsize=(10,5))
    keduxian1 = list(D[:10].index)
    d="城市"
    e="数量"
    f="星巴克门店数前10的城市"
    plt.xlabel(d)
    plt.ylabel(e)
    plt.title(f)
    plt.bar([i for i in keduxian1], D[:10])
    plt.show()
    
    7.
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    shuju=pd.read_csv('directory.csv')
    china = shuju[shuju['Country'] == 'CN'] 
    chinacity=china['City'].value_counts()
    print("排名前十的中国城市和数量为:\n%s"%chinacity[:10])
    
    
    8.
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    plt.rcParams["font.family"]=['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    shuju=pd.read_csv('directory.csv')
    china = shuju[shuju['Country'] == 'CN'] 
    chinacity=china['City'].value_counts()
    plt.figure(figsize=(10,5))
    keduxian2 = list(chinacity[:10].index)
    plt.xlabel('城市')
    plt.ylabel('门店数量')
    plt.title('中国星巴克门店数量排名前10的城市')
    plt.bar([i for i in keduxian2], chinacity[:10])
    plt.show()
    
    
    9.
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    plt.rcParams["font.family"]=['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    shuju=pd.read_csv('directory.csv')
    F=shuju['Ownership Type'].value_counts()
    plt.figure(figsize=(10,7))
    plt.pie(F,labels=F.index)
    plt.title("星巴克门店的经营方式")
    plt.show()
    
    

     

    自己也是新手,英语不好,名称定义中文拼音。

     

  • 您还可以看一下 余强老师的爬虫微课5小时 Python学习路线课程中的 19全国2300所学校招生统计(十五:高考派十四万多条真实数据统计)小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以通过Python编写代码来解决该问题。

    对于将相同排名的大学改成排名分别为201、202等,可以按照以下步骤操作:

    1. 读取数据,将排名信息读入到一个列表中。
    2. 对排名列表进行去重,确定有多少个唯一的排名。
    3. 将每个排名从最小值开始,按顺序重新编号(如201为1,202为2等),并将结果保存到一个字典中。
    4. 遍历原数据,并通过字典将原排名替换为新排名。
    5. 输出替换后的数据。

    以下是一组可能实现该方案的Python代码:

    # 读取数据
    data = [
        ["学校A", "201-205"],
        ["学校B", "201-205"],
        ["学校C", "206-210"],
        ["学校D", "211-215"],
        ["学校E", "206-210"]
    ]
    
    # 建立排名字典
    rank_dict = {}
    unique_ranks = set()
    for row in data:
        rank_range = row[1]
        ranks = list(map(int, rank_range.split("-")))
        unique_ranks.update(ranks)
    for i, rank in enumerate(sorted(unique_ranks)):
        rank_dict[rank] = i + 1
    
    # 替换排名
    for row_idx, row in enumerate(data):
        rank_range = row[1]
        ranks = list(map(int, rank_range.split("-")))
        new_ranks = [rank_dict[rank] for rank in ranks]
        new_rank_range = f"{min(new_ranks)}-{max(new_ranks)}"
        data[row_idx][1] = new_rank_range
    
    # 输出替换后的数据
    print(data)
    

    对于处理同一个国家进入榜单的学校排名,可以提取各个国家的学校,为每个国家的学校编号添加一个"国家+排名"的组合值,然后再将该值替换原来的排名。以下是一组可能实现该方案的Python代码:

    # 读取数据
    data = [
        ["中国", "学校A", "201"],
        ["美国", "学校B", "202"],
        ["美国", "学校C", "203"],
        ["俄罗斯", "学校D", "204"],
        ["美国", "学校E", "205"],
        ["俄罗斯", "学校F", "206"]
    ]
    
    # 建立国家字典
    country_dict = {}
    for row in data:
        country = row[0]
        if country not in country_dict:
            country_dict[country] = []
        country_dict[country].append(row)
    
    # 替换排名
    for country, country_data in country_dict.items():
        rank_dict = {}
        rank_idx = 1
        for row in country_data:
            rank = row[2]
            rank_str = f"{country}{rank}"
            if rank_str not in rank_dict:
                rank_dict[rank_str] = rank_idx
                rank_idx += 1
            row[2] = rank_str
        for row in country_data:
            rank_str = row[2]
            new_rank = rank_dict[rank_str]
            row[2] = str(new_rank)
    
    # 输出替换后的数据
    new_data = []
    for country_data in country_dict.values():
        new_data += country_data
    print(new_data)