免责声明:我对Python和Javascript都很陌生,所以请记住.
我正在使用一个连接到空气质量传感器的覆盆子Pi来收集PM2.5和PM10值。我已经有了收集原始PM数据的代码,然后将其转换为显示在网页(https://openschoolsolutions.org/measure-particulate-matter-with-a-raspberry-pi/)上的AQI编号。但是它收集的历史数据显示在一张表中,我真的想把它显示成一个图表。该表显示了PM2.5和PM10的原始PM数据和计算的AQI数字。
原始PM数据是在.json文件中收集的,但它只包含原始PM数据,而不包含计算的AQI编号。我的目的是显示一个图表,只有AQI的数字随着时间的推移。为此,我修改了Python代码,以计算AQI编号,并将数据和原始PM数据保存到.json文件中。
起初,PM10 AQI的编号都是"0“。这是因为AQI计算中的值之一小于1,因此Python将其舍入为"0“。下面是AQI计算的代码:
def calcAQIpm10(pm10):
pm1 = 0
pm2 = 54
pm3 = 154
pm4 = 254
pm5 = 354
pm6 = 424
pm7 = 504
pm8 = 604
aqi1 = 0
aqi2 = 50
aqi3 = 100
aqi4 = 150
aqi5 = 200
aqi6 = 300
aqi7 = 400
aqi8 = 500
aqipm10 = 0
if (pm10 >= pm1 and pm10 <= pm2):
aqipm10 = ((aqi2 - aqi1) / float((pm2 - pm1))) * (pm10 - pm1) + aqi1
elif (pm10 >= pm2 and pm10 <= pm3):
aqipm10 = ((aqi3 - aqi2) / float((pm3 - pm2))) * (pm10 - pm2) + aqi2
elif (pm10 >= pm3 and pm10 <= pm4):
aqipm10 = ((aqi4 - aqi3) / float((pm4 - pm3))) * (pm10 - pm3) + aqi3
elif (pm10 >= pm4 and pm10 <= pm5):
aqipm10 = ((aqi5 - aqi4) / float((pm5 - pm4))) * (pm10 - pm4) + aqi4
elif (pm10 >= pm5 and pm10 <= pm6):
aqipm10 = ((aqi6 - aqi5) / float((pm6 - pm5))) * (pm10 - pm5) + aqi5
elif (pm10 >= pm6 and pm10 <= pm7):
aqipm10 = ((aqi7 - aqi6) / float((pm7 - pm6))) * (pm10 - pm6) + aqi6
elif (pm10 >= pm7 and pm10 <= pm8):
aqipm10 = ((aqi8 - aqi7) / float((pm8 - pm7))) * (pm10 - pm7) + aqi7
#print("pm10 = ", pm10, " aqipm10 = ", aqipm10)
return format(aqipm10, '.2f')我解决了这个问题,将分母转换为浮点数,并以浮点数的形式返回值,并以小数点2位为单位。如果我打印出进入.json文件的值,它们看起来很好:
PM2.5: 0.3 , PM10: 0.4 , aqiPM2.5: 1.2 , aqiPM10: 0.37但是,当我查看实际的.json文件时,我看到了这个文件(不是相同的数据--只需查看格式):
[{"aqipm10": "1.76", "time": "07/19/2021 20:42:32", "aqipm25": 4.0, "pm10": 1.9, "pm25": 1.0},注意,aqipm10的值以引号表示。其他值没有引号。当我使用谷歌图表绘制这些值时,除了aqipm10值之外,所有的值都会显示出来。但是,如果我创建了一个经过编辑的.json文件,其中删除了aqipm10值中的引号,那么这些值就会显示在图形上。
从计算值并放入.json文件的Python到读取.json文件的某个地方--使用javascript创建网页和谷歌图表--这些“浮点”值会出现问题。我确信可能有几种解决这个问题的方法,但我对Python和Javascript的了解已经足够多了,在这一点上可能会丢失。
想办法收拾这烂摊子。
发布于 2021-07-26 21:43:52
我的确说过我是Python新手..。
解决我的问题其实很简单。我从calcAQIpm10例程开始的‘返回’语句是:
return aqipm10这给了我一个很好的浮点值,但是精度太高了。我将它(如我原来的帖子所示)替换为:
return format(aqipm10, '.2f')它以正确的精度打印出正确的信息,但是当查看.json文件中的值时,它周围有双引号。
在与一位朋友交谈后,他建议我看一下python函数,这些函数可能会满足我的需要。我发现“圆形”功能做得很好。因此,现在代码读为:
return round(aqipm10, 2)通过进行此更改,.json文件中的值在其周围没有双引号,并且很好地传递给了我正在使用的Google图表代码。
很抱歉浪费了带宽。
瑞克
https://stackoverflow.com/questions/68462534
复制相似问题