python绘制热力图源码,python基于场景的热力图

  python绘制热力图源码,python基于场景的热力图

  热图的使用场景描述的是数据在空间上的密度,比如城市热图和区域热图,描述的是多个变量之间的关联程度。本文主要介绍python热图实现的相关信息,有需要的朋友可以参考一下。

  00-1010一、数据无量纲化处理(热图)1。数据无量纲化处理(仅介绍本文使用的方法):min-max归一化2。代码显示3。效果展示2。皮尔斯系数相关性(热图)1。数学知识2。代码展示3.seaborn.heatmap属性介绍4效果展示总结。

  

目录

  

一、数据无量纲化处理(热力图)

  这种方法是对原始数据进行线性变换,映射到[0,1],也叫偏差标准化。

  其中min是样本的最小值,max是样本的最大值。因为最大值和最小值可能会动态变化,而且也非常容易受到噪声(异常值、离群值)的影响,所以一般适用于小数据场景。此外,这种方法有两个优点:

  如果1)的某个属性/特征的方差很小,比如身高:NP。数组([[1.70],[1.71],[1.72],[1.70],[1.73]]),实际的五个数据在高度的特征上是不同的,但是很弱,不利于模型的研究。min-max归一化后为:array ([[0。], [0.3333333], [0.666667], [0.], [1.]),相当于放大了差别;

  2)在稀疏矩阵中维护0个条目。

  

1.数据无量纲化处理(仅介绍本文用到的方法):min-max归一化

  进口熊猫作为pd

  将numpy作为np导入

  将matplotlib.pyplot作为plt导入

  将seaborn作为sns导入

  从sklearn.datasets导入load_wine

  wine=load_wine()

  Data=wine.data # data

  Lables=wine.target # label

  feaures=wine.feature _ names

  Df=pd.dataframe (data,columns=features)#原始数据

  #第一步:无量纲化

  定义标准数据(df):

  Df :原始数据

  返回:数据标准化数据

  data=PD . data frame(index=df . index)#列名,一个新的数据帧

  Columns=df.columns.tolist() #提取列名。

  对于列:中的列

  d=df[列]

  max=d.max()

  min=d.min()

  mean=d.mean()

  data[col]=((d - mean)/(max - min))。tolist()

  返回数据

  #一列用作参考序列,其他列为比较序列。

  def graOne(数据,m=0):

  返回:

  Columns=Data.columns.tolist() #提取列名。

  #第一步:无量纲化

  数据=标准数据(数据)

  Seq=data.iloc [:m] #参考序列

  Data.drop (columns [m],axis=1,inplace=true) #删除引用列

  比较序列=data.iloc [:03360] #比较序列

  row,col=compareSeq.shape

  #步骤2:参考序列-比较序列

   data_sub = np.zeros([row, col])

   for i in range(col):

   for j in range(row):

   data_sub[j, i] = abs(referenceSeq[j] - compareSeq.iloc[j, i])

   # 找出最大值和最小值

   maxVal = np.max(data_sub)

   minVal = np.min(data_sub)

   cisi = np.zeros([row, col])

   for i in range(row):

   for j in range(col):

   cisi[i, j] = (minVal + 0.5 * maxVal) / (data_sub[i, j] + 0.5 * maxVal)

   # 第三步:计算关联度

   result = [np.mean(cisi[:, i]) for i in range(col)]

   result.insert(m, 1) # 参照列为1

   return pd.DataFrame(result)

  def GRA(Data):

   df = Data.copy()

   columns = [str(s) for s in df.columns if s not in [None]] # [1 2 ,,,12]

   # print(columns)

   df_local = pd.DataFrame(columns=columns)

   df.columns = columns

   for i in range(len(df.columns)): # 每一列都做参照序列,求关联系数

   df_local.iloc[:, i] = graOne(df, m=i)[0]

   df_local.index = columns

   return df_local

  # 热力图展示

  def ShowGRAHeatMap(DataFrame):

   colormap = plt.cm.hsv

   ylabels = DataFrame.columns.values.tolist()

   f, ax = plt.subplots(figsize=(15, 15))

   ax.set_title(Wine GRA)

   # 设置展示一半,如果不需要注释掉mask即可

   mask = np.zeros_like(DataFrame)

   mask[np.triu_indices_from(mask)] = True # np.triu_indices 上三角矩阵

   with sns.axes_style("white"):

   sns.heatmap(DataFrame,

   cmap="YlGnBu",

   annot=True,

   mask=mask,

   )

   plt.show()

  data_wine_gra = GRA(df)

  ShowGRAHeatMap(data_wine_gra)

  

  

3.效果展示

  

  

  

二、皮尔斯系数相关(热力图)

  

  

1.数学知识

  利用热力图可以看数据表里多个特征两两的相似度。

  相似度由皮尔逊相关系数度量。

  两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商:

  

  

2.代码展示

  

