我有一个大型数据集(由许多内部没有模式顺序的子数据集组成),类似于以下内容,保存为 csv:
数据集(字符串) | 时间(浮动) | 值(浮点数) |
---|---|---|
数据名称1 | 1.0 | 4.0 |
数据名称2 | 1.5 | 5.7 |
数据名称1 | 3.1 | 2.1 |
数据名称3 | 7 | 8 |
数据集的长度为 1000 多个,包含大约 10 个单独的集合 [data_name(1-10)]。
我需要创建各个数据集的特定分组的图。例如,我正在寻找以下情节:
对于其他组(data_name2、data_name5)等也类似
到目前为止,我有以下代码(未按预期工作 - 下面)。该代码按原样绘制整个 csv,而不对数据集进行过滤(也就是说,它将给出一行而不是不同的行)。你们建议我用什么方法来实现这个目标?
import csv
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Import in data
with open('HR_data.csv', 'rt') as f:
next(f)
reader = csv.reader(f)
data_as_list = list(reader)
# Save data as data frame
df = pd.DataFrame(data_as_list, columns=["Data Set Name", "time", "value"])
# Plotting Call
plt.plot(df['time'], df['value'])
plt.xlabel('Time (sec)')
plt.ylabel('Value () ')
plt.title('Data Plotting')
# Show Plot
plt.show()
一种方法如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
num_rows_per_dataset = 1000
data_sets = ['data_name1', 'data_name2', 'data_name3', 'data_name4', 'data_name5',
'data_name6', 'data_name7', 'data_name8', 'data_name9', 'data_name10']
data = {
'Data Set': np.random.choice(data_sets, num_rows_per_dataset),
'Time': np.random.uniform(0, 10, num_rows_per_dataset),
'Value': np.random.uniform(0, 100, num_rows_per_dataset)
}
df = pd.DataFrame(data)
agg_df = df.groupby(['Time', 'Data Set']).agg({'Value': 'mean'}).unstack()
plt.figure(figsize=(10, 6))
for data_name in data_sets:
plt.plot(agg_df.index, agg_df['Value'][data_name], label=data_name)
plt.title('Plot of all data sets')
plt.xlabel('Time')
plt.ylabel('Value')
plt.legend()
plt.grid(True)
plt.show()
这给了你