用python写 身高体重关系,excel表格,输入数据进行查找

import random #随机数的包
import pandas as pd
#Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一
import matplotib.pypot as plt
#Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图
import numpy as np
#NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
#显示汉字
import matplotlib as mpl
mpl.rcParams[‘font.sans-serif’]=[‘SimHei’] #用来正常显示中文标签
mpl.rcParams[‘axes.unicode_minus’]=False #用来正常显示负号

import random
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#显示汉字
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号

def displayinfor2(sex,height,weight):
    stard=105
    if sex=='男':
        stard=105
    else:
        stard=100
    dlta=height-stard
    per=dlta*0.1
    if dlta - per <= weight <= dlta + per:
        return '标准'
    elif weight > dlta + per:
        return '超重'
    elif weight < dlta - per:
        return '过轻'
    else:
        return '无结果'

append是list类型数据的属性
要用此属性应该用以下命令改为list属性
#list 转 numpy
np.array(a)
#ndarray 转 list
a.tolist()

if __name__ == '__main__':
    colums = ['姓名', '学号', '性别', '身高', '体重']
    normarl = ['张三', 100, '男', 175, 45]
    data = []  # 未来数据
    for i in range(20):
        item1 = normarl[0] + str(i)
        item2 = normarl[1] + i
        a = random.randint(0, 1)  #随机数0或1
        if a == 0:
            item3 = normarl[2]
        else:
            item3 = '女'
        item4 = random.randint(165, 200)  # 身高
        item5 = random.randint(45, 100)  # 体重
        weight = 0
        temp = []
        temp.append(item1)
        temp.append(item2)
        temp.append(item3)
        temp.append(item4)
        temp.append(item5)
        data.append(temp)

df3 = pd.DataFrame(data, columns=colums) #转换成excel的格式,data为数据,columns为列数据名称,index为行数据名称
sheet_name #表名称

    df3 = pd.DataFrame(data, columns=colums)
    df3.to_excel('D:/xuesheng.xlsx', sheet_name='学生表')

df4 = pd.read_excel(‘D:/xuesheng.xlsx’, index_col=0) #读取excel表格中的数据,让第一列成为索引,index_col,让0名称成为索引,因为读取excel会读取多余的一列数据,即把索引也读进来,所以用index_col重新定义一下索引

number = int(input("请输入一个学号:"))
    df4 = pd.read_excel('D:/xuesheng.xlsx', index_col=0)

np4 = df4.values #values以列表返回字典中的所有值
temp=i.tolist() #tolist把i的numpy格式转换成list为了下面append属性,因为只有list能用append
item6=displayinfor2(i[2],i[3],i[4]) #调用displayinfor2函数,在上面有定义返回值为标准、过轻、过重
append #提交数据的list中。例:temp=[1,‘男’,2] temp,append(3) 结果为:temp[1,‘男’,2,3]

    np4 = df4.values
    for i in np4:
        if (i[1] == number):
            temp=[]
            temp=i.tolist()
            item6=displayinfor2(i[2],i[3],i[4])
            temp.append(item6)
            #print(type(temp))
            print(temp)

第一张图(图片最下面)
学号,身高\体重分布图
ax.axis([100, 120, 45, 200]) #axis:x轴:100到120,y轴:45到200
ax.plot(data1,data2,label=‘身高’) #绘制线 x轴:data1 , y轴:data2,label图例
ax.legend() #把图例进行显示

    data1 = []  #学号
    data2 = []  #身高
    data3 = []  #体重
    number=0
    # fig, ax = plt.subplots()
    fig = plt.figure()
    ax = fig.add_subplot(2, 1, 2)
    for i in np4:
        temp1 = i[1]
        temp2 = i[3]
        temp3 = i[4]
        data1.append(temp1)
        data2.append(temp2)
        data3.append(temp3)
    ax.axis([100, 120, 45, 200])
    ax.plot(data1, data2,label='身高')
    ax.plot(data1, data3,label='体重')
    ax.set_xlabel('x轴(学号)')
    ax.set_ylabel('y轴(身高\体重)')
    ax.set_title("学生身高体重图")
    ax.legend()  # Add a legend.

第二张图
ax1.bar(names1, heightnum) #柱状图 names1表示x轴各个名称,heightnum表示各个区间的数量

 heightnum=[0,0,0,0,0,0,0] #身高区间的人数
    for i in data2:
        if(165<= i <=170):
            heightnum[0] = heightnum[0] + 1
        elif (170<i<=175):
            heightnum[1] = heightnum[1] + 1
        elif (175<i<=180):
            heightnum[2] = heightnum[2] + 1
        elif (180<i<=185):
            heightnum[3] = heightnum[3] + 1
        elif (185 < i <= 190):
            heightnum[4] = heightnum[4] + 1
        elif (190 < i <= 195):
            heightnum[5] = heightnum[5] + 1
        elif (195< i <= 200):
            heightnum[6] = heightnum[6] + 1
    names1=['165~170','171~175','176~180','181~185','186~190','191~195','196~200']
    ax1=plt.subplot(221)
    plt.title("学生身高分布图")
    ax1.bar(names1, heightnum)
weightnum = [0,0,0,0,0,0,0,0,0,0]  # 身高区间的人数
    for i in data3:
        if (45 <= i <= 50):
            weightnum[0] = weightnum[0] + 1
        elif (50 < i <= 55):
            weightnum[1] = weightnum[1] + 1
        elif (55 < i <= 60):
            weightnum[2] = weightnum[2] + 1
        elif (60 < i <= 65):
            weightnum[3] = weightnum[3] + 1
        elif (65 < i <= 70):
            weightnum[4] = weightnum[4] + 1
        elif (70 < i <= 80):
            weightnum[5] = weightnum[5] + 1
        elif (80 < i <= 85):
            weightnum[6] = weightnum[6] + 1
        elif (85 < i <= 90):
            weightnum[7] = weightnum[7] + 1
        elif (90 < i <= 100):
            weightnum[8] = weightnum[8] + 1
    names2 = ['45~50', '51~55', '56~60', '61~65', '66~70', '71~75', '76~80','81~85','86~90','91~100']
    plt.subplot(222)
    plt.title("学生体重分布图")
    plt.bar(names2, weightnum)
    plt.show()

最终结果图:
在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值