使用Python做五中分班的数据可视化

前言

python真香,要是拿C++做这玩意我估计得debug半天

声明

我做这个没有任何政治、经济、社会层面上的意图,单纯是为了练习我的数据处理能力!

此过程没有任何五中学生的个人信息泄露

代码部分

可以直接跳过的因为写的一坨shit一样

import matplotlib.pyplot as plt
import matplotlib

matplotlib.rc("font", family="MicroSoft YaHei")

def getdata():
    """函数因涉及数据部分被我删减"""
    ...
    return datalist

def drawpie(cname, perlist, labels, exp):
    plt.text(0.5, 0.5, 'CREATED WITH ZNWILLBUR',
            fontsize=20, color='gray', alpha=0.3,
            ha='right', va='top')

    plt.pie(perlist,
            labels=labels,
            explode=tuple(exp),
            autopct="%.1f%%",
            rotatelabels=45,
            pctdistance=0.7
            )

    plt.title(f"原高一{cname}班分班去向")
    plt.savefig(f"原高一{cname}班分班去向.png")
    plt.clf()
    print(f"完成{cname}班")

if __name__ == "__main__":
    # 初始化数据
    datalist = getdata()  
    estus = []
    edata = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0,
            8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0}
    labels = ['1班', '2班', '3班', '4班', '5班', '6班', '7班',
            '8班', '9班', '10班', '11班', '12班', '13班', '14班']
    exp = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    for cname in range(1, 15):
        # 统计个数
        num = 0
        for data in datalist:
            if data[1] == cname:
                edata[data[2]] += 1
                num += 1
                
        # 统计百分数
        perlist = [edata[i]/num for i in range(1, 15)]

        # 去除百分数为0.0的值
        zerolist = []
        index = 0
        for i in perlist:
            if i == 0.0:
                zerolist.append(index)
            index += 1
        zerolist.reverse()

        for i in zerolist:
            perlist.pop(i)
            labels.pop(i)
            exp.pop(i)
        
        # 获取最大
        biggest_index = 0
        for p in perlist:
            if p == max(perlist):
                break
            biggest_index += 1
        
        exp[biggest_index] = 0.2

        # 生成饼图
        drawpie(cname, perlist, labels, exp)

        # 还原初始化
        edata = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0,
                8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0}
        labels = ['1班', '2班', '3班', '4班', '5班', '6班', '7班',
                '8班', '9班', '10班', '11班', '12班', '13班', '14班']
        exp = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        num = 0

效果图

原高一1班分班去向

原高一2班分班去向

原高一3班分班去向

原高一4班分班去向

原高一5班分班去向

原高一6班分班去向

原高一7班分班去向

原高一8班分班去向

原高一9班分班去向

原高一10班分班去向

原高一11班分班去向

原高一12班分班去向

原高一13班分班去向

原高一14班分班去向

后记

拿图记得标明出处

下载图片:https://znwillbur.asia/img/VisualizationShiftData/data.zip