python热力图实现的完整实例


Posted in Python onJune 25, 2022

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

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

该方法是对原始数据进行线性变换,将其映射到[0,1]之间,该方法也被称为离差标准化。

python热力图实现的完整实例

上式中,min是样本的最小值,max是样本的最大值。由于最大值与最小值可能是动态变化的,同时也非常容易受噪声(异常点、离群点)影响,因此一般适合小数据的场景。此外,该方法还有两点好处:

   1) 如果某属性/特征的方差很小,如身高:np.array([[1.70],[1.71],[1.72],[1.70],[1.73]]),实际5条数据在身高这个特征上是有差异的,但是却很微弱,这样不利于模型的学习,进行min-max归一化后为:array([[ 0. ], [ 0.33333333], [ 0.66666667], [ 0. ], [ 1. ]]),相当于放大了差异;

   2) 维持稀疏矩阵中为0的条目。

2.代码展示

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_wine
 
wine = load_wine()
data = wine.data  # 数据
lables = wine.target  # 标签
feaures = wine.feature_names
df = pd.DataFrame(data, columns=feaures)  # 原始数据
 
# 第一步:无量纲化
def standareData(df):
    """
    df : 原始数据
    return : data 标准化的数据
    """
    data = pd.DataFrame(index=df.index)  # 列名,一个新的dataframe
    columns = df.columns.tolist()  # 将列名提取出来
    for col in columns:
        d = df[col]
        max = d.max()
        min = d.min()
        mean = d.mean()
        data[col] = ((d - mean) / (max - min)).tolist()
    return data
 
#  某一列当做参照序列,其他为对比序列
def graOne(Data, m=0):
    """
    return:
    """
    columns = Data.columns.tolist()  # 将列名提取出来
    # 第一步:无量纲化
    data = standareData(Data)
    referenceSeq = data.iloc[:, m]  # 参考序列
    data.drop(columns[m], axis=1, inplace=True)  # 删除参考列
    compareSeq = data.iloc[:, 0:]  # 对比序列
    row, col = compareSeq.shape
    # 第二步:参考序列 - 对比序列
    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.效果展示

python热力图实现的完整实例

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

1.数学知识

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

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

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

python热力图实现的完整实例

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热力图实现的文章就介绍到这了,更多相关python热力图实现内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Python 相关文章推荐
解析Python中的异常处理
Apr 28 Python
Python入门之三角函数tan()函数实例详解
Nov 08 Python
Python之文字转图片方法
May 10 Python
python3中函数参数的四种简单用法
Jul 09 Python
Django页面数据的缓存与使用的具体方法
Apr 23 Python
Python3多目标赋值及共享引用注意事项
May 27 Python
python3+opencv生成不规则黑白mask实例
Feb 19 Python
python实现吃苹果小游戏
Mar 21 Python
使用python实现微信小程序自动签到功能
Apr 27 Python
django中嵌套的try-except实例
May 21 Python
Django中如何用xlwt生成表格的方法步骤
Jan 31 Python
解决jupyter notebook启动后没有token的坑
Apr 24 Python
彻底弄懂Python中的回调函数(callback)
Jun 25 #Python
利用Python实现翻译HTML中的文本字符串
Jun 21 #Python
使用scrapy实现增量式爬取方式
Jun 21 #Python
python+opencv实现目标跟踪过程
Jun 21 #Python
使用opencv-python如何打开USB或者笔记本前置摄像头
Python+DeOldify实现老照片上色功能
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
Jun 21 #Python
You might like
php实现telnet功能示例
2014/04/08 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
php轻松实现文件上传功能
2016/03/03 PHP
测试你的JS的掌握程度的代码
2009/12/09 Javascript
javascript instanceof,typeof的区别
2010/03/24 Javascript
IE6,IE7下js动态加载图片不显示错误
2010/07/17 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
jquery maxlength使用说明
2011/09/09 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
AngularJs 常用的过滤器
2017/05/15 Javascript
vue项目关闭eslint校验
2018/03/21 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
Python中关于使用模块的基础知识
2015/05/24 Python
详解Python中的日志模块logging
2015/06/19 Python
Python松散正则表达式用法分析
2016/04/29 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
HTML5中的进度条progress元素简介及兼容性处理
2016/06/02 HTML / CSS
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
电大学习个人自我评价范文
2013/10/04 职场文书
文员求职信
2014/07/15 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
莫言获奖感言(全文)
2015/07/31 职场文书
JavaScript 原型与原型链详情
2021/11/02 Javascript
php去除数组中为0的元素的实例分析
2021/11/17 PHP