条形图和热图/Bar Charts and Heatmaps

现在你能创建你自己的折线图,是时候去学习更多的图表类型了!

不得不提,如果这是你第一次使用Python写代码的经历,你应该感到骄傲你能完成到这一步,因为学习一个复杂的新技能绝不容易。如果你坚持着这个微课程,你会发现每件事都会变得更容易(同时你绘制的图表也会变得更加引人注目),因为所有图表的代码都是非常相似的。跟任何技能一样,随着时间的推移与反复练习,编程会变得自然。

在这个教程里,你将学习条形图热图

启动Notebook

跟往常一样,从启动我们的编程环境开始。

In [1]:

  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. %matplotlib inline
  4. import seaborn as sns
  5. print("Setup Complete")
  1. Setup Complete

选择数据

本教程中,咱们将使用一份来自美国交通局的跟踪航班延误的数据集。

用Excel打开该CSV文件,看到一行代表每月(1是一月,二是二月类推),一列代表每个航线代码。

图片暂缺

每个条目显示不同航空公司和月份(都在2015年)的平均到达延迟(以分钟数)。负面条目表示(平均)倾向于提前到达的航班。例如,1 月份美国航空公司的平均航班(航空公司代码:AA)晚约 7 分钟到达,而 4 月阿拉斯加航空公司的平均航班(航空公司代码:AS)大约提前 3 分钟到达。

加载数据

依旧,我们用 pd.rread_csv 加载数据。

In [2]:

  1. # Path of the file to read
  2. flight_filepath = "../input/flight_delays.csv"
  3. # Read the file into a variable flight_data
  4. flight_data = pd.read_csv(flight_filepath, index_col="Month")

你可能注意到上面的代码比咱们之前用过的稍微短点。在本例中,因为行标记(来自 'Month' 列)跟日期不一致,我们不能添加 parse_dates=True 到参数中。但是,我们照旧保留前两段文字,来提供:

  • 数据集文件路径(本例中是 flight_filepath),以及

  • 将用于做索引行的列的名称(本例中,`index_col=”Month”)。

检查数据

因为数据不大,能较容易地打印它地内容,这可以通过仅用刚刚数据集的名字写一行代码是实现。

In [3]:

  1. # Print the data
  2. flight_data

Out [3]:

AA AS B6 DL EV F9 HA MQ NK OO UA US VX WN
Month
1 6.955843 -0.320888 7.347281 -2.043847 8.537497 18.357238 3.512640 18.164974 11.398054 10.889894 6.352729 3.107457 1.420702 3.389466
2 7.530204 -0.782923 18.657673 5.614745 10.417236 27.424179 6.029967 21.301627 16.474466 9.588895 7.260662 7.114455 7.784410 3.501363
3 6.693587 -0.544731 10.741317 2.077965 6.730101 20.074855 3.468383 11.018418 10.039118 3.181693 4.892212 3.330787 5.348207 3.263341
4 4.931778 -3.009003 2.780105 0.083343 4.821253 12.640440 0.011022 5.131228 8.766224 3.223796 4.376092 2.660290 0.995507 2.996399
5 5.173878 -1.716398 -0.709019 0.149333 7.724290 13.007554 0.826426 5.466790 22.397347 4.141162 6.827695 0.681605 7.102021 5.680777
6 8.191017 -0.220621 5.047155 4.419594 13.952793 19.712951 0.882786 9.639323 35.561501 8.338477 16.932663 5.766296 5.779415 10.743462
7 3.870440 0.377408 5.841454 1.204862 6.926421 14.464543 2.001586 3.980289 14.352382 6.790333 10.262551 NaN 7.135773 10.504942
8 3.193907 2.503899 9.280950 0.653114 5.154422 9.175737 7.448029 1.896565 20.519018 5.606689 5.014041 NaN 5.106221 5.532108
9 -1.432732 -1.813800 3.539154 -3.703377 0.851062 0.978460 3.696915 -2.167268 8.000101 1.530896 -1.794265 NaN 0.070998 -1.336260
10 -0.580930 -2.993617 3.676787 -5.011516 2.303760 0.082127 0.467074 -3.735054 6.810736 1.750897 -2.456542 NaN 2.254278 -0.688851
11 0.772630 -1.916516 1.418299 -3.175414 4.415930 11.164527 -2.719894 0.220061 7.543881 4.925548 0.281064 NaN 0.116370 0.995684
12 4.149684 -1.846681 13.839290 2.504595 6.685176 9.346221 -1.706475 0.662486 12.733123 10.947612 7.012079 NaN 13.498720 6.720893

条形图

我们想创建一个条形图,来显示Spitit 航空公司(代码:NK)每个月的平均航班延误时间。

In [4]:

  1. # Set the width and height of the figure
  2. plt.figure(figsize=(10,6))
  3. # Add title
  4. plt.title("Average Arrival Delay for Spirit Airlines Flights, by Month")
  5. # Bar chart showing average arrival delay for Spirit Airlines flights by month
  6. sns.barplot(x=flight_data.index, y=flight_data['NK'])
  7. # Add label for vertical axis
  8. plt.ylabel("Arrival delay (in minutes)")

Out [4]:

  1. Text(0, 0.5, 'Arrival delay (in minutes)')

img3.1

定制文本(标题和垂直坐标标签)和图形大小的命令跟前面课程的很像。创建条形图的代码是新学的:

  1. # Bar chart showing average arrival delay for Spirit Airlines flights by month
  2. sns.barplot(x=flight_data.index, y=flight_data['NK'])

有三部分组成:

  • sns.barplot - 这告诉notebook我们想要创建一个条形图。
    • 记住 sns 引用的是seaborn包,因此在本课程中所有你要去创建的图表都应该由这个前缀作为开始。
  • x=flight_data.index - 这将确定在水平轴上使用什么。本例,我们选择了索引行的列(在本例中为包含月份列)。

  • `y=flight_data[‘NK] - 这将设置数据中的列,用于确定每个柱的高度。本例,我们选择 NK 列。

重要提示:你必须选择带有 flight_data.index 的索引列,并且无法使用 flight_data['Month'](这将返回错误)。这是因为当我们加载数据集时,"Month"列用于索引行。我们总是要使用此特殊表示法来选择索引列。

热图

我们将学习另一个图表类型:热图

下面的代码块中,我们创建了一个热图,快速可视化了 flight_data,每个小方块都根据其值进行了颜色映射。

In [5]:

  1. # Set the width and height of the figure
  2. plt.figure(figsize=(14,7))
  3. # Add title
  4. plt.title("Average Arrival Delay for Each Airline, by Month")
  5. # Heatmap showing average arrival delay for each airline by month
  6. sns.heatmap(data=flight_data, annot=True)
  7. # Add label for horizontal axis
  8. plt.xlabel("Airline")

Out [5]:

  1. Text(0.5, 42.0, 'Airline')

imag2

创建热图的关键代码是:

  1. # Heatmap showing average arrival delay for each airline by month
  2. sns.heatmap(data=flight_data, annot=True)

他有三个主要组成部分:

  • sns.heatmap - 这告诉notebook我们想要创建一个热图

  • data=flight_data - 这告诉notebook使用所有的 flight_data 数据去创建热图。

  • annot=True - 这可确保每个单元格的值显示在图表上。(不删除每个单元格中的数字

表中可以检测到哪些模式?例如,如果你仔细观察,接近年底的月份(尤其是9-11个月)对于所有航空公司来说都显得相对黑暗。这表明航空公司在这几个月中在遵守时间表方面更好( 平均而言)

What’s next?

通过代码训练创建你自己的可视化!