您当前的位置:首页 > 计算机 > 编程开发 > Python

Python爬虫:全国大学招生信息(二):生源数据分析(matplotlib)

时间:08-23来源:作者:点击数:

在上一篇文章(https://www.cdsy.xyz/computer/programme/Python/230823/cd45618.html)中爬取了6W+条json数据,接下来通过2D可视化来分析这些数据。需要使用的是matplotlib模块。

之前我们获取了一个大学名字对应url的txt,通过大学名字去6w条数据中检索同一学校的各地区招生数进行统计

先随便拿一条数据观察一下

data列表是我们要关心的数据,上图中表示有13个专业的数据

plan则是招生人数

代码:

import json
import matplotlib.pyplot as plot

f=open('D:/PyGaokaopai/majorinfo.txt','r',encoding='utf-8')
datastr=f.read()
dataList = []
#获取6w+条json数据转化为字典
for str in datastr.split('\n'):
    data = json.loads(str)
    dataList.append(data)

area = {'黑龙江':'东北','吉林':'东北','辽宁':'东北','上海':'华东','江苏':'华东','浙江':'华东','安徽':'华东','福建':'华东','江西':'华东','山东':'华东','北京':'华北'
    , '天津': '华北','山西':'华北','河北':'华北','内蒙古':'华北','河南':'华中','湖北':'华中','湖南':'华中','广东':'华南','广西':'华南','海南':'华南','重庆':'西南'
    , '四川': '西南','贵州':'西南','云南':'西南','西藏':'西南','陕西':'西北','甘肃':'西北','青海':'西北','宁夏':'西北','新疆':'西北'}

#获取3054个学校名字
def getSchoolNameList():
    f1 = open('schoolurl.txt', 'r', encoding='utf-8')
    schoolName = []
    while True:
        try:
            line = f1.readline()
            name = line.split(',')[0]
            schoolName.append(name)
        except Exception as e:
            pass
        if (not line):
            break
    f1.close()
    return schoolName

#画图并保存
def saveImg(school,areanum):
    labels = areanum.keys()
    values = areanum.values()
    fig = plot.figure()
    plot.rcParams['font.sans-serif']=['SimHei']
    p = plot.pie(values,labels=labels,autopct='%1.2f%%', startangle=90,pctdistance=0.6,labeldistance=1.1)
    plot.title(school)
    plot.savefig('D:/PyGaokaopai/img/{}.png'.format(school))
    fig.tight_layout()

schoolList = getSchoolNameList()

for school in schoolList:
    areanum = {'东北': 0, '华东': 0, '华北': 0, '华中': 0, '华南': 0, '西南': 0, '西北': 0}
    for data in dataList:
        if data['data'][0]['school'] == school:
            for dic in data['data']:
                areanum[area[dic['city']]]+=int(dic['plan'])
    saveImg(school,areanum)

注意在画图时的这两行代码,用于自动调整图区的大小以及间距,使所有的绘图及其标题、坐标轴标签等都可以不重叠的完整显示在画布上。不然会导致画多张图是字体重叠,第二张图上会有第一张图的信息!!

fig = plot.figure()
#...
fig.tight_layout()

最后是一共3054张图

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门