条形图和热图/Bar Charts and Heatmaps
现在你能创建你自己的折线图,是时候去学习更多的图表类型了!
不得不提,如果这是你第一次使用Python写代码的经历,你应该感到骄傲你能完成到这一步,因为学习一个复杂的新技能绝不容易。如果你坚持着这个微课程,你会发现每件事都会变得更容易(同时你绘制的图表也会变得更加引人注目),因为所有图表的代码都是非常相似的。跟任何技能一样,随着时间的推移与反复练习,编程会变得自然。
在这个教程里,你将学习条形图和热图。
启动Notebook
跟往常一样,从启动我们的编程环境开始。
In [1]:
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
print("Setup Complete")
Setup Complete
选择数据
本教程中,咱们将使用一份来自美国交通局的跟踪航班延误的数据集。
用Excel打开该CSV文件,看到一行代表每月(1是一月,二是二月类推),一列代表每个航线代码。
每个条目显示不同航空公司和月份(都在2015年)的平均到达延迟(以分钟数)。负面条目表示(平均)倾向于提前到达的航班。例如,1 月份美国航空公司的平均航班(航空公司代码:AA)晚约 7 分钟到达,而 4 月阿拉斯加航空公司的平均航班(航空公司代码:AS)大约提前 3 分钟到达。
加载数据
依旧,我们用 pd.rread_csv
加载数据。
In [2]:
# Path of the file to read
flight_filepath = "../input/flight_delays.csv"
# Read the file into a variable flight_data
flight_data = pd.read_csv(flight_filepath, index_col="Month")
你可能注意到上面的代码比咱们之前用过的稍微短点。在本例中,因为行标记(来自 'Month'
列)跟日期不一致,我们不能添加 parse_dates=True
到参数中。但是,我们照旧保留前两段文字,来提供:
数据集文件路径(本例中是
flight_filepath
),以及将用于做索引行的列的名称(本例中,`index_col=”Month”)。
检查数据
因为数据不大,能较容易地打印它地内容,这可以通过仅用刚刚数据集的名字写一行代码是实现。
In [3]:
# Print the data
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]:
# Set the width and height of the figure
plt.figure(figsize=(10,6))
# Add title
plt.title("Average Arrival Delay for Spirit Airlines Flights, by Month")
# Bar chart showing average arrival delay for Spirit Airlines flights by month
sns.barplot(x=flight_data.index, y=flight_data['NK'])
# Add label for vertical axis
plt.ylabel("Arrival delay (in minutes)")
Out [4]:
Text(0, 0.5, 'Arrival delay (in minutes)')
定制文本(标题和垂直坐标标签)和图形大小的命令跟前面课程的很像。创建条形图的代码是新学的:
# Bar chart showing average arrival delay for Spirit Airlines flights by month
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]:
# Set the width and height of the figure
plt.figure(figsize=(14,7))
# Add title
plt.title("Average Arrival Delay for Each Airline, by Month")
# Heatmap showing average arrival delay for each airline by month
sns.heatmap(data=flight_data, annot=True)
# Add label for horizontal axis
plt.xlabel("Airline")
Out [5]:
Text(0.5, 42.0, 'Airline')
创建热图的关键代码是:
# Heatmap showing average arrival delay for each airline by month
sns.heatmap(data=flight_data, annot=True)
他有三个主要组成部分:
sns.heatmap
- 这告诉notebook我们想要创建一个热图data=flight_data
- 这告诉notebook使用所有的flight_data
数据去创建热图。annot=True
- 这可确保每个单元格的值显示在图表上。(不删除每个单元格中的数字)
表中可以检测到哪些模式?例如,如果你仔细观察,接近年底的月份(尤其是9-11个月)对于所有航空公司来说都显得相对黑暗。这表明航空公司在这几个月中在遵守时间表方面更好( 平均而言)
What’s next?
通过代码训练创建你自己的可视化!