我正在学习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读取文件时分配的数据类型的方法。如何在读入或分配数组时更改数据类型?
答案 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.csv2rec
(documentation)代替numpy.loadtxt
来读取数据。此函数有一个参数来指定数据的dtype。
或者如果您想使用列名(如示例代码中所示),则使用函数numpy.genfromtxt
(documentation)。这类似于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)