7.4. Excel AATC Sensors¶
Working with Excel (file, spreadsheet)
Selecting data
Binary classification
7.4.1. Todo¶
zaczytać dane z Excel (plik, arkusz)
Wybrać odpowiednie dane (Luminance dla 24 września)
Wykres aktywności ludzi tego dnia
Zwróć uwagę, że niektóre urządzenia elektroniczne emitują światło (zegarki, monitory, sprzęt laboratoryjny) jednak nie jest oznaka tego, że zespół jest aktywny. Aktywność jest wtedy, gdy oświetlenie jest powyżej jakiegoś poziomu (threshold). Poziom ten musimy określić na podstawie obserwacji danych.
Ten poziom oświetlenia poniżej wartości progowej w inżynierii nazywany jest szumem tła (background noise), są to zakłócenia w danych. Dane najczęściej nazywamy sygnałem.
7.4.2. Code¶
import pandas as pd
from matplotlib import pyplot as plt
DATA = 'https://python.astrotech.io/_static/sensors-optima.xlsx'
LUX = 1
df = pd.read_excel(
io=DATA,
sheet_name='Luminance',
header=1,
parse_dates=['datetime', 'date', 'time'],
index_col='datetime')
df['time'] = df['time'].dt.time
# Zobaczmy jak wyglądają dane
df.info(memory_usage='deep')
# Statystyki opisowe
df['value'].describe()
# Zobaczmy jak dane się rozkładają
df['value'].plot(kind='density')
plt.show() # doctest: +SKIP
# Jakie wartości padają w naszych danych
df['value'].hist(bins=3)
plt.show() # doctest: +SKIP
df['value'].hist(bins=10)
plt.show() # doctest: +SKIP
df.loc['2019-09-24', 'value'].hist(bins=10)
plt.show() # doctest: +SKIP
# próg szumu (poniżej to szum, powyżej sygnał)
THRESHOLD = 20*LUX
noise = df['value'] <= THRESHOLD
activity = ~noise
df['active'] = activity
df['active'].replace({
True: 1,
False: 0,
}, inplace=True)
# np.sign()
# - jeżeli jest mniejsza niż 0, to daje -1
# - jeżeli wartość jest 0 to daje 0
# - jeżeli wartość jest większa niż 0 to daje 1
ROOM = df['location'] == 'Kitchen Lab Table'
active = (
df[ROOM]
.loc['2019-09-24', 'active']
.loc[:, ]
.resample('H')
.median()
.interpolate()
.map(np.sign)
)
plot = (active
.plot(color='red', figsize=(10,10), yticks=[0,1])
.set_yticklabels(['seep', 'awake'])
)
plt.show() # doctest: +SKIP
# THRESHOLD = 20*LUX
# data = pd.cut(
# x=df['value'],
# bins=[0, THRESHOLD, np.inf],
# labels=['active', 'sleep'])