如何绘制一个 csv 中包含的唯一数据集?

问题描述 投票:0回答:1

我有一个大型数据集(由许多内部没有模式顺序的子数据集组成),类似于以下内容,保存为 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()
python dataframe csv plot
1个回答
0
投票

一种方法如下:

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()

这给了你

© www.soinside.com 2019 - 2024. All rights reserved.