使用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
效果图
后记
拿图记得标明出处
下载图片:https://znwillbur.asia/img/VisualizationShiftData/data.zip