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()
最终结果图: