使用Matplotlib和csv2rec设置数据类型

时间:2011-09-09 19:05:11

标签: python numpy matplotlib

我正在学习Matplotlib,并尝试手工实现简单的线性回归。 但是,在使用csv2rec导入然后使用我的数据时,我遇到了问题。

data= matplotlib.mlab.csv2rec('KC_Filtered01.csv',delimiter=',')

x = data['list_price']
y = data['square_feet']

sumx = x.sum()
sumy = y.sum()

sumxSQ = sum([sq**2 for sq in x])
sumySQ = sum([sq**2 for sq in y])

我正在阅读房价清单,并试图获得正方形的总和。但是,当csv2rec从文件中读取价格时,它会将值存储为int32。由于房价的平方和大于32位整数,因此溢出。但是,我没有看到更改csv2rec读取文件时分配的数据类型的方法。如何在读入或分配数组时更改数据类型?

2 个答案:

答案 0 :(得分:2)

x = data['list_price'].astype('int64')

y相同。

而且:csv2rec有一个converterd参数:http://matplotlib.sourceforge.net/api/mlab_api.html#matplotlib.mlab.csv2rec

答案 1 :(得分:2)

您可以使用等效的numpy函数mlab.csv2recdocumentation)代替numpy.loadtxt来读取数据。此函数有一个参数来指定数据的dtype。

或者如果您想使用列名(如示例代码中所示),则使用函数numpy.genfromtxtdocumentation)。这类似于loadtxt,但有更多选项,例如从文件的第一行读取列名(使用names = True)。

其用法示例:

In [9]:
import numpy as np
from StringIO import StringIO
data = StringIO("a, b, c\n 1, 2, 3\n 4, 5, 6")
np.genfromtxt(data, names=True, dtype = 'int64', delimiter = ',')

Out[9]: 
array([(1L, 2L, 3L), (4L, 5L, 6L)], 
      dtype=[('a', '<i8'), ('b', '<i8'), ('c', '<i8')])

关于代码的另一个注意事项,当使用numpy数组时,你不必使用for循环。要计算平方,您可以这样做:

xSQ = x**2
sumxSQ = xSQ.sum()

或一行:

sumxSQ = numpy.sum(x**2)