IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Python笔记 —— pandas数据分析+seaborn可视化实例 -> 正文阅读

[人工智能]Python笔记 —— pandas数据分析+seaborn可视化实例

现在有student.txt和score.txt数据文件,利用pandas求取每个班级的总分前三名的学生。然后将求取后的结果dataframe,利用seaborn完成数据可视化操作

首先导入pandas

import pandas as pd

然后利用pandas读取文件,将数据写入到dataframe里面

stuDF = pd.read_csv("./data/students.txt",names=['id','name','age','gender','clazz'])
scoreDF = pd.read_csv("./data/score.txt",names=['student_id','subject_id','score'])

查看一下数据

在这里插入图片描述
第一步:计算每个学生的总分

#第一步,计算每个学生的总分
# groupby为对原DataFrame进行打包分组,agg为聚合(其操作包括max、min、std、sum、count)

#(1)scoreDF.groupby('student_id')根据学生id进行聚合分组
#(2)scoreDF.groupby('student_id')['score'].agg('sum')根据分组计算每组的成绩socre总和
#(3)scoreDF.groupby('student_id')['score'].agg('sum').reset_index()通过reset_index重新设置连续的行索引index
#(4)最后rename(columns={'score':'sum_score'})将结果集中的score列名改为sum_socre

sumDF = scoreDF.groupby('student_id')['score'].agg('sum').reset_index().rename(columns={'score':'sum_score'})
sumDF.head()

在这里插入图片描述
第二步:将计算每个人成绩总和后的成绩表sumDF与学生表stuDF关联

#将计算每个人成绩总和后的成绩表sumDF与学生表stuDF关联

#(1)stuDF.merge(sumDF,left_on='id',right_on='student_id',how='left')将左表stuDF与右表sumDF关联
# 左表在括号外面,右表在括号里面,left_on是左表关联字段,right_on是右表关联字段
# how用来指定关联方式,有inner ,left,right几种选项

#(2)drop('student_id',axis=1)删除 student_id 这一列,axis是坐标轴,axis=0是行坐标轴,用来删除行,axis=1是列坐标轴,用来删除列

stu_sumDF = stuDF.merge(sumDF,left_on='id',right_on='student_id',how='left').drop('student_id',axis=1)
stu_sumDF.head()

在这里插入图片描述
第三步:增加几个新的列,给每行数据打上序号,然后利用序号来进行排序

# 增加几个新的列
# first与开窗函数的row_number一样,按照顺序打上序号排列
# min表示当两行数据的值相同时,两行数据的序号都为较小的序号。比如第3行和第4行的sum_score都为200,那么两行的first_rank的值都是3
# max表示当两行数据的值相同时,两行数据的序号都为较大的序号。比如第3行和第4行的sum_score都为200,那么两行的first_rank的值都是4
# dense与开窗函数的dense_rank一样,当两行数据的列值相同时,序号是 1,2,3,3,4
# average_rank类似于开窗函数的rank,序号会发生跳跃,但是列值相同时会求取平均值,
#             即当两行数据的列值相同时,序号是 1,2,3.5,3.5,5。其中,3.5是3和4的平均值
# ascending=False降序排列,ascending=True升序排序

stu_sumDF['first_rank'] = stu_sumDF.groupby('clazz')['sum_score'].rank(method='first',ascending=False)
stu_sumDF['min_rank'] = stu_sumDF.groupby('clazz')['sum_score'].rank(method='min',ascending=False)
stu_sumDF['max_rank'] = stu_sumDF.groupby('clazz')['sum_score'].rank(method='max',ascending=False)
stu_sumDF['dense_rank'] = stu_sumDF.groupby('clazz')['sum_score'].rank(method='dense',ascending=False)
stu_sumDF['average_rank'] = stu_sumDF.groupby('clazz')['sum_score'].rank(method='average',ascending=False)

在这里插入图片描述
第四步:按照sum_socre列值和之前增加的新的列进行排序

#先按照clazz排序,然后相同的clazz里面按照first_rank排序
# 在最后三行可以比较明显的看除不同排序字段的区别,当两行数据的列值相同时,应该如何打上序号
stu_sum_sortDF = stu_sumDF.sort_values(['clazz','first_rank'])
stu_sum_sortDF.head(17)

在这里插入图片描述
最后一步:利用布尔索引,找到每个班的总分前三名

#利用布尔索引,stu_sum_sortDF['first_rank']<=3返回的是一系列的true和false
clazz_top3 = stu_sum_sortDF[stu_sum_sortDF['first_rank']<=3]
clazz_top3.head()

在这里插入图片描述
数据分析部分到这里结束,现在得到了一个放着最终结果的dataframe,现在要利用seaborn来对其进行可视化处理

seaborn官方api文档,在里面可以查到各种图的写法

第一步:导包

#上面求处了每班总分前三名的dataframe,现在将这个dataframe可视化

import seaborn as sns
import matplotlib.pyplot as plt

第二步:解决中文乱码问题

# windows解决中文乱码
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签

# mac解决中文乱码
# plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']

plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号

第三步:利用直方图来完成可视化操作

#用直方图barplot来可视化
# x是x轴的列,y是y轴的列,hue是类别,也就是图上的蓝色,橙色,绿色,data是数据源dataframe
sns.barplot(x='clazz',y='sum_score',hue='first_rank',data=clazz_top3)

在这里插入图片描述

#上面的表不够美观,利用matplotlib.pyplot修改一下
#设置画布大小
plt.figure(figsize=(16,8))
#设置图的标题
plt.title("班级总分top3")
#绘图
sns.barplot(x='clazz',y='sum_score',hue='first_rank',data=clazz_top3)
#设置x轴和y轴的标签名
plt.xlabel("班级")
plt.ylabel("总成绩")
#设置y轴的刻度范围,从(0,650)变成(450,650),这样可以突出不同立方柱的高度差异
plt.ylim((450,650))
plt.show()

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:17:53  更:2021-12-15 18:20:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 0:37:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码