import pandas as pd

  import numpy as np

  import matplotlib.pyplot as plt

  import seaborn as sns

  # ====热力图

  from matplotlib.ticker import FormatStrFormatter

  encoding="utf-8"

  data = pd.read_csv("tu.csv", encoding="utf-8") #读取数据

  data.drop_duplicates()

  data.columns = [i for i in range(data.shape[1])]

  # 计算两两属性之间的皮尔森相关系数

  corrmat = data.corr()

  f, ax = plt.subplots(figsize=(12, 9))

  # 返回按“列”降序排列的前n行

  k = 30

  cols = corrmat.nlargest(k, data.columns[0]).index

  # 返回皮尔逊积矩相关系数

  cm = np.corrcoef(data[cols].values.T)

  sns.set(font_scale=1.25)

  hm = sns.heatmap(cm,

   cbar=True,

   annot=True,

   square=True,

   fmt=".3f",

   vmin=0, #刻度阈值

   vmax=1,

   linewidths=.5,

   cmap="RdPu", #刻度颜色

   annot_kws={"size": 10},

   xticklabels=True,

   yticklabels=True) #seaborn.heatmap相关属性

  # 解决中文显示问题

  plt.rcParams[font.sans-serif] = [SimHei]

  plt.rcParams[axes.unicode_minus] = False

  # plt.ylabel(fontsize=15,)

  # plt.xlabel(fontsize=15)

  plt.title("主要变量之间的相关性强弱", fontsize=20)

  plt.show()

  

  

3.seaborn.heatmap属性介绍

  1)Seaborn是基于matplotlib的Python可视化库

  seaborn.heatmap()热力图,用于展示一组变量的相关系数矩阵,列联表的数据分布,通过热力图我们可以直观地看到所给数值大小的差异状况。

  

seaborn.heatmap(data, vmin=None, 

  vmax=None, cmap=None, center=None,

  robust=False, annot=None, fmt=.2g,

  annot_kws=None, linewidths=0, linecolor=white,

   cbar=True, cbar_kws=None, cbar_ax=None,

  square=False, xticklabels=auto, yticklabels=auto,

   mask=None, ax=None, **kwargs)

  2)参数输出(均为默认值)

  

sns.heatmap(

   data,

   vmin=None,

   vmax=None,

   cmap=None,

   center=None,

   robust=False,

   annot=None,

   fmt=.2g,

   annot_kws=None,

   linewidths=0,

   linecolor=‘white,

   cbar=True,

   cbar_kws=None,

   cbar_ax=None,

   square=False,

   xticklabels=‘auto,

   yticklabels=‘auto,

   mask=None,

   ax=None,

  )

  3)具体介绍

  

(1)热力图输入数据参数data:矩阵数据集,可以是numpy的数组(array),也可以是pandas的DataFrame。如果是DataFrame,则df的index/column信息会分别对应到heatmap的columns和rows,即df.index是热力图的行标,df.columns是热力图的列标

  (2)热力图矩阵块颜色参数

  vmax,vmin:分别是热力图的颜色取值最大和最小范围,默认是根据data数据表里的取值确定
cmap:从数字到色彩空间的映射,取值是matplotlib包里的colormap名称或颜色对象,或者表示颜色的列表;改参数默认值:根据center参数设定
center:数据表取值有差异时,设置热力图的色彩中心对齐值;通过设置center值,可以调整生成的图像颜色的整体深浅;设置center数据时,如果有数据溢出,则手动设置的vmax、vmin会自动改变
robust:默认取值False;如果是False,且没设定vmin和vmax的值,热力图的颜色映射范围根据具有鲁棒性的分位数设定,而不是用极值设定

  (3)热力图矩阵块注释参数

  annot(annotate的缩写):默认取值False;如果是True,在热力图每个方格写入数据;如果是矩阵,在热力图每个方格写入该矩阵对应位置数据
fmt:字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位数字
annot_kws:默认取值False;如果是True,设置热力图矩阵上数字的大小颜色字体,matplotlib包text类下的字体设置;

  (4)热力图矩阵块之间间隔及间隔线参数

  linewidths:定义热力图里表示两两特征关系的矩阵小块之间的间隔大小
linecolor:切分热力图上每个矩阵小块的线的颜色,默认值是’white’

  (5)热力图颜色刻度条参数

  cbar:是否在热力图侧边绘制颜色刻度条,默认值是True
cbar_kws:热力图侧边绘制颜色刻度条时,相关字体设置,默认值是None
cbar_ax:热力图侧边绘制颜色刻度条时,刻度条位置设置,默认值是None

  (6)square:设置热力图矩阵小块形状,默认值是False

  xticklabels, yticklabels:xticklabels控制每列标签名的输出;yticklabels控制每行标签名的输出。默认值是auto。如果是True,则以DataFrame的列名作为标签名。如果是False,则不添加行标签名。如果是列表,则标签名改为列表中给的内容。如果是整数K,则在图上每隔K个标签进行一次标注。 如果是auto,则自动选择标签的标注间距,将标签名不重叠的部分(或全部)输出
mask:控制某个矩阵块是否显示出来。默认值是None。如果是布尔型的DataFrame,则将DataFrame里True的位置用白色覆盖掉
ax:设置作图的坐标轴,一般画多个子图时需要修改不同的子图的该值
**kwargs:所有其他关键字参数都传递给 ax.pcolormesh。

  

  

  

4效果展示

  

  

  

总结

  到此这篇关于python热力图实现的文章就介绍到这了,更多相关python热力图实现内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: