【Python】据数分析之图像绘制

项目链接:

飞桨AI Studio - 人工智能学习与实训社区

目录

一、数据准备

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 - 人工智能学习与实训社区

猜你喜欢

转载自blog.csdn.net/qq_51701007/article/details/129105803
今日推荐