我正在用python从一系列空气质量监测仪中读取数据。在
目前我正在做下面的计算平均数。我想肯定有更好的方法来使用类来实现这一点,因为大多数代码都会重复自身,这样才能使它更普遍地适用于更高效地工作。在
另一个问题是我有许多不同类型的监视器,它们基本上是按照相同的原理工作,但变量略有不同。下面给出的代码是一个真正的噩梦移动到一个新的监视器,因为我必须编辑每一行。在
麻烦的是,当我搜索班级和平均数时,我得到的似乎只是平均学生在学校一个班级的成绩,而不是用一个软件类从多个变量计算平均值。在
基本上,显示器每秒只读取一个读数,但我只需要1分钟的平均值,所以我反复地跟踪,直到分钟结束。在
如有任何建议,不胜感激。在
目前我正在做这个:
while minute unchanged:
## read serial port
readData = SER.read()
## Split comma delimited data into dust, flow, temperature, relative humidity, pressure
## for example data comes in as 000.007,2.0,+21.7,046,1010.0
measData = readData[0].split(',')
dustReading = measData[0].strip()
flowReading = measData[1]
flowReading = flowReading.strip()
tempReading = measData[2]
tempReading = tempReading.strip()
rhReading = measData[3]
rhReading = rhReading.strip()
pressReading = measData[4]
pressReading = pressReading.strip()
######### Dust #######
try :
nReading = nReading+1
dustReading = float(dustReading)
sumDustReading = sumDustReading + dustReading
meanDustReading = sumReading/float(nReading)
except :
pass
####### Flow ##########
try :
flowReading = float(flowReading)
sumFlowReading = sumFlowReading+flowReading
meanFlowReading = float(sumFlowReading)/float(nReading)
except :
pass
######## Temperature #########
try:
tempReading = float(tempReading)
sumTempReading = sumTempReading+tempReading
meanTempReading = float(sumTempReading)/float(nReading)
except :
pass
######### RH ########
try :
rhReading = float(rhReading)
sumRhReading = sumRhReading+rhReading
meanRhReading = float(sumRhReading)/float(nReading)
except :
pass
###### Pressure Reading ######
try :
pressReading = float(pressReading)
sumPressReading = sumPressReading+pressReading
meanPressReading = float(sumPressReading)/float(nReading)
except :
pass
理想情况下,我希望能够得到
^{2}$万分感谢。在
对于所有这些
try:...except
块,您现有的代码有点奇怪,而且很危险。这很危险,因为它忽略了所有应该而不是的错误。例如:试图使用未定义变量的值、被零除错误和完全语法错误。在你可以用类做你想做的事情,但是对于这样的事情,我更倾向于使用一个简单的
dict
。我将发布这两种方法的代码,以帮助您做出决定(或增加您的困惑:)。在显然,我没有你的监控硬件连接到我的串行端口,所以为了测试这段代码,我写了一个简单的生成器函数,它创建了随机的假数据。希望您可以很容易地修改我的代码。在
首先,使用一个类的代码,该类保存当前的总数和读取数;这个类还有一个属性,可以按需计算平均值。所以如果你愿意,你可以做
print dust.total, flow.mean
之类的事情。在输出
^{pr2}$下面是使用
dict
的版本。我已经将随机化器种子设置为相同的值,这样假数据与前一个版本相同。在输出
下面是一个使用
try:... except
验证输入数据的简单示例。在输出
如果将数据保存在列表中,则更容易计算平均值和其他统计属性。列表的长度和总和都是内置的。在
所以首先列出一些清单。在
我将以以下数据为例。在
^{pr2}$让我们把它分开
要计算平均值:
更新:
在没有看到不同类型仪器生成的数据的情况下,很难给出处理不同类型仪器的建议。在
例如,您可以为每种不同类型的传感器编写一个数据转换函数,该函数从串行端口读取一条线,并返回一个}的数据,其测量值不受特定设备的支持,如
tuple
或{None
。 假设你知道你连接的是哪个传感器,然后在程序开始时选择正确的函数来调用相关问题 更多 >
编程相关推荐