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使用wxPython打开并播放wav文件的方法
Apr 24 Python
Python的Bottle框架中实现最基本的get和post的方法的教程
Apr 30 Python
Python的多态性实例分析
Jul 07 Python
python 与GO中操作slice,list的方式实例代码
Mar 20 Python
详解Python进程间通信之命名管道
Aug 28 Python
Django Rest framework三种分页方式详解
Jul 26 Python
python BlockingScheduler定时任务及其他方式的实现
Sep 19 Python
python flask搭建web应用教程
Nov 19 Python
python 上下文管理器及自定义原理解析
Nov 19 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
Dec 26 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
selenium+headless chrome爬虫的实现示例
Jan 08 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注入实例
2006/10/09 PHP
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
PHP date函数参数详解
2006/11/27 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
Javascript根据指定下标或对象删除数组元素
2012/12/21 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
jquery中validate与form插件提交的方式小结
2016/03/26 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
微信小程序实现页面分享onShareAppMessage
2019/08/12 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
Python中的引用和拷贝浅析
2014/11/22 Python
简单解析Django框架中的表单验证
2015/07/17 Python
Python的条件语句与运算符优先级详解
2015/10/13 Python
详解python调度框架APScheduler使用
2017/03/28 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
python字符串替换re.sub()实例解析
2020/02/09 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
墨西哥网上超市:Superama
2018/07/10 全球购物
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
体操比赛口号
2014/06/10 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
绿色校园广播稿
2014/10/13 职场文书
教师工作态度自我评价
2015/03/05 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
Win11 Build 22000.51版本文件资源管理器“命令栏”和上下文菜单有什么新变化?
2021/11/21 数码科技