Python小笔记

  • 说明
  • matplotlab.pyplot
  • 中文显示不全
  • Pandas
  • Groupby: [ 超好用的Groupby用法详解](https://zhuanlan.zhihu.com/p/101284491)
  • 其他
  • 1. 读取list格式文本——库函数 ast
  • 2. 将实例化的对象写入文件 + 读取(直接干掉1)
  • 3. VS Code文件测试:绘制火焰图
  • 火焰图概述
  • step 1:定义火焰图函数
  • step 2 : 给被测函数添加魔法方法
  • step 3:控制台输入命令显示火焰图


说明

记录一下我用python中找到的一些特别有意思的小技巧,内容很杂,之后有机会分门别类的整理一下吧。

matplotlab.pyplot

中文显示不全

from matplotlib.font_manager import FontProperties
plt.rcParams['font.sans-serif'] = ['SimHei']  # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False  # 步骤二(解决坐标轴负数的负号显示问题

Pandas

Groupby: 超好用的Groupby用法详解

其他

1. 读取list格式文本——库函数 ast

通过ast函数实现文本形式的list格式数据的读取

# 保存list
data = [1, 2, 3]
data_file_name = "******"
with open(data_file_name, "w") as f:
	data = f.write(str(data))
# 读取
data_file_name = "******"
with open(data_file_name, "r") as f:
	data = f.read()
# 关键-文本转list
data _list = ast.literal_eval(data)

2. 将实例化的对象写入文件 + 读取(直接干掉1)

场景:自己写了一个类,实例化后读取数据进行训练,训练好的模型不知道怎么存储。
优点:将训练好的模型存储之后在后续应用模型时不用反复训练。

import shelve		# python 自带无需pip

# 随便写的类
class MyObj:
	pass
jojo = MyObj()		# 实例化
data = [1, 2, 3]	# 随便给个数据

# 存 对象 和 普通数据
save_file = shelve.open('随便给的名字(文件名)')
save_file ["jojo_test"] = jojo 
save_file ["data _test"] = data 
save_file.close()
# -----------------------------华丽的分割线----------------------------------
# 读取 对象 和 普通数据
load_file = shelve.open('随便给的名字(文件名)')
tom = load_file ["jojo_test"]
jerry = load_file ["data _test"]
load_file .close()

3. VS Code文件测试:绘制火焰图

火焰图概述

火焰图是一种用于分析代码性能的图形化工具。它可以帮助你快速理解代码的执行过程中,各个函数的调用关系以及函数耗时的情况。
火焰图的横轴代表代码的调用深度,纵轴表示函数的名称。图中的每个矩形区域代表一个函数,在火焰图中,矩形区域的宽度表示函数的占用时间。通过观察火焰图的形状和矩形的宽度,你可以直观地了解代码在哪些函数上花费了大量的时间,以及函数之间的调用关系。
火焰图对于以下情况非常有用:

  1. 性能优化:通过分析火焰图,你可以识别出代码中最耗时的函数或函数组合,从而更好地定位性能瓶颈,并进行有针对性的优化。
  2. 函数调用路径:火焰图可以帮助你了解函数之间的调用关系和层次结构,特别是在复杂的代码中。这可以帮助你更好地理解代码的执行流程,从而提高代码的可读性和维护性。
  3. 代码分析和调试:火焰图可以作为代码分析和调试工具的补充,帮助你快速定位问题所在,并深入了解代码的执行过程。
step 1:定义火焰图函数
# 该函数用于统计每个模块的运行时间,并绘制火焰图
# snakeviz load_data.out
import cProfile, pstats
DO_PROF = True
def do_cprofile(filename):
    """
    Decorator for function profiling.
    """
    def wrapper(func):
        def profiled_func(*args, **kwargs):
            if DO_PROF:
                profile = cProfile.Profile()
                profile.enable()
                result = func(*args, **kwargs)
                profile.disable()
                # Sort stat by internal time.
                sortby = "tottime"
                ps = pstats.Stats(profile).sort_stats(sortby)
                ps.dump_stats(filename)
            else:
                result = func(*args, **kwargs)
            return result
        return profiled_func
    return wrapper
step 2 : 给被测函数添加魔法方法
@ do_cprofile("load_data.out")          # 装饰器,用来做这个函数的火焰图
def main():
	pass
step 3:控制台输入命令显示火焰图
snakeviz load_data.out