2016-10-22 39 views
2

低成本空氣質量傳感器(AQE)將其數據發送到opensensors.io服務器。每x秒發送一串信息(時間戳,污染物濃度等)。數據可以被檢索爲一個json文件。 Opensensors術語使用devicestopicsorganizationspayloads。我已經想出瞭如何設置一個捲曲手柄並使用curl包下載一個csv文件。下面的代碼將opensensors json文件轉換爲數據幀(或表格)

curl_download(url = myURL2, destfile = "curlDownloadTest.csv", mode = "w", handle = myCurlHandle) 

下載的數據的一個例子是在https://github.com/GeraldCNelson/AQEAnalysis/commit/c6ee29545d07835c5a920bf2b37625adb78462aa

我用fromJSON在jsonlite包來改造這個

temp <- fromJSON("curlDownloadTest.csv", simplifyDataFrame = FALSE) 

輸出(temp)是一個大名單與2個元素 - 消息和下一個。 messages包含所有數據; next是一個鏈接,用於獲取下一組數據(它不是一次全部下載)。

消息列表由多組列表組成(每組上傳數據一個);每套具有五個元件 - device,owner,topicdate和​​。有效負載是3列表 - encoding(總是chr utf-8),content-type(總是chr「application/json」)和text。文本列表看起來像它的json格式(這是一個字符串片段 - 「{\」serial-number \「:\」egg00802aaa019b0111 \「,\」converted-value \「:69.52,\」converted-units \「: 「degF \」)

欲重組這個數據到一個數據幀,其具有 日期信息作爲一列,並從有效載荷作爲剩餘列(serial-numberconverted value等測試信息(或數據表) ..

我無法弄清楚如何將文本列表從當前轉換的有效載荷列表(JSON?)結構的東西,我可以rbind到的數據幀。

+0

來自OpenSensors的Yodit在這裏,我們正在編寫一個R-Stats庫,因爲我們需要它來滿足我們自己的需求。在接下來的幾周內會推動並提高你的頭腦,所以應該讓你的生活更輕鬆。 – yods

+0

Hi @JerryN - 我已經開始在這裏研究R包 - https://github.com/lgatto/rosio。小插圖給出了一個概述。 – Laurent

回答

2

值得慶幸的是,一切都非常均勻:

library(jsonlite) 
library(dplyr) 

df <- fromJSON("curlDownloadTest.csv") 

bind_cols(
    select(df$messages, device, owner, topic, date), 
    stream_in(textConnection(df$messages$payload$text), flatten=TRUE) 
) -> df 

glimpse(df) 
## Observations: 742 
## Variables: 14 
## $ device    <chr> "egg00802aaa019b0111", "egg00802aaa019b0111", "egg00802aaa019b0111", "... 
## $ owner    <chr> "wickeddevice", "wickeddevice", "wickeddevice", "wickeddevice", "wicke... 
## $ topic    <chr> "/orgs/wd/aqe/temperature/egg00802aaa019b0111", "/orgs/wd/aqe/humidity... 
## $ date    <chr> "2016-10-10T17:02:09.507Z", "2016-10-10T17:02:09.811Z", "2016-10-10T17... 
## $ serial-number  <chr> "egg00802aaa019b0111", "egg00802aaa019b0111", "egg00802aaa019b0111", "... 
## $ converted-value <dbl> 63.20, 43.31, 0.52, -25.20, 63.70, 42.85, 0.53, -13.32, 64.01, 42.58, ... 
## $ converted-units <chr> "degF", "percent", "ppb", "ppb", "degF", "percent", "ppb", "ppb", "deg... 
## $ raw-value   <dbl> 63.200000, 43.310000, 0.221252, -0.827832, 63.700000, 42.850000, 0.221... 
## $ raw-instant-value <dbl> 63.48000, 43.07000, 0.22149, -0.82785, 63.91000, 42.66000, 0.22073, -0... 
## $ raw-units   <chr> "degF", "percent", "volt", "volt", "degF", "percent", "volt", "volt", ... 
## $ sensor-part-number <chr> "SHT25", "SHT25", "NO2-B4-ISB", "3SP-O3-20-PCB", "SHT25", "SHT25", "NO... 
## $ raw-value2   <dbl> NA, NA, 0.222732, NA, NA, NA, 0.222797, NA, NA, NA, 0.222460, NA, NA, ... 
## $ raw-instant-value2 <dbl> NA, NA, 0.22330, NA, NA, NA, 0.22273, NA, NA, NA, 0.22341, NA, NA, NA,... 
## $ compensated-value <dbl> NA, NA, 0.62, -25.25, NA, NA, 0.63, -13.37, NA, NA, 0.02, -18.08, NA, ...