Data processing and plotting for 'Personal Flash' artworks. https://www.nicolaellisandritherdon.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

98 lines
4.0 KiB

#!/bin/bash
# SEPARATOR
# ==============================================================================
# This script takes the lm1-exhibition-all.csv and lm2-exhibition-all.csv files
# and splits the readings down into daily and hourly segments. The breakdowns
# are placed in their own directories and should look like the following:
# data
# ├── light-meter-1
# | │   ├── hourly readings directory (E.G. 2021-07-14/)
# | │   |   └──hourly reading files (E.G. 2021-07-14--14.csv)
# | │   └── hourly readings directory (E.G. 2021-07-15/)
# | │      └── hourly reading files (E.G. 2021-07-15--17.csv)
# │   └── daily readings files (E.G 2021-07-14.csv)
# │   └── daily readings files (E.G 2021-07-15.csv)
# ├── light-meter-2
# |    └── repeats light-meter-1 structure...
# ├── lm1-exhibiton-all.csv
# └── lm2-exhibiton-all.csv
#
# 2 directories, 2 files (I've shorted the list for brevity)
# Note: Naming Format for Hourly Breakdowns (YYYY-MM-DD--HH)
# ==============================================================================
# The last part of the file name specifies the hour the readings were taken
# from. So, '2021-07-15--17.csv' means the readings for that file were taken on
# the 15th July 2021 between 17:00 and 18:00 (5pm and 6pm).
hourBreakdown () {
d="$1"; # Day
m="$2"; # Month
mtr="$3"; # Light Meter (either 1 or 2)
mkdir -p "data/light-meter-$mtr/2021-$m-$d";
for hour in {0..24}; do
if [[ $hour -lt 10 ]]; then
echo "time,reading" \
> "data/light-meter-$mtr/2021-$m-$d/2021-$m-$d--0$hour.csv";
rg "2021-$m-$d 0$hour:" "data/light-meter-$mtr/2021-$m-$d.csv" \
>> "data/light-meter-$mtr/2021-$m-$d/2021-$m-$d--0$hour.csv";
else
echo "time,reading" \
> "data/light-meter-$mtr/2021-$m-$d/2021-$m-$d--$hour.csv";
rg "2021-$m-$d $hour:" "data/light-meter-$mtr/2021-$m-$d.csv" \
>> "data/light-meter-$mtr/2021-$m-$d/2021-$m-$d--$hour.csv";
fi
done
}
dailyBreakdown () {
lm=$1; # Light Meter (either 1 or 2)
mkdir -p "data/light-meter-$lm";
for month in {6..7} ; do
for day in {1..31} ; do
# June is 30 days long, hence the check (and skip).
if [[ $day != 31 ]] && [[ $month != "06" ]]; then
if [[ $day -lt 10 ]]; then
touch "data/light-meter-$lm/2021-0$month-0$day.csv";
echo "time,reading" \
> "data/light-meter-$lm/2021-0$month-0$day.csv";
rg "2021-0$month-0$day" "data/lm$lm-exhibiton-all.csv" \
>> "data/light-meter-$lm/2021-0$month-0$day.csv";
if [[ $month -lt 10 ]]; then
hourBreakdown "0$day" "0$month" $lm;
else
hourBreakdown "0$day" $month $lm;
fi
else
touch "data/light-meter-$lm/2021-0$month-$day.csv";
echo "time,reading" \
> "data/light-meter-$lm/2021-0$month-$day.csv";
rg "2021-0$month-$day" "data/lm$lm-exhibiton-all.csv" \
>> "data/light-meter-$lm/2021-0$month-$day.csv";
if [[ $month -lt 10 ]]; then
hourBreakdown $day "0$month" $lm;
else
hourBreakdown $day $month $lm;
fi
fi
fi
done
done
}
removeExcessData () {
for day in {1..12}; do
if [[ $day -lt 10 ]]; then d="0$day"; else d=$day; fi
rm -r "data/light-meter-1/2021-06-$d"
rm "data/light-meter-1/2021-06-$d.csv"
rm -r "data/light-meter-2/2021-06-$d"
rm "data/light-meter-2/2021-06-$d.csv"
done
}
dailyBreakdown "1"; # Light Meter 1
dailyBreakdown "2"; # Light Meter 2
removeExcessData;
mkdir output # For storing charts and stuff later (with Python scripts).