Доброе утро, сейчас я работаю над проектом RPi, который каждую секунду собирает некоторые данные и переводит их в числовой показатель. Я хочу, чтобы RPi сохранил эти числовые / временные данные в файл Excel, и я также хочу, чтобы этот файл был доступен, чтобы данные были "графически-зависимыми" в зависимости от пользовательского ввода (т. Е. Пользователю нужны данные за последние 3 дня> выходных данных). график данных за последние 3 дня). Я понимаю, что это может быть разделено на две части: чтение и сохранение данных (1) и данные вытягивания и графика (2). Для этого вопроса я хотел бы сосредоточиться на (1).
Для чтения данных с датчика и сохранения их в файл Excel, который действует как база данных, я подумал об использовании DataFrame от pandas. Почему, вы можете спросить. Я основываю свой код на предыдущем коде, оставленном предшественником, и у него уже есть подобный код для чтения / записи. Однако масштаб в значительной степени отличается (~ 50 записей против ~ 38000 записей).
Я думал о записи данных как:
Образец основного текста
Данные в Excel
Как вы можете видеть, если есть данные за каждую секунду, я бы получил 86400 записей за один день.
Напишите сейчас, мой код для сохранения этих данных выглядит следующим образом. Я сделал класс для сохраняемых данных, который имеет переменные:
class ShiftDataSet:
def __init__(self):
self.effDataList = []
self.timeDataList = []
self.dateTimeToday = datetime.datetime.now()
self.date = self.dateTimeToday.strftime("%y%b%d")#str
#%y is year without century, %b is month abbv, %d is day of month
Затем эти данные (попытка) записываются в кадр данных, затем в файл Excel следующим образом:
def saveToDf(self):
dataToSave = {self.date : self.effDataList}
#dictionary of data to save. effDataList is the list of 1's and 0's as read by the second.
dfToSave = pd.DataFrame(dataToSave, index=self.timeDataList)
#create DataFrame to save as Excel, using timeDataList as index. timeDataList is a str list of the second the recording is taken
print("Attempting to save data")
#code to combine dfToSave with old df record
oldDf = pd.read_excel("/home/pi/Sensor/FS Days/Shift Record Template.xlsx")
#oldDf is the database template, structured the same way like the "Data in Excel" image above
result = dfToSave.combine_first(oldDf)
#combine new dataframe of new data with template database
writer = pd.ExcelWriter("/home/pi/Sensor/FS Days/Shift Record Template.xlsx")
result.to_excel(writer, 'Sheet 1')
writer.save()
print("Save Complete")
return
Я смоделировал этот код на основе кода моего предшественника для записей меньшего масштаба. Однако, запустив этот код, я столкнулся с проблемой неправильной записи данных в файл Excel, которая в итоге выглядит следующим образом:
Messed Data
Итак, мои вопросы:
1) Как я могу записать данные как взятые в секунду в надлежащий индекс «секунд»?
2) Было бы лучше записывать и сохранять данные каждую секунду или объединять их в больший список, а затем сохранять один или два раза в течение дня?
3) Является ли pandas DataFrame лучшим решением для того, что я хочу сделать, или есть лучшие методы?
Большое спасибо за помощь.