前言:
上周学长和我说如果论文读的差不多了可以把数据集上的数据用matplotlib画出来。想着操纵一下真实的数据想必能对项目有更深的理解,于是开始学习。
matplotlib是Python的第三方库,确实很重要。
学习本身我也就是相当于学会怎么用”锤子“,所以也没什么值得分享和记录的。
读者有需要的可以去看莫凡Python的网课,链接如下:
【莫烦Python】Matplotlib Python 画图教程_哔哩哔哩_bilibili
正文:
本次操作数据集其实需要的matplotlib知识并不多。
1.先了解csv文件里面数据存储的形式
有四列属性,第一列是时间戳,第二列是节点名称,第三列是KPI名称(一个文件当中都相同),第四列是具体数值。大致如下图所示。
一个文件基本上有四十个节点,每个节点对应一个KPI序列,因此KPI序列的x轴是timestamp,y轴是value。
2.画出第一个时间序列
对于每个节点,都有timestamp和value两个list,直接采用折线图(plot)的形式,即可画出序列,但是注意调整figsize(宽高比例)。
3.利用subplot画出多个子图
subplot就是让一个figure(一张图片)里面有多个子图(时间序列)
4.画出多个csv文件
编写程序,遍历整个文件夹下所有csv文件,每个csv文件创建一个文件夹,每个文件夹存储该csv文件中所有时间序列。主要就是python的文件输出流了。
大抵是完成任务了。
(感觉需要记录一下,但是又不想细写,也没什么值得写的,就这样吧)
源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 import matplotlib.pyplot as pltimport numpy as npimport csvimport osfrom os import pathclass Node : def __init__ (self, name ): self.name = name self.time_stamp = [] self.value = [] url = "D:\MTSAD\data\初赛评分数据\\2022-05-01\cloudbed\metric\container" file = os.listdir(url) file.remove(".DS_Store" ) file.remove("kpi_container_cpu_cfs_periods.csv" ) file.remove("kpi_container_cpu_cfs_throttled_periods.csv" ) file.remove("kpi_container_cpu_cfs_throttled_seconds.csv" ) file.remove("kpi_container_cpu_load_average_10s.csv" ) file.remove("kpi_container_cpu_system_seconds.csv" ) for F in file: node_list = [] temp = url + "\\" + F with open (temp, mode="r" , encoding="utf-8-sig" ) as f: reader = csv.reader(f) header = next (reader) for row in reader: flag = False time = int (row[0 ]) - 1651334400 value = float (row[3 ]) for node in node_list: if node.name == row[1 ]: node.time_stamp.append(time) node.value.append(value) flag = True break if not flag: temp_node = Node(row[1 ]) temp_node.time_stamp.append(time) temp_node.value.append(value) node_list.append(temp_node) tmp = F[:-4 ] save_path = "D:\MTSAD\data\img\\2022-5-01\container\\" + tmp os.mkdir(save_path) index = 0 for j in range (10 ): fig = plt.figure(figsize=(24 , 6 )) for i in range (4 ): node = node_list[index] fig.add_subplot(4 , 1 , i + 1 ) plt.plot(node.time_stamp, node.value) plt.title(node.name, loc='left' ) plt.subplots_adjust(wspace=0 , hspace=0.6 ) index += 1 plt.savefig(save_path + "\\" + f"0{j} .png" )