Browse Source

数据清洗方法优化

alex 1 year ago
parent
commit
81f78ebe85
1 changed files with 50 additions and 9 deletions
  1. 50 9
      yyyy_js/python-server/data_analysis/analysis2.py

+ 50 - 9
yyyy_js/python-server/data_analysis/analysis2.py

@@ -1,18 +1,32 @@
 import json
 
 # 假设数据文件名为 'betting_data.txt',每行为一个时间戳和JSON数据
-file_path = '分析开奖记录.log'
+file_path = '开奖记录.log'
 
 index = 0
 total_payout_by_bet_odd = 0
 total_payout_by_settle = 0
+result_option = []
 bet_101 = 0
 bet_102 = 0
 options_pay_out = {}
 
+wrong_data_key = []
+
+cacheRoundInfo = []
+
+
+class RoundInfo:
+    def __init__(self, key, _result_option, _options_pay_out, _total_payout_by_bet_odd, _total_payout_by_settle):
+        self.key = key
+        self.result_option = _result_option
+        self.options_pay_out = _options_pay_out
+        self.total_payout_by_bet_odd = _total_payout_by_bet_odd
+        self.total_payout_by_settle = _total_payout_by_settle
+
 
 def process_settle(key, data):
-    global total_payout_by_settle, total_payout_by_bet_odd
+    global total_payout_by_settle, total_payout_by_bet_odd, result_option
     player_settle = data["playerSettle"]
     for player in player_settle:
         total_payout_by_settle += player["totalWinAmount"]
@@ -23,7 +37,9 @@ def process_settle(key, data):
     # 开奖结果
     for result in data["optionResult"]:
         if result["result"] == 1:
-            total_payout_by_bet_odd += options_pay_out[result["option"]]
+            result_option_ = result["option"]
+            result_option.append(result_option_)
+            total_payout_by_bet_odd += options_pay_out[result_option_]
 
 
 def compare_obb_and_settle(key, data):
@@ -32,14 +48,19 @@ def compare_obb_and_settle(key, data):
     diff_value = round(diff_value, 2)
     if diff_value != 0:
         print(
-            f"{key} odd结果:{total_payout_by_bet_odd} 开奖结果:{total_payout_by_settle} 差值:{diff_value}¥ 数值不同不予计入")
+            f"{key} odd结果:{total_payout_by_bet_odd} 开奖结果:{total_payout_by_settle} 差值:{diff_value}¥ 数值不同不予计入,待删除")
+        wrong_data_key.append(key)
     else:
         # print(f"{key} odd结果:{total_payout_by_bet_odd} 开奖结果:{total_payout_by_settle} 差值:{diff_value}¥")
         pass
 
 
-def clear():
-    global bet_101, bet_102, total_payout_by_bet_odd, total_payout_by_settle
+def save_and_clear(key):
+    global bet_101, bet_102, total_payout_by_bet_odd, total_payout_by_settle, result_option
+    if total_payout_by_settle == total_payout_by_bet_odd:
+        # print(f"{key} odd结果:{total_payout_by_bet_odd} 开奖结果:{total_payout_by_settle} 一致数据可以保存用于分析")
+        cacheRoundInfo.append(
+            RoundInfo(key, result_option, options_pay_out, total_payout_by_bet_odd, total_payout_by_settle))
     bet_101 = 0
     bet_102 = 0
     total_payout_by_bet_odd = 0
@@ -47,9 +68,29 @@ def clear():
     options_pay_out.clear()
 
 
-def parse_data_from_file(file_path):
+def parse_data_from_file(_file_path):
+    clean_data(_file_path)
+    delete_wrong_data(_file_path)
+    print(json.dumps(cacheRoundInfo))
+
+
+def delete_wrong_data(_file_path):
+    print("错误数据key:", wrong_data_key)
+    if not wrong_data_key:
+        return
+    #         删除文件的某一行以及上一行
+    with open(_file_path, "r", encoding="utf-8") as f:
+        lines = f.readlines()
+    with open(_file_path, "w", encoding="utf-8") as f_w:
+        for line in lines:
+            # line 不包含任意一个错误数据key
+            if not any([i in line for i in wrong_data_key]):
+                f_w.write(line)
+
+
+def clean_data(_file_path):
     global index
-    with open(file_path, 'r', encoding='utf-8') as file:
+    with open(_file_path, 'r', encoding='utf-8') as file:
         for line in file:
             # print(line)
             line_strip = line.strip()
@@ -66,7 +107,7 @@ def parse_data_from_file(file_path):
             else:
                 process_settle(key, data)
                 compare_obb_and_settle(key, data)
-                clear()
+                save_and_clear(key)
             index += 1