首页 > 其他分享 >Pandas应用实例(DataFrame基本操作,画图)

Pandas应用实例(DataFrame基本操作,画图)

时间:2023-01-18 22:04:46浏览次数:56  
标签:loc plt 20 students DataFrame len 基本操作 电子设备 Pandas

题目要求

  1. 利用Pandas建立学生信息二维表,包含姓名、年龄、性别、专业、个人电子设备数量和平均月支出(以一百元为单位)六类信息,至少创建10条具有代表性的记录(10分)。

  2. 显示最后三行的信息并筛选出个人电子设备超过3的学生(10分)。

  3. 利用Matplotlab绘制反映月支出和电子设备数量关系的散点图(10分)。

  4. 绘制反映姓名和年龄的柱状图(10分)。

  5. 在一个图中绘制每位同学月支出和电子设备的曲线图,并显示图例和必要的提示信息(15分)。

  6. 按照专业分组并绘制柱状图(15分)。

  7. 按照专业分组并统计不同性别的人数,绘制合适的图形(15分)。

  8. 绘制反应年龄的直方图(15分)。

答案

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

利用Pandas建立学生信息二维表,

  1. 包含姓名、年龄、性别、专业、个人电子设备数量和平均月支出(以一百元为单位)六类信息,
  2. 至少创建10条具有代表性的记录(10分)。

#建立学生信息二维表
students = pd.DataFrame( columns=['姓名', '年龄', '性别', '专业', '个人电子设备数量', '平均月支出(百元)'])
print(students)

Empty DataFrame
Columns: [姓名, 年龄, 性别, 专业, 个人电子设备数量, 平均月支出(百元)]
Index: []
#为了防止测试过程中数据量一直增加,这里先清空下数据
students.drop(students.index,inplace=True)
#通过loc新增数据,索引为DataFRame的长度
students.loc[len(students.index)] = ['小王', 20, "男","软件工程",        5, 10.20]
students.loc[len(students.index)] = ['小屋', 21, "男","计算机科学与技术", 3, 6.24]
students.loc[len(students.index)] = ['大黑', 22, "男","软件工程",        3, 7.40]
students.loc[len(students.index)] = ['张三', 21, "男","计算机科学与技术", 2, 7.25]
students.loc[len(students.index)] = ['李四', 20, "男","大数据",          3, 6.34]
students.loc[len(students.index)] = ['小静', 21, "女","大数据",          3, 8.34]
students.loc[len(students.index)] = ['小沈', 20, "男","大数据",          3, 6.64]
students.loc[len(students.index)] = ['小霍', 20, "男","大数据",          3, 7.08]
students.loc[len(students.index)] = ['小苌', 20, "男","计算机科学与技术", 3, 7.20]
students.loc[len(students.index)] = ['大费', 19, "女","计算机科学与技术", 4, 8.45]
students.loc[len(students.index)] = ['王五', 20, "男","计算机科学与技术", 3, 6.42]
students.loc[len(students.index)] = ['老杜', 20, "男","软件工程",        4, 7.33]
students.loc[len(students.index)] = ['小怡', 20, "女","软件工程",        4, 9.53]

# 强制类型转换,便于后面数据分析
students[['年龄', '个人电子设备数量']] =students[['年龄', '个人电子设备数量']].astype(int)
students[['平均月支出(百元)']] =students[['平均月支出(百元)']].astype(float)
print(students)
    姓名  年龄 性别        专业  个人电子设备数量  平均月支出(百元)
0   小王  20  男      软件工程         5      10.20
1   小屋  21  男  计算机科学与技术         3       6.24
2   大黑  22  男      软件工程         3       7.40
3   张三  21  男  计算机科学与技术         2       7.25
4   李四  20  男       大数据         3       6.34
5   小静  21  女       大数据         3       8.34
6   小沈  20  男       大数据         3       6.64
7   小霍  20  男       大数据         3       7.08
8   小苌  20  男  计算机科学与技术         3       7.20
9   大费  19  女  计算机科学与技术         4       8.45
10  王五  20  男  计算机科学与技术         3       6.42
11  老杜  20  男      软件工程         4       7.33
12  小怡  20  女      软件工程         4       9.53
  1. 显示最后三行的信息并筛选出个人电子设备超过3的学生(10分)。
print("最后三行的信息")
print(students.tail(3))
print("个人电子设备超过3的学生")
print(students[students['个人电子设备数量'] >3])
最后三行的信息
    姓名  年龄 性别        专业  个人电子设备数量  平均月支出(百元)
