Generate per day statistics for screen time usage.
This commit is contained in:
parent
a1a8d484bc
commit
e1ddf2f206
|
@ -0,0 +1,71 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from datetime import datetime
|
||||
import matplotlib.pyplot as plt
|
||||
import sys
|
||||
|
||||
|
||||
def convert_param_to_dates(x):
|
||||
pair = x.split(',')
|
||||
first = datetime.fromtimestamp(int(pair[0].replace('(', '')))
|
||||
try:
|
||||
second = datetime.fromtimestamp(int(pair[1].replace(')', '')))
|
||||
except(ValueError):
|
||||
second = datetime.now()
|
||||
if first.day == second.day:
|
||||
return (first, second)
|
||||
else:
|
||||
midnight = datetime.fromisoformat(second.strftime('%FT') + "00:00:00")
|
||||
return [
|
||||
(first, midnight),
|
||||
(midnight, second)
|
||||
]
|
||||
|
||||
|
||||
def flatten(array):
|
||||
ret_arr = []
|
||||
for i in array:
|
||||
if type(i) == list:
|
||||
ret_arr += flatten(i)
|
||||
else:
|
||||
ret_arr.append(i)
|
||||
return ret_arr
|
||||
|
||||
|
||||
def seconds_to_str(s):
|
||||
hours = int(s//3600)
|
||||
minutes = int(s//60 % 60)
|
||||
seconds = int(s % 60)
|
||||
return f"{hours:02}:{minutes:02}:{seconds:02}"
|
||||
|
||||
|
||||
filename = sys.argv[1]
|
||||
with open(filename) as f:
|
||||
contents = flatten(list(map(convert_param_to_dates, f.readlines())))
|
||||
|
||||
dates = []
|
||||
times = []
|
||||
current_date = contents[0][0]
|
||||
time_in_s = 0
|
||||
for i in contents:
|
||||
if i[0].strftime("%F") == current_date.strftime("%F"):
|
||||
diff = i[1] - i[0]
|
||||
time_in_s += diff.total_seconds()
|
||||
else:
|
||||
dates.append(current_date)
|
||||
times.append(time_in_s)
|
||||
current_date = i[0]
|
||||
diff = i[1] - i[0]
|
||||
time_in_s = diff.total_seconds()
|
||||
|
||||
dates.append(current_date)
|
||||
times.append(time_in_s)
|
||||
|
||||
for date, s in zip(dates, times):
|
||||
print(date.strftime("%F"), "\t", seconds_to_str(s))
|
||||
|
||||
fig, ax = plt.subplots()
|
||||
ax.xaxis.set_tick_params(which='major', rotation=90)
|
||||
plt.bar(list(map(lambda x: x.strftime('%a %d/%m'), dates)),
|
||||
list(map(lambda x: x/3600, times)))
|
||||
plt.show()
|
Loading…
Reference in New Issue