使用pandas以及matplotlib.pyplot实现数据可视化

本文学习需要读者有一定的python基础及pandas,matplotlib.pyplot的代码运用

以题型为例分布讲解pandas,matplotlib.pyplot的运用

首先在python输出中

import pandas as pd 
import matplotlib.pyplot as plt

这是Python中的两个库的导入语句。pandas是一个强大的数据处理库,matplotlib.pyplot是用于绘制图形的库
例:

根据“航空公司数据.xlsx”完成下述图形的绘制,要求每个图形都有标题和坐标轴名称:

1、调用dataset数据库
代码如下:

data = pd.read_excel('../dataset/航空公司数据.xlsx')
data

图示如下:在这里插入图片描述
2、绘制各省用户人数柱形图(前30名)
代码如下:

province_counts = data['工作地所在省份'].value_counts()
top30_provinces = province_counts[:30]
plt.rcParams['font.family'] = 'SimHei'
plt.bar(
    top30_provinces.index,
    top30_provinces.values,
    width=0.8,
    color = '#ff8080'
)
plt.title("各省份用户人数柱形图(前30名)")
plt.xlabel("省份")
plt.ylabel("用户人数")
for x0,y0 in zip(top30_provinces.index,top30_provinces.values):
    plt.text(x0,y0+80,f'{y0}',ha='center')
plt.xticks(rotation=90)
plt.show()

这段代码是用来绘制各省份用户人数柱形图(前30名)的。首先,它计算了每个省份的用户数量,然后选取了前30个省份。接着,设置了字体为SimHei,并使用matplotlib.pyplot库绘制了一个柱状图。最后,设置了图表的标题、x轴标签和y轴标签,并在每个柱子上方显示了对应的用户数量。最后,将x轴刻度标签旋转90度,以便更好地显示省份名称。

代码讲解:

plt.rcParams['font.family'] = 'SimHei'

此代码为设置字体为SimHei

for x0,y0 in zip(top30_provinces.index,top30_provinces.values):
    plt.text(x0,y0+80,f'{y0}',ha='center')

这段代码的作用是在每个柱子上方显示对应的用户数量

它使用zip()函数将top30_provinces.index和top30_provinces.values两个列表中的元素一一对应起来,然后遍历这些对应关系,在每个柱子上方添加一个文本标签,显示对应的用户数量。其中,plt.text()函数用于添加文本标签,x0和y0分别表示文本标签的横坐标和纵坐标,f’{y0}'表示将用户数量转换为字符串格式,ha='center’表示将文本标签居中对齐

拓展:plt.text函数的使用

plt.text()函数是Matplotlib库中用于在图表上添加文本的函数。它的语法如下:

plt.text(x, y, s, fontdict=None, **kwargs)

其中,参数的含义如下:

  • x:文本标签的横坐标。
  • y:文本标签的纵坐标。
  • s:要显示的文本内容。
  • fontdict:字体属性字典,可以设置字体大小、颜色等属性。
  • **kwargs:其他可选参数,如对齐方式、旋转角度等。

例如,要在图表上添加一个居中对齐的文本标签,可以使用以下代码:

import matplotlib.pyplot as plt

plt.plot([0, 1], [0, 1])
plt.text(0.5, 0.5, 'Hello World!', ha='center')
plt.show()

这段代码会在图表中心位置添加一个居中对齐的文本标签“Hello World!”。

图示如下:
在这里插入图片描述
3、画用户"平均折扣系数"和飞行里程数"数据的散点图
代码如下:

# 提取所需数据
discount_coefficient = data["平均折扣系数"]
flight_mileage = data["飞行里程数"]

# 绘制散点图
plt.scatter(
    discount_coefficient, 
    flight_mileage,
    s = 15,
    marker='*')
plt.title("用户“平均折扣系数”和“飞行里程数”数据的散点图")
plt.xlabel("平均折扣系数",loc='right')
plt.ylabel("飞行里程数",loc='top')
plt.show()