10  王五  20  男  计算机科学与技术         3       6.42
11  老杜  20  男      软件工程         4       7.33
12  小怡  20  女      软件工程         4       9.53
个人电子设备超过3的学生
    姓名  年龄 性别        专业  个人电子设备数量  平均月支出(百元)
0   小王  20  男      软件工程         5      10.20
9   大费  19  女  计算机科学与技术         4       8.45
11  老杜  20  男      软件工程         4       7.33
12  小怡  20  女      软件工程         4       9.53
  1. 利用Matplotlab绘制反映月支出和电子设备数量关系的散点图(10分)。
#获取数据
x=students["平均月支出(百元)"].values
y=students["个人电子设备数量"].values
#画图
plt.scatter(x,y,alpha=0.5,s=100)
#优化图的显示
plt.xticks(np.arange(int(min(x)-1),  int(max(x)+2), 1))#设置x轴刻度
plt.yticks(np.arange(int(min(y)-1),  int(max(y)+2), 1))#设置y轴刻度
plt.title("月支出和电子设备数量关系的散点图")#设置标题
plt.xlabel("个人电子设备数量")  # x轴的标签
plt.ylabel("平均月支出(百元)")  # y轴的标签
Text(0, 0.5, '平均月支出(百元)')

image

  1. 绘制反映姓名和年龄的柱状图(10分)。
# 使Matplotlab能显示中文
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
#设置整个画布的大小
fig = plt.figure(figsize=(12,4))
 
#设置子图1:题意要求的柱状图
plt.subplot(121)
#获取数据
x=students["姓名"].values
y=students["年龄"].values
#画图
plt.bar(x,y)
#优化图的显示
plt.title("姓名和年龄的柱状图")
plt.yticks(np.arange(15, 26, 1))#设置y轴刻度
plt.xlabel("姓名")  # x轴的标签
plt.ylabel("年龄")  # y轴的标签
#因为大学生年龄一般不低于15岁、不高于25岁,为了数据更直观,故设置刻度从15开始
plt.ylim((15,25))

#设置子图1:各年龄比例饼图
plt.subplot(122)
#获取数据
xx=students["年龄"].value_counts()
labels=students["年龄"].value_counts().index
#画饼图

patches,l_text,p_text =plt.pie(xx,labels=labels,autopct='%.1f%%')

#优化图的显示
plt.title("各年龄比例饼图")#设置标题
#设置l_texts饼图外部文本的大小
for t in l_text:
    t.set_size(20)
#设置p_texts饼图内部文本的大小
for t in p_text:
    t.set_size(15)
#设置图例
plt.legend(patches,labels,loc="right",bbox_to_anchor=(1,0,0.3,1))
#展示图
plt.show()

image

  1. 在一个图中绘制每位同学月支出和电子设备的曲线图,并显示图例和必要的提示信息(15分)。
# 调用实现插值的模块
from scipy import interpolate

#获取数据
# 利用姓名的长度生成一个数组,表示x轴的值,用于插值
xx=students["姓名"].values
x = np.array([num for num in range(len(xx))])
# 获取y轴的两个参数
y_money=np.array(students["平均月支出(百元)"].values)
y_quantity=np.array(students["个人电子设备数量"].values)

#插值数据
# 生成插值后的x轴值,表示生成从0到len(xx)-1间步长为0.1的数
xnew = np.arange(0, len(xx)-1, 0.1)
#实现函数func,利用3阶B样条曲线插值
func_money = interpolate.interp1d(x, y_money, kind='cubic')
func_quantity = interpolate.interp1d(x, y_quantity, kind='cubic')
# 利用xnew和func函数生成ynew,xnew的数量等于ynew数量
ynew_money = func_money(xnew)
func_quantity = func_quantity(xnew)

# 画图部分
# 原数据的散点图
plt.scatter(xx, y_money)
plt.scatter(xx, y_quantity)
# 拟合之后的平滑曲线图
l1=plt.plot(xnew, ynew_money,   label='平均月支出(百元)',color="g")
l2=plt.plot(xnew, func_quantity,label='个人电子设备数量',color="r")

#优化图的显示
# 设置图例位置
plt.legend(loc='upper center')
plt.xlabel("姓名")  # x轴的标签
plt.ylabel("数量")  # y轴的标签
plt.yticks(np.arange(0, max(max(y_money),max(y_quantity))+2, 1))
plt.title("每位同学月支出和电子设备的曲线图")
# 展示图
plt.show()

image

  1. 按照专业分组并绘制柱状图(15分)。
