使用CSV文件从Python绘制多个列

时间:2014-12-09 14:10:29

标签: python csv matplotlib plot genfromtxt

我有一个包含25列和90行的csv文件。第一列是日期格式,例如它显示为01-10-2014。其余列包含与这些日期对应的数字。第一行是每列的名称。我的计划是编写一个代码,该代码接收了所有信息,并让我可以灵活地将任意两列相互映射为散点图。我到目前为止已复制了我的代码。

如果我从dtype中删除'weekly'和'f8',代码工作正常。它在X轴上绘制日期,在Y轴绘制第一列“每日”。我假设我可以添加额外的列,就像我在“每周”中所做的那样,如下所示。但是,我收到错误:

Traceback (most recent call last):
  File "plot_dataset_second.py", line 10, in <module>
    Date = [DT.datetime.strptime(key,"%d-%m-%Y") for (key, value) in data]
ValueError: too many values to unpack

示例数据:

Date    Daily Installs  Weekly Installs Mean Install Duration
01-10-14    153 153 47.71
02-10-14    630 783 51.9
03-10-14    50  833 49.94
04-10-14    973 1805    51.43

import numpy as np
import matplotlib.pyplot as plt
import datetime as DT

data= np.genfromtxt('dataset1_changed.csv', delimiter=',',
    dtype={'names': ('Date', 'daily', 'weekly'),'formats': ('S10', 'f8', 'f8')} )



Date = [DT.datetime.strptime(key,"%d-%m-%Y") for (key, value) in data]
daily = [value for (key, value) in data]
weekly = [value for (key, value) in data]
#y = [value for (key, value) in data]

fig = plt.figure()
ax = fig.add_subplot(111)
ax.grid()

fig.autofmt_xdate()

plt.plot(Date,daily,'b--o--')
plt.xlabel('Date')
plt.ylabel('Daily Count')
plt.title('Daily Count since February')
plt.show()

1 个答案:

答案 0 :(得分:0)

我找到了一个可以解决上述问题的工作。这不是优雅,但做的工作。感谢大家的意见和帮助。以下是感兴趣的人的代码:

import csv
import datetime as dt
import matplotlib.pyplot as plt


Date,Daily_Installs,Weekly_Installs = [],[],[]
csv_reader = csv.reader(open('dataset1_changed.csv', 'rU'))
for line in csv_reader:
    Date.append(dt.datetime.strptime(line[0],'%d-%m-%Y'))
    Daily_Installs.append(int(line[1]))
    Weekly_Installs.append(int(line[2]))

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(Date,Daily_Installs,'o-')
fig.autofmt_xdate()

plt.show()