简介: 在数据挖掘项目初期,需要对数据进行探索性分析,这样方便对数据有一个大致的了解,其中最直观的方式就是对数据进行可视化。
可视化视图有哪些?
可视化图可以分为4个类别,分别是比较,联系,构成和分布。
1、比较:比较数据间的类别关系,或者是它们随着时间的变化趋势,比如折线图。
2、联系:查看两个变量及两个以上变量的关系,比如散点图。
3、构成:每个部分占整体的百分比,或者是随着时间的百分比变化,如饼图。
4、分布:关注单一变量,或者多个变量分布情况,如直方图。
散点图
场景:适合展示两个变量的关系。
代码:
import matplotlib.pyplot as plt import numpy as np import pandas as pd x = np.random.rand(10) y = np.random.rand(10) plt.scatter(x,y,marker=None) plt.show()
x、y 是坐标,marker 代表了标记的符号。比如“x”、“>”或者“o”。
下面三张图分别对应“x”“>”和“o”
还有seaborn可以进行绘制散点图:
import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as sns # 数据准备 x = np.random.rand(10) y = np.random.rand(10) # 用Seaborn画散点图 df = pd.DataFrame({'x':x,'y':y}) #x,y是data的下标,data是要传入的数据,kind有很多类别,其中scatter是散点 sns.jointplot(x='x',y='y',data=df,kind='scatter') plt.show()
Matplot绘制
seaborn绘制:
二元变量分布:
如果想看两个变量之间的关系,需要用到二元变量分布。
代码:
折线图:
场景:可以用来表示数据随着时间变化的趋势。
代码:
import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as sns x = [2010,2011,2012,2013,2014,2015,2016,2017,2018,2019] y = [2,3,14,5,6,7,8,9,7,10] #使用Matplotlib画折线图 plt.plot(x,y) plt.show() df =pd.DataFrame({'x':x,'y':y}) sns.lineplot(x='x',y='y',data=df) plt.show()
Matplot绘画:
sns绘画:
直方图:
场景:对单一变量进行数值上的分布可视化。
代码:
import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as sns a = np.random.rand(100) s = pd.Series(a) #用matplot画直方图 plt.hist(s) plt.show() #用seaborn画直方图 ''' kde代表显示核密度估计,默认为True 核密度估计是通过核函数帮我们估计概率密度的方法。 ''' sns.distplot(s,kde=False) plt.show() sns.distplot(s,kde=True) plt.show()
条形图:
场景:直方图可以看到变量数值分布,那么条形图可以查看类别的特征。
代码:
import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as sns x = ['type1','type2','type3'] y = [5,6,7] #matplot绘制 plt.bar(x,y) plt.show() #sns绘制 sns.barplot(x,y) plt.show()
箱线图:
场景:箱线图由五个数值点组成:最大值、最小值、中位数、和上下四分位数(Q3,Q1)它可以帮我们分析出数据的差异性、离散程度和异常值。
代码:
import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as sns #生成10*4维度的数据 data = np.random.normal(size=(10,4)) lable = ['A','B','C','D'] #用matplotlib画箱线图 ''' 其中参数x代表要绘制的箱线图数据,lables是缺省值, 可以为箱线图添加标签 ''' plt.boxplot(data,labels=lable) plt.show() ''' data是DataFrame,x,y是data中的变量 ''' df = pd.DataFrame(data=data,columns=lable) sns.boxplot(data=df) plt.show()
饼图:
场景:显示每个部分大小和总和之间的比例。
代码:
import matplotlib.pyplot as plt import numpy as np import pandas as pd #x代表要绘制的饼图数据,lables缺省值 nums = [25,37,33,6] lables = ['A','B','C','D'] plt.pie(x = nums,labels=lables) plt.show()
热力图:
场景:多元变量分析的方法。通过颜色可以直观的知道某个位置上数值的大小。
一般用sns.hearmap(data)函数
import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as sns x = np.random.randn(4, 4) #annot显示深度数值 sns.heatmap(x,annot=True) plt.show()
蜘蛛图(雷达图):
场景:显示一对多关系的方法。
import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as sns labels = np.array(['艺术A','调研I','实际R','常规C','企业E','社会S']) #数据个数 dataLenth = 6 #数据 data = np.array([1,4,3,6,4,8]) #endpoint 如果为True,则 stop 是最后一个样本。否则,它不包括在内。默认为True。 ''' 因为蜘蛛图是一个圆形,需要计算每个坐标的角度,然后对这些数值进行设置,当画完最后一个点,需要和 第一个点进行连线 ,因为需要计算角度,所以需要准备angles数组, ''' angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False) #将数据进行连接形成闭合 data = np.concatenate((data, [data[0]])) # 闭合 angles = np.concatenate((angles, [angles[0]])) # 闭合 #创建一个空白的figure对象 fig = plt.figure() #将画板分为1行 1列, 画第一个 ax = fig.add_subplot(111, polar=True)# polar参数!! ax.plot(angles, data, 'bo-', linewidth=2)# 画线 ax.fill(angles, data, facecolor='r', alpha=0.25)# 填充 ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties="SimHei") ax.set_title("matplotlib雷达图", va='bottom', fontproperties="SimHei") ax.set_rlim(0,10) ax.grid(True) plt.show()
成对关系:
如果想要探索数据集中多个成对双变量的分布,可以用sns.pairplot()函数,
代码:
import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as sns iris = sns.load_dataset('iris') sns.pairplot(iris) plt.show()