百度飞桨学习——七日打卡作业(三)选手数据分析

举报
陈沧夜 发表于 2022/05/01 23:24:22 2022/05/01
【摘要】 百度飞桨学习——七日打卡作业(三)选手数据分析 文章目录 百度飞桨学习——七日打卡作业(三)选手数据分析任务描述绘制选手区域分布柱状图普通方法绘制使用pandas进行数据处理 体重饼图绘制...

百度飞桨学习——七日打卡作业(三)选手数据分析

任务描述

基于第二天实践使用Python来爬去百度百科中《青春有你2》所有参赛选手的信息,进行数据可视化分析。

# 下载中文字体
!wget https://mydueros.cdn.bcebos.com/font/simhei.ttf
# 将字体文件复制到matplotlib字体路径
!cp simhei.ttf /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/
# 一般只需要将字体文件复制到系统字体目录下即可,但是在aistudio上该路径没有写权限,所以此方法不能用
# !cp simhei.ttf /usr/share/fonts/

# 创建系统字体文件路径
!mkdir .fonts
# 复制文件到该路径
!cp simhei.ttf .fonts/
!rm -rf .cache/matplotlib

绘制选手区域分布柱状图

普通方法绘制

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

#显示matplotlib生成的图形
%matplotlib inline
#使用json加载图片
with open('data/data31557/20200422.json', 'r', encoding='UTF-8') as file:
         json_array = json.loads(file.read())

#绘制小姐姐区域分布柱状图,x轴为地区,y轴为该区域的小姐姐数量

zones = []
for star in json_array:
    zone = star['zone']#获取json中的区域属性
    zones.append(zone)#将他存到列表中
print(len(zones))
print(zones)


zone_list = []
count_list = []

for zone in zones:
    if zone not in zone_list:
        count = zones.count(zone)
        zone_list.append(zone)
        count_list.append(count)

print(zone_list)
print(count_list)

# 设置显示中文,
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体

plt.figure(figsize=(20,15))
#range(len(count_list)表示x轴的刻度
#tick_label设置x坐标
#facecolor设置柱状图颜色
#edgecolor='white'边框颜色
plt.bar(range(len(count_list)), count_list,color='r',tick_label=zone_list,facecolor='#9999ff',edgecolor='white')

# 这里是调节横坐标的倾斜度,rotation是度数,以及设置刻度字体大小
plt.xticks(rotation=45,fontsize=20)#x轴字体倾斜
plt.yticks(fontsize=20)

plt.legend()
plt.title('''《青春有你2》参赛选手''',fontsize = 24)
plt.savefig('/home/aistudio/work/result/bar_result.jpg')
plt.show()

使用pandas进行数据处理

import matplotlib.pyplot as plt
import numpy as np 
import json
import matplotlib.font_manager as font_manager
import pandas as pd

#显示matplotlib生成的图形
%matplotlib inline

#使用pandas读取json
df = pd.read_json('data/data31557/20200422.json')
#print(df)
#取出name,使用groupby对区域zone进行聚合
grouped=df['name'].groupby(df['zone'])
s = grouped.count()#聚合计数
#取出聚合后的值
#例如:
#index values
# 四川 	9
zone_list = s.index
count_list = s.values


# 设置显示中文,matplotlib默认是英文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体

plt.figure(figsize=(20,15))

plt.bar(range(len(count_list)), count_list,color='r',tick_label=zone_list,facecolor='#9999ff',edgecolor='white')

# 这里是调节横坐标的倾斜度,rotation是度数,以及设置刻度字体大小
plt.xticks(rotation=45,fontsize=20)
plt.yticks(fontsize=20)

plt.legend()
plt.title('''《青春有你2》参赛选手''',fontsize = 24)
plt.savefig('/home/aistudio/work/result/bar_result02.jpg')
plt.show()

体重饼图绘制

普通方法处理

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

#显示matplotlib生成的图形
%matplotlib inline

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

#绘制小姐姐区域分布柱状图,x轴为地区,y轴为该区域的小姐姐数量

weights = []
for star in json_array:
    weight = float(star['weight'].replace('kg',''))
    weights.append(weight)
#print(len(weights))
#print(weights)


weight_list = []
count_list = []

weight1=weight2=weight3=weight4=0
for weight in weights:
    if weight <=45:
        weight1+=1
    elif 45< weight<=50:
        weight2+=1
    elif 50<weight<=55:
        weight3+=1
    else:
        weight4+=1

labels = '45kg及以下','45-50kg之间','50-55kg之间','55kg以上'

weightsize =[weight1,weight2,weight3,weight4]
'''
print(weightsize[0])
print(weightsize[1])
print(weightsize[2])
print(weightsize[3])
'''

explode = (0.1,0.05,0.15,0.3)#各个饼区域的偏移值
#颜色
colors = 'lightgreen','gold','lightskyblue','lightcoral'
#画布fig1,子图ax1
fig1,ax1 = plt.subplots()
#startangle从哪个方向开始
ax1.pie(weightsize,explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',shadow=True,startangle=90)

ax1.axis('equal')#绘制圆图

#标题
plt.title('''震惊!参赛选手体重大揭秘!''',fontsize = 24)
plt.savefig('/home/aistudio/work/result/bar_result.jpg')
plt.show()

使用pandas进行数据处理

import matplotlib.pyplot as plt
import numpy as np 
import json
import matplotlib.font_manager as font_manager
import pandas as pd
#显示matplotlib生成的图形
%matplotlib inline

df = pd.read_json('data/data31557/20200422.json')

weights = df['weight']
arrs = weights.values

for i in range(len(arrs)):
    arrs[i] = float(arrs[i][0:-2])#去掉kg

bin = [0,45,50,55,100]
se1 = pd.cut(arrs,bin)#数据区间按bin进行切割

pd.value_counts(se1)#各个区间计数
labels = '45kg以下','45-50kg之间','50-55kg之间','55kg多一点'
sizes = pd.value_counts(se1)
explode = (0.1,0.2,0.1,0.05)

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

plt.title('''独家揭秘!参赛选手体重真相竟然是!''',fontsize = 24)
plt.savefig('/home/aistudio/work/result/bar_result.jpg')
plt.show()
#绘制小姐姐区域分布柱状图,x轴为地区,y轴为该区域的小姐姐数量

文章来源: blog.csdn.net,作者:沧夜2021,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/CANGYE0504/article/details/105742506

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。