LISHUZUOXUN_yangjiang/record_statistic.py

84 lines
2.7 KiB
Python

# coding:utf-8
import json
import os
import sys
import matplotlib.pyplot as plt
RECORD_RESULT_DIR = os.path.join(sys.path[0], "DebugRecord")
if not os.path.exists(RECORD_RESULT_DIR):
os.makedirs(RECORD_RESULT_DIR)
file_list = os.listdir(RECORD_RESULT_DIR)
for file_name in file_list:
with open(os.path.join(RECORD_RESULT_DIR, file_name), "r", encoding="utf-8_sig") as file:
data = json.load(file)
# 对数据进行排序
data = sorted(data, key=lambda x: x['record_time'])
# 修复测距失败的数据
result = []
last_distance = {}
last_correct_time = {}
for row in data:
is_successful = row["is_successful"]
tag_id = row["tag_id"]
distance = row["distance"]
first_rssi = row["first_rssi"]
total_rssi = row["total_rssi"]
record_time = row["record_time"]
if distance > 3000:
continue
# case1 差距过大
if abs(first_rssi - total_rssi) < 5:
continue
if is_successful:
last_distance[tag_id] = distance
last_correct_time[tag_id] = record_time
result.append({
"distance": distance,
"first_rssi": first_rssi,
"total_rssi": total_rssi,
"error": 0
})
else:
if tag_id in last_correct_time.keys() and record_time - last_correct_time[tag_id] < 1:
result.append({
"distance": last_distance[tag_id],
"first_rssi": first_rssi,
"total_rssi": total_rssi,
"error": distance - last_distance[tag_id]
})
print(len(result) / len(data))
# 统计数据
first_rssi_data_list = [
fail_data["first_rssi"]
for fail_data in result
]
total_rssi_data_list = [
fail_data["total_rssi"]
for fail_data in result
]
distance_data_list = [
fail_data["distance"]
for fail_data in result
]
error_data_list = [
fail_data["error"]
for fail_data in result
]
desire_data_list = [
[
[fail_data["distance"], fail_data["distance"]],
[fail_data["first_rssi"], fail_data["total_rssi"]]
]
for fail_data in result
]
plt.scatter(x=distance_data_list, y=total_rssi_data_list, c="hotpink", alpha=0.5, linewidths=0, s=32)
plt.scatter(x=distance_data_list, y=first_rssi_data_list, c="cornflowerblue", alpha=0.5, linewidths=0, s=32)
# plt.scatter(x=distance_data_list, y=error_data_list, c="red", alpha=0.5, linewidths=0, s=32)
# for desire in desire_data_list:
# plt.plot(desire[0], desire[1], c="green", alpha=0.1)
plt.show()