数据可视化综合练习

在以下的任务中,请将每一个任务标题作为markdown标题内容写进jupyter中,标题下方写解题代码。

首先我们先导入两个常用的数据分析和可视化库。

import pandas as pd:这行代码导入了pandas库,并将其简称为pd。pandas是一个强大的数据处理库,提供了DataFrame等数据结构以及丰富的数据处理、清洗、分析等功能。

import matplotlib.pyplot as plt:这行代码导入了matplotlib库中的pyplot模块,并将其简称为plt。matplotlib是一个用于绘制图形的库,而pyplot是其子模块,提供了类似于MATLAB的绘图API,可以方便地创建各种图形。

注:以下任务点的数据均来自航空公司数据

任务点1:根据“航空公司数据.xlsx”完成下述图形的绘制,要求每个图形都有标题和坐标轴名称:绘制各省份用户人数柱形图(前30名)

根据任务点1,我们需要先导入航空公司数据表。代码如图:

导入完航空公司数据表后,开始绘图,代码如下:

这段代码的主要功能是生成一个柱状图,展示了各省份用户人数的分布情况。

首先,它从名为df1的数据框中获取了'工作地所在省份'这一列,并使用value_counts()函数统计了每个省份的用户数量,然后取前30个结果存储在top30变量中。

接下来,设置了图形中的字体为'SimHei',这是为了确保中文能正确显示。

然后,创建了一个柱形图,x轴为省份(即top30的索引),y轴为用户数量(即top30的值)。每个柱子的宽度设置为0.7。

设置图表的标题为'各省份用户人数柱形图(前30名)',x轴标签为'省份',y轴标签为'用户人数'。

将x轴的标签旋转90度,以便更好地显示。

最后,对于每一个省份和其对应的用户数量,都在柱状图上方添加了一个文本标签,显示具体的用户数量。这个标签的位置是在对应省份的柱子上方100个单位的位置,水平居中对齐。

最后,使用plt.show()显示这个图形。

结果如图:

任务点2:画用户“平均折扣系数”和“飞行里程数”数据的散点图

如任务一所示,第一步依旧是先自定义一个名字并导入列表:

随后开始根据任务点二画散点图,代码如图所示:

1、plt.scatter()函数用于绘制散点图,其中df2['平均折扣系数']表示x轴的数据,df2['飞行里程数']表示y轴的数据。

2、s=1表示散点的大小为1。

3、c='r'表示散点的颜色为红色

4、marker='+'表示散点的形状为加号

5、plt.xlim(0,20)plt.ylim(0,300000)分别设置x轴和y轴的范围

6、plt.xlabel('平均折扣系数',loc='right')设置x轴的标签为“平均折扣系数”,并将标签位置设置为右侧

7、plt.ylabel('飞行里程数',loc='top')设置y轴的标签为“飞行里程数”,并将标签位置设置为顶部。

8、最后plt.show()显示绘制的散点图。

结果如图所示:

任务点3:统计每年入会会员人数,并画折线图。

步骤:

(1)查看入会时间是否是字符串序列,是则转换为时间对象序列

(2)提取入会时间的年数据作为新的列,保存到表格中

(3)分组聚合求各组人数

(4)plot画折线图

第一步,导入相关数据,如图所示:

随后开始根据任务点三的四个步骤编写代码并绘图,代码如图所示:

代码解释:

1、df3['入会时间'] = pd.to_datetime(df3['入会时间']):将'入会时间'列转换为datetime类型。

2、df3['入会年份'] = df3['入会时间'].dt.year:提取出'入会时间'列中的年份,并存储在新的'入会年份'列中。

3、years = df3.groupby('入会年份').size():按照'入会年份'进行分组,并计算每个分组的大小(即每年入会的会员人数)。

4、plt.plot(years.index,years.values):绘制折线图,横坐标为年份,纵坐标为会员人数。

