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文件测试:绘制火焰图
火焰图概述
火焰图是一种用于分析代码性能的图形化工具。它可以帮助你快速理解代码的执行过程中,各个函数的调用关系以及函数耗时的情况。
火焰图的横轴代表代码的调用深度,纵轴表示函数的名称。图中的每个矩形区域代表一个函数,在火焰图中,矩形区域的宽度表示函数的占用时间。通过观察火焰图的形状和矩形的宽度,你可以直观地了解代码在哪些函数上花费了大量的时间,以及函数之间的调用关系。
火焰图对于以下情况非常有用:
- 性能优化:通过分析火焰图,你可以识别出代码中最耗时的函数或函数组合,从而更好地定位性能瓶颈,并进行有针对性的优化。
- 函数调用路径:火焰图可以帮助你了解函数之间的调用关系和层次结构,特别是在复杂的代码中。这可以帮助你更好地理解代码的执行流程,从而提高代码的可读性和维护性。
- 代码分析和调试:火焰图可以作为代码分析和调试工具的补充,帮助你快速定位问题所在,并深入了解代码的执行过程。
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