目录
一、数据准备
1、文件数据以json文件格式保存:
二、数据分析
2、数据分析四剑客:
(1)Numpy
(2)pandas
(3)Matplotlib
(4)PIL
(5)总结:
3、绘制选手区域分布柱状图
4、对选手体重分布进行可视化,绘制饼状图
一、数据准备
链接:https://pan.baidu.com/s/1r130i8S8Kjo0XdnfRtlHyg
提取码:smw8
--来自百度网盘超级会员V1000的分享
1、文件数据以json文件格式保存:
二、数据分析
2、数据分析四剑客:
3、 数据分析四剑客详解:
(1)Numpy
(2)pandas
(3)Matplotlib
(4)PIL
(5)总结:
Numpy常用数据结构——ndarray
Pandas常用数据结构——Series、DataFrame
Matplotlib常用模块——import matplotlib.pyloy as plt
PIL常用模块——from PIL import image
3、绘制选手区域分布柱状图
参考代码一:
使用JSON反序列化获取文件数据:
#绘制选手区域分布柱状图
import matplotlib.pyplot as plt
import numpy as np
import json
with open('data/data31557/20200422.json', 'r', encoding='UTF-8') as file:
json_array = json.loads(file.read())#json.loads解码JSON 数据。该函数返回Python 字段的数据类型
print(json_array)
#绘制小姐姐区域分布柱状图,x轴为地区,y轴为该区域的小姐姐数量
zones=[]
for star in json_array:
zones.append(star['zone'])
#print(len(zones))
x_zone=[]
y_number=[]
for zone in zones:
if zone not in x_zone:
count = zones.count(zone)#统计某个地名出现的次数
x_zone.append(zone)#将统计过的地名加入x轴
y_number.append(count)#将出现的重复地名个数设为y值
#print(x_zone)
#print(y_number)
# 设置显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
#设置图片大小
plt.figure(figsize=(20,15))
plt.bar(range(len(y_number)), y_number,color='r',tick_label=x_zone,facecolor='#9999ff',edgecolor='white')
# 这里是调节横坐标的倾斜度,rotation是度数,以及设置刻度字体大小
plt.xticks(rotation=45,fontsize=20)
plt.yticks(fontsize=20)
#plt.legend()
plt.title('''《青春有你2》参赛选手''',fontsize = 24)
plt.savefig('./work/result/bar_result.jpg')
plt.show()
输出样例:
参考代码二:
使用pandas库serie结构处理数据:
#绘制选手区域分布柱状图
import matplotlib.pyplot as plt
import numpy as np
import json
import pandas as pd
#读取json数据,df变量类型DataFram(表格数据结构)
df = pd.read_json('data/data31557/20200422.json')
#按照不同区域对名字进行分组,grouped是Series是一种类似于一维数组的对象,它由一维数组(各种numpy数据类型)以及一组与之相关的数据标签(即索引)组成
grouped=df['name'].groupby(df['zone'])
s = grouped.count()
#print(s)
x_zone = s.index
y_number = s.values
#设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.figure(figsize=(20,15))
plt.bar(range(len(y_number)), y_number,color='r',tick_label=x_zone,facecolor='#9999ff',edgecolor='white')
# 这里是调节横坐标的倾斜度,rotation是度数,以及设置刻度字体大小
plt.xticks(rotation=45,fontsize=20)
plt.yticks(fontsize=20)
plt.title('''《青春有你2》参赛选手''',fontsize = 24)
plt.savefig('./work/result/bar_result02.jpg')
plt.show()
输出样例:
4、对选手体重分布进行可视化,绘制饼状图
参考代码一:
使用pandas库serie结构处理数据:
#对选手体重分布进行可视化,绘制饼状图
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import json
#导入数据
#读取json数据,df变量类型DataFram(表格数据结构)
df = pd.read_json('data/data31557/20200422.json')
#数据处理
#定义一个serie变量是一种类似于一维数组的对象,它由一维数组(各种numpy数据类型)以及一组与之相关的数据标签(即索引)组成
roles = pd.Series(df['weight'].values)#体重是值
roles.index = df['name'].values#名字是索引
#根据键值排序
roles = roles.sort_values()
print(roles)
#x轴:姓名
x_names = roles.index
#y轴:体重
y_weight = roles.values
#显示图片
#设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.figure(figsize=(20,15))
plt.bar(range(len(y_weight)), y_weight,color='r',tick_label=x_names,facecolor='#9999ff',edgecolor='white')
# 这里是调节横坐标的倾斜度,rotation是度数,以及设置刻度字体大小
plt.xticks(rotation=45,fontsize=5)
plt.yticks(fontsize=24)
#保存图片
plt.title('''《青春有你2》参赛选手''',fontsize = 24)
plt.savefig('./work/result/bar_result03.jpg')
plt.show()
输出样例:
参考代码二:
使用JSON反序列化获取文件数据:
#对选手体重分布进行可视化,绘制饼状图
#<45、45~50、50~55、>55
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import json
#1、导入数据
with open('data/data31557/20200422.json', 'r', encoding='UTF-8') as file:
json_array = json.loads(file.read()) # json.loads解码JSON 数据。该函数返回Python 字段的数据类型
#2、分析数据
#<45、45~50、50~55、>55
numbers = [0,0,0,0]
for kg in json_array:
n = kg['weight'].replace('kg','')
if (n.isdigit()):#是整数
n = int(n)
if n < 45:
numbers[0] += 1
elif n >= 45 and n < 50:
numbers[1] += 1
elif n >= 50 and n < 55:
numbers[2] += 1
elif n >= 55:
numbers[3] += 1
else:
n = float(n)
if n < 45:
numbers[0] += 1
elif n >= 45 and n < 50:
numbers[1] += 1
elif n >= 50 and n < 55:
numbers[2] += 1
elif n >= 55:
numbers[3] += 1
#print(numbers)
#<45、45~50、50~55、>55
#3、显示图像
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
labels = '<45','45~50','50~55','>55'
explode = (0, 0.1, 0, 0)
plt.pie(numbers,explode=explode,labels=labels,autopct='%1.1f%%',shadow=True,startangle=90)
plt.axis('equal')
#4、保存图像
plt.title('''《青春有你2》参赛选手体重分布''',fontsize = 24)
plt.savefig('./work/result/pie_result04.jpg')
plt.show()
输出样例:
参考链接:
飞桨AI Studio - 人工智能学习与实训社区
飞桨AI Studio - 人工智能学习与实训社区
飞桨AI Studio - 人工智能学习与实训社区