5、years.plot(kind = 'line',marker='o'):使用pandas的plot方法绘制折线图,设置线条样式为实线,标记点样式为圆圈

6、plt.title('每年入会会员人数折线图'):设置图表标题为“每年入会会员人数折线图”

7、for x0,y0 in zip(years.index,years.values): plt.text(x0,y0+20,f'{y0}',ha='center'):在每个数据点上方20个单位的位置添加文本标签,显示该年份的会员人数。

8、plt.xlabel('年份'):设置x轴标签为“年份”。

9、plt.ylabel('会员人数'):设置y轴标签为“会员人数”。

10、plt.show():显示绘制的折线图。

结果如图显示:

任务点4:假设“飞龄”为用户的入会时间距离今天的年数(不满1年的时间舍去),试对“飞龄”数据分组(组距为3),并统计各组人数,画各组人数占比的饼图。(提示:使用序列的agg方法和时间类型对象)

步骤:

(1)查看入会时间是否是字符串序列,是则转换为时间对象序列

(2)创建一个表示今天的时间对象

(3)入会时间序列-今天的时间,计算时间差序列

(4)取时间差对象序列的年份数据作为新的列

(5)保存新的列(飞龄)到表格中

(6)将飞龄数据做一个数据分箱

(6)基于分箱结果做分组聚合求各组人数

(7)画饼图

第一步,导入相关数据,如图所示:

随后开始根据任务点四的七个步骤编写代码并绘图,代码如图所示:

关于以上代码的解释:

1、df4['入会时间'] = pd.to_datetime(df4['入会时间']):将数据框df4中的'入会时间'列转换为日期时间格式。

2、df4['飞龄'] = (pd.Timestamp.today().year - df4['入会时间'].dt.year):计算每个用户的飞龄,即当前年份减去入会时间年份。

3、bins = [9, 12, 15, 18]:定义一个列表,表示飞龄分组的边界值。

4、df4['飞龄分组'] = pd.cut(df4['飞龄'], bins=bins):根据给定的bins对飞龄进行分组,将分组结果存储在新的'飞龄分组'列中。

5、group = df4['飞龄分组'].value_counts():统计每个飞龄分组的用户数量。

6、plt.pie(group, labels=group.index,autopct='%1.1f%%'):使用matplotlib库绘制饼图,展示不同飞龄分组的用户数量占比。

7、plt.title('用户飞龄分布饼图'):设置饼图的标题为'用户飞龄分布饼图'

8、plt.show():显示绘制的饼图。

结果如图所示:

任务点5:同时绘制“飞行次数”数据分布的直方图和箱线图,在画布中上下分布。

第一步,导入相关数据,如图所示:

随后开始根据任务点五的步骤编写代码并绘图,代码如图所示:

关于以上代码的解释:

1、plt.figure(figsize=(12,10)):创建一个大小为12x10的画布。

2、plt.subplot(2,1,1):在画布上创建一个2行1列的子图,当前子图为第1个。

3、plt.hist(...):绘制直方图,横坐标为飞行次数,纵坐标为人数。直方图的分组区间为[df5['飞行次数'].min(), df5['飞行次数'].max()),步长为5。

4、plt.title('用户飞行次数直方图'):设置直方图的标题为“用户飞行次数直方图”。

5、plt.xlabel('飞行次数'):设置横坐标的标签为“飞行次数”。

6、plt.ylabel('人数'):设置纵坐标的标签为“人数”。

7、plt.subplot(2,1,2):在画布上创建一个2行1列的子图,当前子图为第2个。

8、plt.boxplot(...):绘制箱形图,横坐标为飞行次数,纵坐标为人数。箱形图的标签为“飞行次数”。

9、plt.title('用户飞行次数箱形图'):设置箱形图的标题为“用户飞行次数箱形图”。

10、plt.show():显示绘制的图形。

结果如图所示,就能得到两个图片:

除了以上这几种绘图方法,还有一种能够画出多种图像的方法。如图所示:

到此,所有任务均已完成

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值