量化python:使用热力图heatmap绘制胜率图方法及工具函数

2023-10-28

胜率图是分析策略的一种图形,对于胜率的分析需要三种数据:

  1. 策略/参数集:表现在胜率图的横纵轴含义

  2. 对比的场景编号:表现在对比两个策略时使用的场景;通常见于不同的时间、不同的参数、不同的周期

  3. 场景对应的值:场景对应的值,可能代表收益率、模型的分数等

使用seaborn可以进行如下绘图:

def plot_victory_rate(dataframe, hue: str, compare_index: str, compare_value: str):
    """绘制胜率图
    :param dataframe: 数据源
    :param hue: 合并/展示的列名
    :param compare_index: 场景编号对应在dataframe中的列名称
    :param compare_value: 场景值对应在dataframe中的列名称
    """
    total_mark_index = dataframe[hue].value_counts().index
    one_total_victory_matrix = pd.DataFrame(0, index=total_mark_index, columns=total_mark_index)
    for _first_mark in tqdm(total_mark_index):
        for _second_mark in total_mark_index:
            first_df = dataframe[dataframe[hue] == _first_mark].sort_values(compare_index)
            second_df = dataframe[dataframe[hue] == _second_mark].sort_values(compare_index)
            one_total_victory_matrix.loc[_first_mark, _second_mark] = sum(
                (first_df[compare_value].values - second_df[compare_value].values) >= 0) / first_df.shape[0]
    # 开始绘图
    plt.cla()
    plt.clf()
    plt.figure(figsize=(10, 10), dpi=100)
    fig = sns.heatmap(one_total_victory_matrix.round(2), annot=True, cmap="RdBu_r")
    plt.title("胜率图")
    scatter_fig = fig.get_figure()
    scatter_fig.show()

示例代码

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from tqdm import tqdm

sns.set_style("whitegrid")  # 需要先写这个,否则plt的配置会被覆盖掉

plt.rcParams["font.sans-serif"] = ["Arial Unicode MS"]  # drop_duplicates持中文
plt.rcParams["figure.figsize"] = 20, 10
plt.rcParams["axes.unicode_minus"] = False  # 解决保存图像是负号'-'显示为方块的问题


def plot_victory_rate(dataframe, hue: str, compare_index: str, compare_value: str):
    """绘制胜率图
    :param dataframe: 数据源
    :param hue: 合并/展示的列名
    :param compare_index: 场景编号对应在dataframe中的列名称
    :param compare_value: 场景值对应在dataframe中的列名称
    """
    total_mark_index = dataframe[hue].value_counts().index
    one_total_victory_matrix = pd.DataFrame(0, index=total_mark_index, columns=total_mark_index)
    for _first_mark in tqdm(total_mark_index):
        for _second_mark in total_mark_index:
            first_df = dataframe[dataframe[hue] == _first_mark].sort_values(compare_index)
            second_df = dataframe[dataframe[hue] == _second_mark].sort_values(compare_index)
            one_total_victory_matrix.loc[_first_mark, _second_mark] = sum(
                (first_df[compare_value].values - second_df[compare_value].values) >= 0) / first_df.shape[0]
    # 开始绘图
    plt.cla()
    plt.clf()
    plt.figure(figsize=(10, 10), dpi=100)
    fig = sns.heatmap(one_total_victory_matrix.round(2), annot=True, cmap="RdBu_r")
    plt.title("胜率图")
    scatter_fig = fig.get_figure()
    scatter_fig.show()


def main():
    one_total_df = pd.DataFrame({
        "策略": [i for i in "abcde"] * 10,  # 策略
        "对比的场景编号": [i for i in range(10) for _ in range(5)],
        "对比的场景值": np.random.random(50),  # 具体值
    })
    plot_victory_rate(one_total_df, "策略", "对比的场景编号", "对比的场景值")


if __name__ == '__main__':
    main()

得到图像如下所示:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

量化python:使用热力图heatmap绘制胜率图方法及工具函数 的相关文章

