目录
注意:本篇博文中所记录的笔记中尚存一些问题,已用红色字体标示出。
1 可视化分析数据关系
本节将会根据不同的数据类型,使用合适的数据可视化方法,对数据进行分析。针对不同的可视化图像,会尽可能地使用相对简单的可视化方式进行数据可视化。在进行数据可视化时,分为连续变量间关系可视化分析、分类变量间关系可视化、连续变量和分类变量间关系可视化分析,以及其他类型数据可视化分析。
1.1 连续变量间关系可视化分析
当待分析的数据均为连续变量时,由于数据变量的数目不同和想要从数据中获取信息的目的不同,可以使用不同的可视化方法。下面以鸢尾花数据集为例:
Iris.csv文件链接:
链接:https://pan.baidu.com/s/1TEq5SxWyi-6deYixjP_s8Q
提取码:whj6
import pandas as pd
#读取鸢尾花数据集
Iris = pd.read_csv("E:/PYTHON/Iris.csv")
Iris2 = Iris.drop(["Id","Species"],axis=1)
print(Iris2.head(3))
运行结果如下:
SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
1.1.1 两个连续变量之间的可视化
对于两个连续数值变量之间的可视化方式,最直观的就是使用散点图进行可视化分析。下面对于鸢尾花数据集中的SepalLengthCm和SepalWidthCm变量,使用以下程序得到散点图:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#图像显示中文设置
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#读取鸢尾花数据集
Iris = pd.read_csv("E:/PYTHON/Iris.csv")
Iris2 = Iris.drop(["Id","Species"],axis=1)
plt.figure(figsize=(10,6))
sns.scatterplot(x="SepalLengthCm",y="SepalWidthCm",data=Iris2,s=50)
plt.grid()
plt.title('散点图')
plt.show()
运行结果如下:
两个连续变量之间的可视化
从散点图中很容易分析两个变量之间的变化趋势,如果想要分析两个变量在空间中的分布情况,可以使用2D密度曲线图进行可视化分析。
#2D密度曲线
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#图像显示中文设置
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#读取鸢尾花数据集
Iris = pd.read_csv("E:/PYTHON/Iris.csv")
Iris2 = Iris.drop(["Id","Species"],axis=1)
sns.jointplot(x="SepalLengthCm",y="SepalWidthCm",data=Iris2,kind='kde',color='blue')
plt.grid()
plt.show()
运行结果如下:
2D密度曲线图
2D密度曲线图中不同位置,数据分布的密度是不一样的,同时在图的右侧和上方,分别可视化出了两个变量的一维密度曲线,用于帮助分析数据的分布情况。
针对两个数值变量,如果想要分析两者在各自的一维空间上分布情况差异,可以使用分组直方图可视化出两组数据在同一坐标系下的分布情况。
#直方图
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#图像显示中文设置
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#读取鸢尾花数据集
Iris = pd.read_csv("E:/PYTHON/Iris.csv")
Iris2 = Iris.drop(["Id","Species"],axis=1)
Iris2.iloc[:,0:2].plot(kind='hist',bins=30,figsize=(10,6))
plt.grid()
plt.title('分组直方图')
plt.show()
运行结果如下:
从运行结果来看,两个变量的数据分布位置和范围都很容易比较,而且还可以发现两者数据聚集情况的差异,其中变量SepalLengthCm的取值范围比变量SepalWidthCm大,位置也更集中,但是SepalWidthCm的分布更加聚集。
1.1.2 多个连续变量之间的可视化
针对多个连续变量之间的数据可视化,通常会使用气泡图、小提琴图、蒸汽图等对数据进行可视化分析。
气泡图通常用于3个变量的可视化,其中两个变量表示点所在的位置,另一个变量使用点的大小反映数据取值大小,从而可以在二维空间中分析3个变量之间的关系。
#气泡图
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#图像显示中文设置
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#读取鸢尾花数据集
Iris = pd.read_csv("E:/PYTHON/Iris.csv")
Iris2 = Iris.drop(["Id","Species"],axis=1)
plt.figure(figsize=(10,6))
sns.scatterplot(x="PetalWidthCm",y="SepalWidthCm",data=Iris2,
size="SepalLengthCm",sizes=(20,200),palette="muted")
plt.title('气泡图')
plt.legend(loc="best")
plt.grid()
plt.show()
运行结果如下:
变量PetalWidthCm和变量SepalWidthCm用于指定点在空间中的位置,而气泡的大小使用变量SepalLengthCm表示。从图中可以发现,变量PetalWidthCm和变量SepalWidthCm的取值越大,所对应的气泡也越大。
如果想要分析多个变量之间数据分布趋势的差异,则可以使用小提琴图进行分析,在小提琴图中可以获取数据的取值范围、集中位置、离散情况等,并且还可以同时将多个变量的小提琴图可视化在一幅图中,用于分析多个变量的分布差异等内容。
#使用小提琴图分析数据取值上的差异
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#图像显示中文设置
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#读取鸢尾花数据集
Iris = pd.read_csv("E:/PYTHON/Iris.csv")
Iris2 = Iris.drop(["Id","Species"],axis=1)
plt.figure(figsize=(10,6))
sns.violinplot(data=Iris2.iloc[:,0:4],palette="Set3",bw=0.5)
plt.title('小提琴图')
plt.grid()
plt.show()
运行结果如下:
从图中可以发现,数据的离散程度从小到大以此是:SepalWidthCm、PetalLengthCm、SepalLengthCm、PetalWidthCm,而且数据中PetalLengthCm变量和PetalWidthCm变量的分布为双峰图。
对于多个连续变量,也可以使用蒸汽图分析随着样本量的增加(或者时间的增长),数据取值的变化情况。(此处翻车了,在查找错误处,错误现象是无法显示蒸汽图)
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import altair as alt
#图像显示中文设置
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#读取鸢尾花数据集
Iris = pd.read_csv("E:/PYTHON/Iris.csv")
Irislong = Iris.melt(["Id","Species"],var_name="Measurement_type",value_name="value")
print(Irislong.head())
#蒸汽图可视化
alt.Chart(Irislong).mark_area().encode(
alt.X("Id:Q"), #X轴
alt.Y("value:Q",stack="center",axis=None), #Y轴
alt.Color('Measurement_type:N') #设置颜色
).properties(width=500,height=300) #设置图形大小
运行结果如下:
Id Species Measurement_type value
0 1 setosa SepalLengthCm 5.1
1 2 setosa SepalLengthCm 4.9
2 3 setosa SepalLengthCm 4.7
3 4 setosa SepalLengthCm 4.6
4 5 setosa SepalLengthCm 5.0
在上面的程序中,在使用鸢尾花数据之前,先对其使用melt()方法,将宽数据转化为长数据,因此在获得长数据Irislong中,变量Measurement_type表明了使用的特征名,value对应着原始特征的相应取值。
1.2 分类变量间关系可视化分析
首先导入待分析的泰坦尼克号数据:
链接:https://pan.baidu.com/s/1RSD9gfUNRqsdSimkY1wQlA
提取码:whj6
import pandas as pd
#读取演示数据
Titanic = pd.read_csv("E:/PYTHON/Titanic数据.csv")
print(Titanic.head())
运行结果如下:
Pclass Name Sex Age SibSp Parch Fare Embarked Survived
0 3 Mr. male 22.0 1 0 7.2500 S 0
1 1 Mrs. female 38.0 1 0 71.2833 C