{DAY 27} Matplotlib 绘图

前言

这篇文章主要是将前几篇关於matplotlib的概念

实际应用在资料上

画出各种的图表

会搭配不同的参数调整表现出来的图

文章分成4个部分

分别是

  1. 前置
  2. 圆饼图
  3. 折线图

前置

这里延续前面pandas练习过的资料库

从kaggle上找到的关於学生成绩的纪录

Students Performance in Exams

先引入所有要使用到的套件pandas, numpy,matplotlib

把这笔资料列印部分出来

看看资料的架构长怎样

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
df = pd.read_csv("StudentsPerformance.csv")
df.head()

先来看看这笔资料的整体资讯

df.info()

可以看到整笔资料的所有栏位、是否有缺失值跟资料的物件型态

资料里有1000笔纪录

圆饼图

现在若是想要知道不同组别占整体资料的比例

最适用的图形是使用圆饼图

先将资料利用分组聚合函数.groupby()分组

并且利用.count()计算各组的数量

group = df.groupby("race/ethnicity").count() r

接下来将想要计算的类别跟数值分别用list装起来

category = list(group.index) #设置类别的list
amounts = list(group["gender"]) #设置各类别数量的list
print(category, amounts)
# ['group A', 'group B', 'group C', 'group D', 'group E'] [89, 190, 319, 262, 140]

最後绘制圆饼图,并且利用参数autopct="%0.2f%%"设定出现在图上的比例数据

也使用.title()设定图表的标题

plt.pie(amounts, labels=category,autopct="%0.2f%%")
plt.title("portion of groups")


图表就顺利做出来了!

可以清楚地看到各组所占的比例

使用同样的方法制作不同性别的占比圆饼图

gender = df.groupby("gender").count() # 按照性别分组,并计算各组数量
type_of_gender = list(gender.index) # 将性别的名称放到list
numbers_of_gender = list(gender["lunch"]) # 将各组的数量放进去list

plt.pie(numbers_of_gender, labels=type_of_gender,autopct="%0.2f%%") #作图
plt.title("portion of gender") # 设置标题

折线图、散布图跟柱状图

在折线图的应用上

适合用在同类的数据变化

所以这里我选择'race/ethnicity'里面的group b作为比较的依据

首先先将属於group b类型的资料打包成独立的dataframe

group_b = df[df['race/ethnicity']=="group B"].dropna()
print(group_b)

可以看到整理过後的资料只剩group B的资料

只剩下190笔数据

但是标签还是依照原本1000笔的排序

现在想替在group B的人重新标index

先重设index,利用default产生从0-189的标签

group_b = group_b.reset_index()
group_b

再删掉右移一栏的index栏位

del group_b["index"]
group_b

可以看到资料重新被整理好

接下来就可以利用group B的学生成绩分布制作折线图

先看数学成绩的折线图

group_b.plot(y=["math score"],figsize=(25,5))

可以看到第1位到第190位学生的数学成绩分布

现在可以在同一张图上叠加reading的成绩分布

group_b.plot(y=["math score","reading score"],figsize=(25,5))

小结

这几篇文章大致上介绍了matplotlib这个套件的操作

加上实际资料的操作

已经对将资料利用图表视觉化有了一定程度的了解

明天会进行更多的绘图练习

利用调整参数进行更多元的图形展现方式


<<:  Day-25: Ruby 世界好多等於,系虾米毁?

>>:  EP27 - 建立 VPN 连线,直接连线到 AWS

[Day20] placeholder for d10

写在前面 placeholder for d10 placeholder for d10 place...

初学者跪着学JavaScript Day25 : 宁愿找this也不碰历史

一日客语:中文:太阳 客语:ngidˋ teuˇ(日头) 在学建构函式时很常看到this,建构函式内...

SQL Server 压缩资料库 (Shrink Database) - 心得分享

DBABootcamp 该不该压缩资料库是 DBA 常见的问题。以记录档 (LDF, log fil...

[Android Studio 30天自我挑战] Progress Bar练习2

上一篇的ProgressBar练习是以Horizont的方式 这篇是以环形转圈圈的ProgressB...

Day 26 - Vue 与 HTTP请求 (1)

前一天中我们讲解了如何利用Vue CLI快速建立专案,再进入到专案开发之前,还是有一些知识需要恶补的...