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

壮心未与年俱老,死去犹能作鬼雄。这篇文章主要讲述百度飞桨学习——七日打卡作业选手数据分析相关的知识,希望能为你提供帮助。
百度飞桨学习——七日打卡作业(三)选手数据分析
文章目录

  • 百度飞桨学习——七日打卡作业(三)选手数据分析
    • 任务描述
    • 绘制选手区域分布柱状图
      • 普通方法绘制
      • 使用pandas进行数据处理
    • 体重饼图绘制
      • 普通方法处理
      • 使用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 inlinewith 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+=1labels = 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 inlinedf = pd.read_json(data/data31557/20200422.json)weights = df[weight] arrs = weights.valuesfor i in range(len(arrs)): arrs[i] = float(arrs[i][0:-2])#去掉kgbin = [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轴为该区域的小姐姐数量


    推荐阅读