如何使用Python从不规则TXT提取数据并在Jupyter notebook绘图
基于Python+Jupyter的实现方案
环境依赖
首先确保你已经安装了所需库,未安装可执行以下命令:
pip install pandas matplotlib
数据提取与结构化
我们通过正则表达式匹配每行的有效数据,自动兼容你文件中存在的少量拼写错误(如CPU tim、comparison漏写s等),最终输出结构化的DataFrame方便后续处理:
import re import pandas as pd import matplotlib.pyplot as plt # 配置参数 FILE_PATH = "你的文件路径.txt" # 替换为你的txt文件实际路径 # 定义正则匹配规则,兼容拼写误差 pattern = re.compile(r'Average (\w+) (CPU tim?e?|comparison)\w*, array size (\d+): (\d+)') data = [] # 读取文件并匹配数据 with open(FILE_PATH, 'r', encoding='utf-8') as f: for line in f: line = line.strip() # 跳过空行和分隔符行 if not line or line.startswith('#'): continue match = pattern.search(line) if match: algo, metric, size, value = match.groups() data.append({ "array_size": int(size), "algorithm": algo.lower(), "metric": "cpu_time" if "CPU" in metric else "comparison", "value": int(value) }) # 转换为DataFrame并整理为宽表,方便绘图 df = pd.DataFrame(data) df_pivot = df.pivot_table( index="array_size", columns=["algorithm", "metric"], values="value" ).reset_index() # 打印预览结构化后的数据 print(df_pivot.head())
运行后你会得到规整的结构化数据,每行对应一个数组大小的所有指标。
绘制目标图表
1. 数组大小 vs 两种算法CPU时间折线图
plt.figure(figsize=(10,6)) plt.plot(df_pivot['array_size'], df_pivot[('hybridsort','cpu_time')], label='Hybridsort CPU Time', marker='o') plt.plot(df_pivot['array_size'], df_pivot[('mergesort','cpu_time')], label='Mergesort CPU Time', marker='s') plt.xlabel('Array Size') plt.ylabel('CPU Time') plt.title('CPU Time Comparison Between Hybridsort and Mergesort') plt.legend() plt.grid(alpha=0.3) plt.show()
2. 数组大小 vs 两种算法比较次数折线图
plt.figure(figsize=(10,6)) plt.plot(df_pivot['array_size'], df_pivot[('hybridsort','comparison')], label='Hybridsort Comparisons', marker='o') plt.plot(df_pivot['array_size'], df_pivot[('mergesort','comparison')], label='Mergesort Comparisons', marker='s') plt.xlabel('Array Size') plt.ylabel('Number of Comparisons') plt.title('Comparison Count Comparison Between Hybridsort and Mergesort') plt.legend() plt.grid(alpha=0.3) plt.show()
如果后续需要调整图表样式、保存图片,可以直接修改matplotlib的相关参数即可。
内容的提问来源于stack exchange,提问作者Ymi
相关产品推荐
相关产品推荐

