gpt4 book ai didi

python - 从 CSV 导入时间序列并使用 Python 绘制图形的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:28 25 4
gpt4 key购买 nike

我必须多次执行的一项任务是读取包含一些时间序列数据的 CSV 文件,然后绘制一个显示所有数据的图表。

我必须从 CSV 文件导入数据。它可能没有排序,可能有间隙,每个系列可以在不同的日期开始和结束。例如:

Employee;Year;Salary
Mark;2014;29000
Paul;2013;33000
Paul;2014;34000
Mark;2011;20000
Mark;2012;24000
Mark;2015;30000

我想将其全部放在显示每个时间序列的图表中(两条线,其中 X 轴是日期,Y 轴是员工的薪水)。考虑到任何现有的数据差距至关重要。

好的,所以我开始学习使用 Perl 编程。我解决这个问题的第一个方法是:

首先,从 CSV 导入数据并将其存储到哈希中,如下所示:

$imported_data->{$employee}{$year} = $salary;

导入数据后,我使用循环和 DateTime 模块生成了一系列无间隙的排序日期。它会产生一个像这样的数组:

[ 2011, 2012, 2013, 2014, 2015 ]

然后,我为每位员工生成工资数据数组。我使用日期数组来循环查找每个日期的薪水,如果数据丢失则返回 undef:

for my $date (@dates) {
$salary = $imported_data->{$employee}{$year};
if ( defined $salary ) {
push @salary_array, $salary;
} else {
push @salary_array, undef;
}
}

这将产生以下数组(每个员工一个):

[ 20000, 24000, undef, 29000, 30000 ]
[ undef, undef, 33000, 34000, undef ]

现在我可以绘制日期数组(X 值)与每个工资数组(Y 值)配对的数据,从而生成包含两个系列的 XY 图。数据现已排序,间隙将正确显示。

好吧,我不知道这是否是最好的方法(可能不是......),但它工作得很好。

但是,现在我开始使用 Phyton,我想重新考虑这种完成任务的方式。如您所见,在 Perl 中我使用了哈希的哈希来存储导入的数据。不知道Phyton的字典能不能做到,好不好管理。

因此,我对更有经验的程序员的想法持开放态度。你会怎么做?这种东西有什么有用的模块吗?

最佳答案

由于您是 Python 的新手,我建议您查看 numpypandas 以了解一般数学和数据操作,以及 matplotlib 用于绘图。

对于这个问题,可能的解决方案是这样的:

from collections import defaultdict
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

data = [["Mark", 2014, 29000],
["Paul", 2013, 33000],
["Paul", 2014, 34000],
["Mark", 2011, 20000],
["Mark", 2012, 24000],
["Mark", 2015, 30000]]

data_csv = pd.DataFrame(data, columns=["Employee", "Year", "Salary"])


data_dict = defaultdict(list)

for row in data_csv.values:
data_dict[row[0]].append(row[1:])


fig = plt.figure()
ax = plt.gca()


for name in data_dict.keys():
data_dict[name] = np.concatenate(data_dict[name]).reshape(-1, 2)
ax.scatter(data_dict[name][:,0], data_dict[name][:,1], label=name)

plt.legend()
plt.show()

在第一行中,我使用 pandas 创建了一个虚拟 csv 文件,而在您的情况下,您将使用 pd.read_csv 加载它。

核心是defaultdict:由于先验的雇员数量未知,字典的值被初始化为列表。然后我检查 csv 中的每一行,并为每个名字(dict 中的一个键)附加到列表中的年份和薪水。到那时,只需使用 numpy reshape 二维数组中的所有内容并绘制结果。

关于python - 从 CSV 导入时间序列并使用 Python 绘制图形的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57160748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com