# 分组
# 按照专业分组,获取数据的平均值
vals = students.groupby("专业").mean()
# 展示获取的数据
print(vals)

# 画图
# 利用数据画出柱状图
p1=vals.plot.barh(width=0.9)

# 优化图
plt.legend(loc='upper right')# 设置图例位置
plt.xticks(np.arange(0,  30, 2))#设置x轴刻度
plt.xlabel("数量")  # x轴的标签
plt.ylabel("专业")  # y轴的标签
plt.title("不同的专业的年龄,设备数量,平均月支出平均值的柱状图")#设置标题

# 展示图
plt.show()
             年龄  个人电子设备数量  平均月支出(百元)
专业                                  
大数据       20.25       3.0      7.100
计算机科学与技术  20.20       3.0      7.112
软件工程      20.50       4.0      8.615

image

  1. 按照专业分组并统计不同性别的人数,绘制合适的图形(15分)。
# 分组
# 按照专业和性别两个属性并列分组
vals = students.groupby(["专业","性别"]).size().unstack()


# 画图
# 利用数据画出柱状图
vals.plot.barh()

# 优化图
plt.legend(loc='upper right')# 设置图例位置
plt.title("不同专业男女人数统计柱状图")#设置标题
plt.xlabel("数量")  # x轴的标签
plt.ylabel("专业")  # y轴的标签

# 展示图
plt.show()

image

  1. 绘制反应年龄的直方图(15分)。
#获取数据
vals = students["年龄"].values

# 绘图
# 年龄的频数直方图
plt.hist(vals,color = 'steelblue', edgecolor = 'k')

#优化图
plt.tick_params(top='off', right='off')# 去除图形顶部边界和右边界的刻度
plt.title("年龄的频数直方图")#设置标题
plt.xlabel("年龄")  # x轴的标签
plt.ylabel("频数")  # y轴的标签

# 显示图形
plt.show()

image

标签:loc,plt,20,students,DataFrame,len,基本操作,电子设备,Pandas
From: https://www.cnblogs.com/kingwz/p/17060668.html

相关文章

  • 34-ElasticSearch-初步检索的基本操作
    1、_cat用PostMan测试如下2、索引一个文档(保存)Post如果不指定id,会自动生成id,并且每次执行都是新增操作。如果带上id就是修改,并且新增版本号Put可以新增也可以修改。......
  • DataFrame - to_csv()函数乱码
    https://blog.csdn.net/weixin_39559994/article/details/125297263https://blog.csdn.net/qq_40258748/article/details/96306878......
  • Docker镜像的基本操作总结
    摘要容器化是上个十年比较火的技术.现在看起来在进行总计有点晚了.不过linux是三十年前的,我依旧没有总结好道理是一样的.技术不在于新旧,重要的是学习到原理.Docker的重要......
  • 1.1 excel基本操作和快捷键
    数据分析总体细节学习目录:知乎网站:https://zhuanlan.zhihu.com/p/116509353内容目录电子表格发展历史工作簿工作表数据基本操作数据类型常用快捷键1电子表格......
  • #python 利用pandas 合并csv/xlsx文件
     上次我们分享了利用powerquery来合并文件进行数据分析,但是Pq有一部分局限性,在现实工作中,我们往往需要合并多个文件去处理数据,如果面对20个甚至更多的文件,pq中的每一步......
  • MySQL数据库基本操作-DML
     MySQL性能强劲,是目前使用最广泛的数据库之一,以 MySQL为学习原型也方便之后掌握其他数据库,下面就给大家全面讲解下MySQL8.0的新特性,从零基础到高阶一站式学习,结合实际案例......
  • netmiko批量操作网络设备_pandas版
    fromconcurrent.futuresimportThreadPoolExecutorimportnetmikoimportosfromthreadingimportLockimportpandasaspdclassnet_dev():def__init__(......
  • 【Elastic Search】基本操作
    通过Kibana操作,区分PUT和POST区别(指定文档id)PUT 新建一条记录: 从而可以后续快速检索 ......
  • pandas_notes
    set_indexvsreset_indexset_index:原本无标签索引,现设置标签索引reset_index:原本有标签索引,现重设标签索引importpandasaspddf1=pd.read_csv('internet_company_s......
  • 02_Dos基本操作
    Dos基本操作打开CMD的方法开始+系统+命令提示符win+R输入cmd在任意的文件夹下面按住shift+鼠标右键点击在此处打开命令窗口管理员身份运行:开始+系统+命令提示符选择......