diff --git a/statistics/statistics.py b/statistics/statistics.py index cbbe86c..eac2a96 100644 --- a/statistics/statistics.py +++ b/statistics/statistics.py @@ -1,6 +1,7 @@ from datetime import datetime import json from typing import Dict +from xmlrpc.client import Boolean import matplotlib.pyplot as plt @@ -15,7 +16,8 @@ with open(FILE_PATH, "r") as file: def parse_log_entry(entry: Dict) -> Dict: - if entry["countChange"] == 0: + # Only keep last record of a sequence + if not is_last_in_sequence(entry): return False entry["dateTime"] = datetime.strptime( @@ -26,13 +28,31 @@ def parse_log_entry(entry: Dict) -> Dict: return entry +def is_last_in_sequence(entry: Dict) -> Boolean: + indoor = entry["directionState"]["indoor"] + outdoor = entry["directionState"]["outdoor"] + + if len(indoor) <= 0 or len(outdoor) <= 0: + return False + + end_key = "end_distance" + # Check version + if end_key not in indoor[-1]: + end_key = "end" + + if indoor[-1][end_key] is None or outdoor[-1][end_key] is None: + return False + + return True + + # Collect log = [json.loads(line.strip("\x00")) for line in content] -print("Number of entries:", len(log)) +print("Number of total entries:", len(log)) # Parse & Filter log = [parse_log_entry(entry) for entry in log if parse_log_entry(entry)] -print("Number of counts:", len(log)) +print("Number of filtered entries:", len(log)) # Render fig, ax = plt.subplots() # Create a figure containing a single axes. @@ -40,6 +60,17 @@ times: list[datetime] = [entry["dateTime"] for entry in log] counts: list[int] = [entry["previousPeopleCount"] for entry in log] ax.step(times, counts, where="pre") plt.show() +print("-"*20) + + +# Print stats +walk_ins = [entry for entry in log if entry["countChange"] > 0] +walk_outs = [entry for entry in log if entry["countChange"] < 0] +walk_unders = [entry for entry in log if entry["countChange"] == 0] +print("Number of walk-ins:", len(walk_ins)) +print("Number of walk-outs:", len(walk_outs)) +print("Number of walk-unders:", len(walk_unders)) +print("-"*20) # Calculate faults for c, n in zip(list(range(len(log))), list(range(len(log)))[1:]): @@ -52,7 +83,7 @@ for c, n in zip(list(range(len(log))), list(range(len(log)))[1:]): log = log[:-1] fault_count = sum(1 for entry in log if entry["faulty"]) print("Number of faults:", fault_count) -print("Percentage of faults:", fault_count / len(log) * 100) +print("Percentage of faults:", fault_count / len(log) * 100, "%") print("-"*20) faulty_off = [entry for entry in log if entry["faulty"] @@ -61,5 +92,5 @@ faulty_on = [entry for entry in log if entry["faulty"] and entry["faultyCount"] != 0] print("Number of false-0:", len(faulty_off)) print("Number of false-1:", len(faulty_on)) -print("Percentage of false-0:", len(faulty_off) / fault_count * 100) -print("Percentage of false-1:", len(faulty_on) / fault_count * 100) +print("Percentage of false-0:", len(faulty_off) / fault_count * 100, "%") +print("Percentage of false-1:", len(faulty_on) / fault_count * 100, "%")