1.7.0: New features.

This commit is contained in:
2026-01-27 21:26:07 +08:00
parent 5693eb84ee
commit 6b4cc048b3
11 changed files with 737 additions and 40 deletions

View File

@@ -0,0 +1,74 @@
import sqlite3
import pandas as pd
import os
# Config
L2_DB_PATH = r'database/L2/L2_Main.sqlite'
L3_DB_PATH = r'database/L3/L3_Features.sqlite'
def analyze_team_dmg_per_1k():
if not os.path.exists(L3_DB_PATH):
print(f"Error: L3 DB not found at {L3_DB_PATH}")
return
conn_l3 = sqlite3.connect(L3_DB_PATH)
conn_l2 = sqlite3.connect(L2_DB_PATH)
print("--- Analysis: Team Dmg/$1k (Economy Efficiency) ---")
try:
# 1. Get all L3 features
query = """
SELECT f.steam_id_64, f.eco_avg_damage_per_1k, p.username
FROM dm_player_features f
LEFT JOIN dim_players p ON f.steam_id_64 = p.steam_id_64
ORDER BY f.eco_avg_damage_per_1k DESC
"""
# Attach L2 for username lookup
# We can't attach across connections easily in sqlite python without ATTACH DATABASE command
# So let's fetch L3 first, then map names from L2
df_l3 = pd.read_sql_query("SELECT steam_id_64, eco_avg_damage_per_1k FROM dm_player_features", conn_l3)
if df_l3.empty:
print("No data in L3 Features.")
return
# Fetch names
ids = tuple(df_l3['steam_id_64'].tolist())
placeholders = ','.join(['?'] * len(ids))
q_names = f"SELECT steam_id_64, username FROM dim_players WHERE steam_id_64 IN ({placeholders})"
df_names = pd.read_sql_query(q_names, conn_l2, params=ids)
# Merge
df = df_l3.merge(df_names, on='steam_id_64', how='left')
# Sort
df = df.sort_values('eco_avg_damage_per_1k', ascending=False)
print(f"{'Rank':<5} {'Player':<20} {'Dmg/$1k':<10}")
print("-" * 40)
for idx, row in df.iterrows():
rank = idx + 1 # This index is not rank if we iterated row by row after sort, wait.
# reset_index to get rank
pass
df = df.reset_index(drop=True)
for idx, row in df.iterrows():
name = row['username'] if row['username'] else row['steam_id_64']
val = row['eco_avg_damage_per_1k']
print(f"#{idx+1:<4} {name:<20} {val:.2f}")
except Exception as e:
print(f"Error: {e}")
import traceback
traceback.print_exc()
finally:
conn_l2.close()
conn_l3.close()
if __name__ == "__main__":
analyze_team_dmg_per_1k()