实验项目名称:Seaborn可视化基础
实验目的及要求:
(1)了解scatterplt函数的使用格式。
(2)掌握散点图的绘制方法。
(3)了解stripplot函数的使用格式。
(4)掌握分类散点图的绘制方法。
(5)了解distplot函数的绘制格式。
(6)掌握单变量分布图的绘制方法。
(7)了解regplot函数的使用格式。
(8)掌握线性回归拟合图的绘制方法。
(9)了解heatmap函数的使用格式。
(10)掌握热力图的绘制方法。
实验内容:
实训一 分析各空气质量指数之间的关系及其分布情况
实验步骤
(1)使用pandas库读取芜湖市2020年空气质量指数统计数据。
In [2]:
import numpy as np import pandas as pd import seaborn as sns data=pd.read_csv('./aqi.csv') data
Out[2]:
日期 | AQI | 质量等级 | PM2.5含量(ppm) | PM10含量(ppm) | SO2含量(ppm) | CO含量(ppm) | NO2含量(ppm) | O3_8h含量(ppm) | |
---|---|---|---|---|---|---|---|---|---|
0 | 2020/1/1 | 79 | 良 | 58 | 64 | 8 | 0.7 | 57 | 23 |
1 | 2020/1/2 | 112 | 轻度污染 | 84 | 73 | 10 | 1.0 | 71 | 7 |
2 | 2020/1/3 | 68 | 良 | 49 | 51 | 7 | 0.8 | 49 | 3 |
3 | 2020/1/4 | 90 | 良 | 67 | 57 | 7 | 1.2 | 53 | 18 |
4 | 2020/1/5 | 110 | 轻度污染 | 83 | 65 | 7 | 1.0 | 51 | 46 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
266 | 2020/9/23 | 46 | 优 | 17 | 33 | 7 | 0.7 | 33 | 92 |
267 | 2020/9/24 | 60 | 良 | 27 | 51 | 10 | 0.7 | 48 | 106 |
268 | 2020/9/25 | 62 | 良 | 21 | 47 | 9 | 0.7 | 43 | 114 |
269 | 2020/9/26 | 74 | 良 | 29 | 53 | 9 | 0.7 | 37 | 128 |
270 | 2020/9/27 | 60 | 良 | 18 | 41 | 9 | 0.6 | 25 | 112 |
271 rows × 9 columns
(2)解决中文子体的显示问题,设置字体为黑体,并解决保存图像时负号“-”显示为方块的问题。
In [8]:
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']='SimHei'#设置字体为黑体 plt.rcParams['axes.unicode_minus']=False#解决保存图像时负号“-”显示为方块的问题
(3)绘制AQI和PM2.5的关系散点图。
In [6]:
###绘制AQI和PM2.5的关系散点图 #########两种方式: #######################第一种:以PM2.5含量(ppm)为x轴,以AQI为y轴 plt.figure(figsize=(12,12),dpi=80,facecolor='skyblue',edgecolor="skyblue") plt.title('AQI和PM2.5的关系散点图', fontsize=20,color='purple') plt.ylabel('AQI', fontsize=15,color='green') plt.xlabel('PM2.5含量(ppm)', fontsize=15,color='purple') plt.scatter(data['PM2.5含量(ppm)'],data['AQI'],c='green',marker='.')
Out[6]:
<matplotlib.collections.PathCollection at 0x1de2021a5b0>
In [4]:
##########第二种:以AQI为x轴,以PM2.5含量(ppm)为y轴 import seaborn as sns #忽略警告 import warnings warnings.filterwarnings('ignore') #使用seaborn库绘图 sns.set_style('whitegrid',{'font.sans-serif':['simhei','Arial']}) plt.figure(figsize=(12,12),dpi=80,facecolor='skyblue',edgecolor="skyblue") plt.title('AQI和PM2.5的关系散点图', fontsize=20,color='purple') plt.xlabel('AQI', fontsize=15,color='green') plt.ylabel('PM2.5含量(ppm)', fontsize=15,color='purple') sns.scatterplot(x=data['AQI'],y=data['PM2.5含量(ppm)'],data=data) plt.show()
(4)绘制空气质量等级分类散点图
In [10]:
data[data.columns[2]]
Out[10]:
0 良 1 轻度污染 2 良 3 良 4 轻度污染 ... 266 优 267 良 268 良 269 良 270 良 Name: 质量等级, Length: 271, dtype: object
In [42]:
# 绘制空气质量等级分类散点图 #########两种方式: ##################第一种:利用质量等级与AQI绘图,以质量等级为x轴,以AQI为y轴 # 设定画布大小 plt.figure(figsize=(12,12),dpi=80,facecolor='skyblue',edgecolor="skyblue") # 绘制散点图 sns.stripplot(x=data[data.columns[2]], y=data[data.columns[1]], data=data, jitter=True) # 设定x轴标签和字体大小 plt.xlabel('空气质量等级', fontsize=15,color='purple') # 设定y轴标签和字体大小 plt.ylabel('AQI', fontsize=15,color='green') # 设定标题和字体大小 plt.title('芜湖市空气质量等级分类散点图', fontsize=20,color='purple') # 显示图形 plt.show()
In [43]:
############第二种:利用日期和质量等级绘图,以日期为x轴,以空气质量等级为y轴 plt.figure(figsize=(12,12),dpi=80,facecolor='skyblue',edgecolor="skyblue") # 设定x轴标签和字体大小 plt.xlabel('日期', fontsize=15,color='purple') # 设定y轴标签和字体大小 plt.ylabel('空气质量等级', fontsize=15,color='green') plt.title('芜湖市空气质量等级分类散点图', fontsize=20,color='purple') # 设定标题和字体大小 markers={'良':'0','轻度污染':'D','优':'S','中度污染':'V','重度污染':'2'} sns.scatterplot(y=data['质量等级'],x=data['日期'],hue='质量等级',markers=markers,data=data) plt.show()
(5)绘制空气质量等级单变量分布图。
In [9]:
# 绘制空气质量等级单变量分布 #####两种方式: ##############第一种:调用seaborn库的countplot函数 plt.figure(figsize=(10,10),dpi=80,facecolor='skyblue',edgecolor="skyblue") # 绘制以第三列为 x 轴,数据来源为 data 的计数图 sns.countplot(x=data.columns[20], data=data) # 设置标题为“空气质量等级单变量分布图” plt.title("空气质量等级单变量分布图",fontsize=20,color='purple') # 设置 x 轴标签为“质量等级” plt.xlabel("质量等级",fontsize=15,color='purple') # 设置 y 轴标签为“频数” plt.ylabel("频数",fontsize=15,color='green') # 显示图像 plt.show()
In [46]:
############第二种方式:调用seaborn库的displot函数, sns.displot(data['质量等级'],kde=False,color='red') # 设置标题为“空气质量等级单变量分布图” plt.title("空气质量等级单变量分布图",fontsize=20,color='purple') # 设置 x 轴标签为“质量等级” plt.xlabel("质量等级",fontsize=15,color='purple') # 设置 y 轴标签为“频数” plt.ylabel("频数",fontsize=15,color='green') plt.show()
(6)绘制PM2.5与AQI的线性回归拟合图。
In [5]:
# 绘制PM2.5与AQI的线性回归拟合图 plt.figure(figsize=(12,12),dpi=80,facecolor='skyblue',edgecolor="skyblue") # 调用seaborn库的regplot函数,将PM2.5含量(ppm)作为x轴,AQI作为y轴,数据源为aqi sns.regplot(x='PM2.5含量(ppm)', y='AQI', data=data,color='green') # 设定图表标题为 'PM2.5与AQI的线性回归拟合图' plt.title('PM2.5与AQI的线性回归拟合图',color='purple',fontsize=20) # 设定图表x轴标签为'PM2.5含量(ppm)' plt.xlabel('PM2.5含量(ppm)',color='purple',fontsize=15) # 设定图表y轴标签为'AQI' plt.ylabel('AQI',color='green',fontsize=15) # 显示图表 plt.show()
(7)绘制AQI、PM2含量、PM10含量两两之间的相关性网格图
In [33]:
#####绘制AQI、PM2含量、PM10含量两两之间的相关性网格图 plt.figure(figsize=(14,14))#设置画布大小 ###调用seaborn库中的PairGrid函数 g = sns.PairGrid(data, vars=['AQI', 'PM2.5含量(ppm)','PM10含量(ppm)'],hue='质量等级') g = g.map(plt.scatter) plt.suptitle('AQI、PM2含量、PM10含量两两之间的相关性网格图', verticalalignment='bottom' , y=1,color='purple',fontsize=20) plt.show()
<Figure size 1400x1400 with 0 Axes>
实训二 分析各空气质量指数与AQI的相关性
基于实训一的数据绘制热力图,分析各空气质量指数与AQI的相关性
(1)计算相关系数
In [12]:
# 计算相关系数 # 计算相关系数并赋值给变量 corr corr = data[['AQI', 'PM2.5含量(ppm)', 'PM10含量(ppm)', 'SO2含量(ppm)', 'CO含量(ppm)', 'NO2含量(ppm)', 'O3_8h含量(ppm)']].corr() print("AQI与其他因素的相关系数如下:\n", corr)
AQI与其他因素的相关系数如下: AQI PM2.5含量(ppm) PM10含量(ppm) SO2含量(ppm) CO含量(ppm) \ AQI 1.000000 0.722789 0.753629 0.481377 0.444786 PM2.5含量(ppm) 0.722789 1.000000 0.760575 0.259824 0.519367 PM10含量(ppm) 0.753629 0.760575 1.000000 0.623885 0.429214 SO2含量(ppm) 0.481377 0.259824 0.623885 1.000000 0.391106 CO含量(ppm) 0.444786 0.519367 0.429214 0.391106 1.000000 NO2含量(ppm) 0.449114 0.489421 0.656500 0.614224 0.494028 O3_8h含量(ppm) 0.461272 -0.123367 0.299201 0.472670 -0.065683 NO2含量(ppm) O3_8h含量(ppm) AQI 0.449114 0.461272 PM2.5含量(ppm) 0.489421 -0.123367 PM10含量(ppm) 0.656500 0.299201 SO2含量(ppm) 0.614224 0.472670 CO含量(ppm) 0.494028 -0.065683 NO2含量(ppm) 1.000000 0.025897 O3_8h含量(ppm) 0.025897 1.000000
In [11]:
corr.round(2)
Out[11]:
AQI | PM2.5含量(ppm) | PM10含量(ppm) | SO2含量(ppm) | CO含量(ppm) | NO2含量(ppm) | O3_8h含量(ppm) | |
---|---|---|---|---|---|---|---|
AQI | 1.00 | 0.72 | 0.75 | 0.48 | 0.44 | 0.45 | 0.46 |
PM2.5含量(ppm) | 0.72 | 1.00 | 0.76 | 0.26 | 0.52 | 0.49 | -0.12 |
PM10含量(ppm) | 0.75 | 0.76 | 1.00 | 0.62 | 0.43 | 0.66 | 0.30 |
SO2含量(ppm) | 0.48 | 0.26 | 0.62 | 1.00 | 0.39 | 0.61 | 0.47 |
CO含量(ppm) | 0.44 | 0.52 | 0.43 | 0.39 | 1.00 | 0.49 | -0.07 |
NO2含量(ppm) | 0.45 | 0.49 | 0.66 | 0.61 | 0.49 | 1.00 | 0.03 |
O3_8h含量(ppm) | 0.46 | -0.12 | 0.30 | 0.47 | -0.07 | 0.03 | 1.00 |
(2)绘制特征相关性热力图
In [10]:
# 绘制特征相关性热力图 # 设置画布大小 plt.figure(figsize=(17, 14)) # 计算相关系数并赋值给变量 corr corr = data[['AQI', 'PM2.5含量(ppm)', 'PM10含量(ppm)', 'SO2含量(ppm)', 'CO含量(ppm)', 'NO2含量(ppm)', 'O3_8h含量(ppm)']].corr() # 以热图的形式展示相关性,并用蓝红色调表示,同时在每个方格中显示数值,并设置线宽为1 sns.heatmap(corr[::-1], cmap='RdBu_r', annot=True, linewidths=1) # 设置热图的标题,并设置字体大小为25 plt.title("各污染物之间的特征相关性热力分布图",color='purple',fontsize=20) # 设置x轴标签字体大小为15 plt.xticks(fontsize=15) # 设置y轴标签字体大小为15 plt.yticks(fontsize=15) # 展示画布 plt.show()
(3)以质量等级为类别绘制AQI、PM2.5含量两个变量的回归网格图。
In [8]:
######绘制以质量等级为类别绘制AQI、PM2.5含量两个变量的回归网格图 #####调用seaborn库中lmplot函数,利用col_wrap=2,将图形划分成一行排两个 sns.lmplot(y='AQI',x='PM2.5含量(ppm)',col='质量等级',col_wrap=2,data=data) plt.show()
实验环境:
硬件:计算机
软件:python+jupyter notebook+Seaborn
实验结果:
(1)PM2.5与空气质量指数的关系?
答:从PM2.5与AQI的线性回归拟合图与AQI、PM2含量、PM10含量两两之间的相关性网格图可以很清楚的看出,
PM2.5与空气质量指数呈线性关系;
其中与AQI呈线性关系尤为明显;并且可以看出基本上呈正相关。
(2)空气质量指数的分类和分布情况?
答:空气质量指数的分类有五种分别是轻度污染、良、优、中度污染、重度污染;
从空气质量等级单变量分布图和空气质量等级分类散点图结合来看:可以看出中度污染和重度污染占比很少(各有一
个);良在140-160(个)之间,
轻度污染在20-40(个)之间,优在80-100(个)之间。其中良占比最高,其次是优。
单从空气质量等级分类散点图来看:空气质量指数良在50-100之间,轻度污染在100-125之间,优在25-50之间,中度
污染在160-175之间,重度污染在200-210之间;即良和优的空气质量质数比较好,而中度污染和重度污染空气质量指数
很差。
说明:空气质量在逐年改善,但仍需要进一步努力,多植树造林,增加绿化面积对改善空气成分有很大帮助,进而可以
改善空气质量
(3)各空气质量指数与AQI的相关性如何?