1.7.0: New features.
This commit is contained in:
74
scripts/analyze_dmg_per_1k.py
Normal file
74
scripts/analyze_dmg_per_1k.py
Normal 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()
|
||||
Reference in New Issue
Block a user