Python小白逆袭大神 (三)

Python小白逆袭大神 作业三

作业:
对《青春有你2》对选手体重分布进行可视化,绘制饼状图

这个作业是根据第二天爬取获得的json文件进行数据的处理课可视化。

with open('data/data31557/20200422.json','r',encoding='UTF-8') as file:
    json_arraay = json.loads(file.read())

先是读取json文件,json_array的内容是:
[{‘name’: ‘刘亚楠’, ‘link’: ‘https://baike.baidu.com/item/%E5%88%98%E4%BA%9A%E6%A5%A0/24271343’, ‘zone’: ‘中国湖北’, ‘constellation’: ‘白羊座’, ‘height’: ‘168cm’, ‘weight’: ‘46kg’, ‘flower_word’: ‘西兰花-看起来和吃起来的味道一样就像我将情绪都挂脸上’, ‘company’: ‘华谊兄弟’},…]

weights = []
for star in json_arraay:
    weight = float(star['weight'].replace('kg',''))
    weights.append(weight)

接下来for循环访问每个选手的weight选项里面的内容,例如第一个循环里,weight里的内容是字符串格式,并且含有’Kg’字母,所以用空字符替换掉’kg’,比如上面的’46Kg’就变成了‘46’,再用float(‘46’)将字符串数据转化为单精度数据。这样将所有选手的体重以数字的形式存到了 列表weights[] 里面。

size1 = 0
size2 = 0
size3 = 0
size4 = 0

for weight in weights:
    if weight <=45:
        size1+=1
    elif 45< weight <=50:
        size2+=1
    elif 50< weight <= 55:
        size3+=1
    else:
        size4+=1
sizes = [size1,size2,size3,size4]
labels = '<=45kg','45~50kg','50~55kg','>50kg'

这里就是判断体重的范围,并计数,比如第一个数据46,满足45< weight <=50,所以size2就加一,这里size1-size4最终结果就是各个体重范围的人数,后面定义好元组label。

接下来就是要绘图,调用的函数的文档可以在这个网址上查看:
添加链接描述

fig1,ax1 = plt.subplots()
ax1.pie(sizes,explode=None,labels=labels,autopct='%1.1f%%',
        shadow = True,startangle=90)
plt.show()

这三句代码就可以将数据画成圆了,格式主要看第二句,

Axes.pie(self, x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, \*, data=None)[source]

x:就是这里的填的的sizes,是要显示的内容。
explode:默认为None,如果想要显示的某个扇形偏移圆心的话,就可以设置,设置为[0.1,0.1,0.1,0.1]就是每个扇形偏移中心圆点01.*半径的长度。
labels:x对应的图标
autopct:是指按照指定的格式将各个扇形所占比例显示在扇形内部,不设置默认为None,不显示比例。这里‘%1.1f’是比例输出的格式,‘%%’是为了显示百分号。
shadow:为True显示阴影,为False不显示。
startangle:这个参数是表示以x轴为标准,旋转多少度开始画扇形,这里90就是从x轴逆时针旋转90度方向开始绘制图形。
还有其他参数就不介绍了,有兴趣的可以去看下。
这里为了显示的是个正圆,要加上代码:

ax1.axis('equal')

保存显示的图片的时候,会有错误,那是因为没有文件夹,在相应的路径下建好文件夹就可以了。
最后整体的代码是:

import matplotlib.pyplot as plt
import numpy as np
import json
import matplotlib.font_manager as font_manager
%matplotlib inline

with open('data/data31557/20200422.json','r',encoding='UTF-8') as file:
    json_arraay = json.loads(file.read())

weights = []
for star in json_arraay:
    weight = float(star['weight'].replace('kg',''))
    weights.append(weight)

size1 = 0
size2 = 0
size3 = 0
size4 = 0

for weight in weights:
    if weight <=45:
        size1+=1
    elif 45< weight <=50:
        size2+=1
    elif 50< weight <= 55:
        size3+=1
    else:
        size4+=1

labels = '<=45kg','45~50kg','50~55kg','>50kg'

sizes = [size1,size2,size3,size4]
explode = (0.1,0.1,0.2,0)

fig1,ax1 = plt.subplots()

ax1.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',
        shadow = True,startangle=90)

ax1.axis('equal')
plt.savefig('/home/aistudio/work/result/pie_result.jpg')#保存图片
plt.show()
发布了9 篇原创文章 · 获赞 17 · 访问量 3127

猜你喜欢

转载自blog.csdn.net/qq_39036834/article/details/105740893
今日推荐