随机推荐

  • 游戏开发unity杂项知识系列:删除工程记录

    老方法参看 https blog csdn net tujiahao1 article details 102222053 新方法 unity hub自带删除工程记录了
  • FFmpeg通过摄像头实现对视频流进行解码并显示测试代码(旧接口)

    这里通过USB摄像头 注 windows7 10下使用内置摄像头 linux下接普通的usb摄像头 Logitech 获取视频流 然后解码 最后再用opencv显示 用到的模块包括avformat avcodec和avdevice liba
  • Go的协程和管道

    Go有个简单的线程模型 叫做协程 为这个协程配套的简易版 数据同步 叫管道或者信道 在go tour上有两个很有特色的例子 https tour go zh org concurrency 2 package main import fmt
  • 《数据结构》考研天勤和王道 第三章 栈、队列、数组和广义表

    数据结构 天勤和王道 第三章 栈 队列 数组和广义表 天勤的内容 1 用栈实现表达式的转换 1 1中缀转后缀 1 2中缀转前缀 1 3后缀转前缀 2 用栈实现表达式的计算 2 1用栈求中缀表达式的值 需要两个栈 2 2用栈求后缀表达式的值
  • mysql yearweek 日期不准,PHP日期('W')vs MySQL YEARWEEK(now())

    Can someone kindly explain me why these two give different results I execute this with PHP date YW mktime 0 0 0 3 22 201
  • 你敢信?开发一个管理系统我只用了两天时间

    推荐 前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转到网站 前言 由于疫情原因 学校通知本学期要提前放暑假 于是老师提前将期末作业公布于众 按照要求开发一个百货中心供应链管理系统 开发周期为半个月
  • SQL注入系列篇之union联合注入

    一 union注入概念 我们知道 SQL语句的union联合查询常用格式如下 select 1 2 3 from table name1 union select 4 5 6 from table name2 而在注入过程中 我们把unio
  • springmvc 防止XSS攻击

    XSS攻击 即Cross Site Script 跨脚本攻击 往web页面注入html代码或者script代码 造成页面混乱 spring mvc框架中 有很多编辑器 每个编辑器有不同的作用 防止XSS攻击 就用到PropertyEdito
  • 图像处理之OpenCV腐蚀和膨胀

    图像处理之OpenCV腐蚀和膨胀 在图像处理中 腐蚀和膨胀是常用的基础操作 它们可以对图像进行去噪 分割和形态学处理等 本文将介绍使用OpenCV库进行腐蚀和膨胀的方法及其相关代码 腐蚀操作 腐蚀操作可以看作是一种局部最小值滤波器 它的主要
  • UNIX环境高级编程习题答案——第四章

    4 1 用stat函数替换图4 3程序中的lstat函数 如若命令行参数之一是符号链接 会发生什么变化 会输出符号链接所指向文件的文件类型 4 2 如果文件模式创建屏蔽字是777 八进制 结果会怎样 用shell的umask命令验证该结果
  • 判断子序列的三种方法

    392 判断子序列https leetcode cn problems is subsequence 给定字符串 s 和 t 判断 s 是否为 t 的子序列 字符串的一个子序列是原始字符串删除一些 也可以不删除 字符而不改变剩余字符相对位置
  • springmvc源码学习(二十六)异步请求管理器WebAsyncManager异步任务执行流程

    目录 前言 一 回顾 二 异步任务分发 三 异步任务执行 总结 前言 接着上一篇进行分析 在异步任务创建完 那接下来springmvc会去处理该异步任务 一 回顾 1 上一篇中 在请求完接口 生成了一个调度任务dispatchTask 存储
  • IDEA如何向Maven项目中添加JDBC

    IDEA如何向Maven项目中添加JDBC 解决这个问题有两个步骤 下载这个jar包 导入这个jar包 向pom xml文件中导入依赖 我们依次展开 一 Jar包的下载 访问MySQL官网 点击顶部栏的下载 点击MySQL Communit
  • python selenium4 使用无界面浏览器 爬虫 并存储mysql数据库

    浏览器驱动 需要查看对应浏览器版本进行下载 selenium PyPIhttps pypi org project selenium 浏览器设置中查看当前版本 from selenium import webdriver from sele
  • 【JavaScript】只需要7行代码实现图片懒加载

    前言 面试的时候 面试官经常会问到一个问题 前端优化性能 其中 图片懒加载是性能优化的一个点 准备 offsetTop offsetTop是元素到offsetParent顶部的距离 offsetParent offsetParent是距离具
  • Python列表元素删除方法详解

    Python列表元素删除方法详解 在Python中 列表是一种非常常用的数据类型 它允许我们按照特定的顺序存储大量元素 但是在实际开发中 经常需要对列表中的元素进行删除操作 本篇文章将向您介绍Python中列表删除元素的四种方法 帮助您轻松
  • ARCGIS一些tips

    1 不同shapefile使用相同的自定义风格
  • 网络空间安全导论-第三章习题

    网络空间安全导论 第三章习题 TCP IP模型共有几层 各层各有什么功能 应用层 访问网络服务的接口 例如为操作系统或网络应用程序提供访问网络服务的接口 表示层 提供数据格式转换服务 如加密与解密 图片解码和编码 数据的压缩和解压缩 会话层
  • 【全国科技者工作日】:致敬每一位科技工作者,时代的发展永远也少不了这一批人!

    在我们的日常生活中 科技已经渗透到了方方面面 从第一台计算机的发明到智能手机的出现 再到人工智能的应用 科技的发展已经深刻地改变了我们的生活 在这个快速发展的时代 科技工作者是推动社会发展的重要力量 他们的辛勤付出和不懈努力为我们带来了更多
  • 量化python:使用热力图heatmap绘制胜率图方法及工具函数

    胜率图是分析策略的一种图形 对于胜率的分析需要三种数据 策略 参数集 表现在胜率图的横纵轴含义 对比的场景编号 表现在对比两个策略时使用的场景 通常见于不同的时间 不同的参数 不同的周期 场景对应的值 场景对应的值 可能代表收益率 模型的分