这段代码的作用是绘制一个散点图,横坐标为"平均折扣系数",纵坐标为"飞行里程数"。其中,散点的尺寸为15,形状为星号。图表的标题为"用户“平均折扣系数”和“飞行里程数”数据的散点图",横坐标标签为"平均折扣系数",纵坐标标签为"飞行里程数"。最后,使用plt.show()函数显示图像。

代码讲解:

plt.scatter(
    discount_coefficient, 
    flight_mileage,
    s = 15,
    marker='*')

这段代码的作用是绘制一个散点图,横坐标为"discount_coefficient",纵坐标为"flight_mileage"。其中,散点的尺寸为15,形状为星号

拓展:plt.scatter()函数的使用

plt.scatter()函数是Matplotlib库中用于绘制散点图的函数。它的语法如下:

plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None, **kwargs)

其中,参数的含义如下:

  • x:散点的横坐标。
  • y:散点的纵坐标。
  • s:散点的大小,可以是单个数值(所有点相同大小)或序列(每个点可以不同大小)。
  • c:散点的颜色,可以是单个颜色(所有点相同颜色)或序列(每个点可以不同颜色)。
  • marker:散点的形状,默认为圆形。
  • cmap:用于映射颜色的颜色映射对象,如果c是一个序列。
  • norm:用于映射颜色的Normalize对象,如果c是一个序列。
  • vmin、vmax:用于映射颜色的值的最小值和最大值,如果c是一个序列。
  • alpha:散点的透明度,值在0到1之间。
  • linewidths:散点边缘的线宽。
  • edgecolors:散点边缘的颜色。
  • **kwargs:其他可选参数。

例如,要在图表上绘制一组大小为15、形状为星号的红色散点,可以使用以下代码:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 4, 5, 6]

plt.scatter(x, y, s=15, c='red', marker='*')
plt.show()

这段代码会在图表上绘制5个红色星形散点,横坐标为x列表中的值,纵坐标为y列表中的值。

图示如下:

在这里插入图片描述

4、统计每年入会会员人数,并画折线图

代码如下:

# 查看入会时间是否是字符串序列,是则转换为时间对象序列
data["入会时间"] = pd.to_datetime(data["入会时间"])

# 提取入会时间的年数据作为新的列,保存到表格中
data["入会年份"] = data["入会时间"].dt.year

# 分组聚合求各组人数
yearly_members = data.groupby("入会年份").size()

# plot画折线图
plt.plot(yearly_members.index, yearly_members.values )
yearly_members.plot(kind='line',marker='o')
plt.title("每年入会会员人数折线图")
for x0,y0 in zip(yearly_members.index, yearly_members.values):
    plt.text(x0,y0+20,f'{y0}',ha='center')
plt.xlabel("年份")
plt.ylabel("会员人数")
plt.show()

这段代码的功能是绘制每年入会会员人数的折线图。具体步骤如下:

  1. 将"入会时间"列转换为datetime类型:data[“入会时间”] = pd.to_datetime(data[“入会时间”])
  2. 提取出年份并作为新的一列"入会年份":data[“入会年份”] = data[“入会时间”].dt.year
  3. 按照"入会年份"进行分组,计算每年的会员人数:yearly_members = data.groupby(“入会年份”).size()
  4. 使用matplotlib库绘制折线图:plt.plot(yearly_members.index,
    yearly_members.values)
  5. 设置折线图为线型图,并在每个数据点上标注具体的会员人数:yearly_members.plot(kind=‘line’,
    marker=‘o’)
  6. 设置图表标题为"每年入会会员人数折线图":plt.title(“每年入会会员人数折线图”)
  7. 在每个数据点上添加文本标签,显示会员人数:for x0, y0 in zip(yearly_members.index,
    yearly_members.values): plt.text(x0, y0+20, f’{y0}', ha=‘center’)
  8. 设置x轴和y轴的标签分别为"年份"和"会员人数":plt.xlabel(“年份”)、plt.ylabel(“会员人数”)
  9. 显示图表:plt.show()

图示如下:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值