本文学习需要读者有一定的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()
这段代码的功能是绘制每年入会会员人数的折线图。具体步骤如下:
- 将"入会时间"列转换为datetime类型:data[“入会时间”] = pd.to_datetime(data[“入会时间”])
- 提取出年份并作为新的一列"入会年份":data[“入会年份”] = data[“入会时间”].dt.year
- 按照"入会年份"进行分组,计算每年的会员人数:yearly_members = data.groupby(“入会年份”).size()
- 使用matplotlib库绘制折线图: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’) - 设置x轴和y轴的标签分别为"年份"和"会员人数":plt.xlabel(“年份”)、plt.ylabel(“会员人数”)
- 显示图表:plt.show()
图示如下: