一个通用的数据读取函数

在接下来的几个例子中,我们将从文本文件中读取数据。在每种情况下,数据都将被安排为一个数据系列,在文件的每行上都有一个数据项列表。下面的Python函数将作为通用数据读取函数,从文本文件中加载原始数据。该函数将输入文件的各个行作为文本字符串读取,然后使用string split()方法将每行拆分为单个数据项的字符串列表。

def readData(fileName): ““”通用数据读取函数:读取文本文件中的行并将它们分割成列表。”“” data = [] with open(fileName) as f: for line in f.readlines(): data.append(line.split())返回数据

下一步通常是将数据列表中的字符串转换为适合特定赢博体育程序的数据格式。例如,在今天的第一个示例程序中,我们将处理一个输入文件,该文件显示了一段时间以来的美国农业人口数据。输入文件看起来像这样:

1935  32.1
1940  30.5
1945  24.4
1950  23
1955  19.1
1960  15.6
1965  12.4
1970  9.7
1975  8.9
1980  7.2

readData返回的数据列表中的第一个条目如下所示

(“1935”,“32.1”)

我想将这对字符串转换成包含整数和浮点数组合的元组。下面是一个可以执行该转换的简单数据清理函数:

defcleanline (line): ““”将原始行列表转换为适当的数据格式。”return (int(line[0]),float(line[1]))

然后,我们可以将这个数据清理函数与列表推导函数结合使用来构造我们想要处理的数据值列表:

rawData = readData("farm.txt")
pairs = [cleanLine(line) for line in rawData]

第一个例子:线性回归

下面是显示上述输入文件中的数据的点图。

数据显示,在这段时间内,美国农业人口大致呈线性下降。为了进行预测,对这些数据进行建模的一种简单方法是对数据进行线性回归。

最小二乘线性回归计算线性模型的系数

Y = a + b x

它试图最接近地匹配给定的数据序列。回归系数可通过以下公式计算:

x =均值(x)

y =均值(y)

A = y - b x

下面是完成这些计算所需的Python函数。means函数计算元组

(x, y)

从(x,y)对的列表中。

def意味着(双):xSum = 0 ySum x = 0, y成对:xSum + y = x ySum + = N = len(对)返回(xSum / N, ySum / N) def协方差(对,意味着):金额为x = 0, y成对:总和+ = (x [0]) * (y表示[1])返回总和def xVariance(对,xMean):金额为x = 0, y成对:总和+ = (x-xMean) * (x-xMean)返回总和def regressionCoeffs(双):““计算线性回归系数(a, b)的列表(x, y)对。”m =均值(对)β =协方差(对,m)/ x方差(对,m[0]) α = m[1]- β *m[0]返回(α, β)

最后,这里是一个简短的程序,它加载数据,计算回归线,然后打印一个由回归线预测的人口表,其中显示了数据序列中每年与实际人口的对比:

rawData = readData("farm.txt") pairs = [cleanLine(line) for line in rawData] a,b = regressionCoeffs(pairs) for x,y in pairs: prediction = a+x*b print("Year: {:d} prediction: {:5.2f} Actual: {:5.2f}".format(x,prediction,y))

这个程序产生的输出是

年份:1935年预测:31.49实际:32.10年份:1940年预测:28.56实际:30.50年份:1945年预测:25.62实际:24.40年份:1950年预测:22.69实际:23.00年份:1955年预测:19.76实际:19.10年份:1960年预测:16.82实际:15.60年份:1965年预测:13.89实际:12.40年份:1970年预测:10.96实际:9.70年份:1975年预测:8.02实际:8.90年份:1980年预测:5.09实际:7.20

这对于线性回归来说是正确的。