Skip to content

Commit 8123056

Browse files
committed
🎨 Refactor some data scripts a bit.
1 parent 8656996 commit 8123056

File tree

4 files changed

+143
-56
lines changed

4 files changed

+143
-56
lines changed

‎py/droprates.py

+29-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,33 @@ def total_drops() -> dict[str, dict[str, int]]:
1717
return totals
1818

1919

20+
def rates_per_stam() -> dict[str, dict[str, float]]:
21+
rates = {}
22+
for loc, loc_data in total_drops().items():
23+
loc_rates = {}
24+
for item, drops in loc_data["drops"].items():
25+
if item == "ALL":
26+
continue
27+
loc_rates[item] = drops / loc_data["stamina"]
28+
rates[loc] = loc_rates
29+
return rates
30+
31+
32+
def drop_rates() -> dict[str, dict[str, float]]:
33+
rates = {}
34+
for loc, loc_data in total_drops().items():
35+
zone_total = sum(
36+
drops for item, drops in loc_data["drops"].items() if item != "ALL"
37+
)
38+
loc_rates = {}
39+
for item, drops in loc_data["drops"].items():
40+
if item == "ALL":
41+
continue
42+
loc_rates[item] = drops / zone_total
43+
rates[loc] = loc_rates
44+
return rates
45+
46+
2047
if __name__ == "__main__":
2148
item_filter = sys.argv[1] if len(sys.argv) > 1 else None
2249
combined_stam_per_drop = {}
@@ -25,11 +52,11 @@ def total_drops() -> dict[str, dict[str, int]]:
2552
for item, drops in sorted(zone_totals["drops"].items()):
2653
if item_filter and item != item_filter:
2754
continue
28-
stam_per_drop = zone_totals['stamina'] / drops
55+
stam_per_drop = zone_totals["stamina"] / drops
2956
if stam_per_drop < combined_stam_per_drop.get(item, 1000000000000):
3057
combined_stam_per_drop[item] = stam_per_drop
3158
print(f"\t{item}: {stam_per_drop} ({drops})")
3259

3360
print("Combined:")
3461
for item, stam_per_drop in sorted(combined_stam_per_drop.items()):
35-
print(f" \"{item}\": {stam_per_drop},")
62+
print(f' "{item}": {stam_per_drop},')

‎py/exp_vs_lem.py

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import droprates
2+
import lemonade
3+
4+
lem = lemonade.drop_rates()
5+
# exp = droprates.rates_per_stam()
6+
exp = droprates.drop_rates()
7+
8+
locations = set(lem.keys()) | set(exp.keys())
9+
10+
for loc in sorted(locations):
11+
print(f"{loc}:")
12+
lem_data = lem.get(loc, {})
13+
exp_data = exp.get(loc, {})
14+
items = set(lem_data.keys()) | set(exp_data.keys())
15+
for item in sorted(items):
16+
lem_rate = lem_data.get(item, 0)
17+
exp_rate = exp_data.get(item, 0)
18+
if lem_rate == 0 or exp_rate == 0:
19+
print(f"\t{item}: NO MATCH")
20+
else:
21+
print(f"\t{item}: {lem_rate / exp_rate}")

‎py/fishrates.py

+44-30
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,50 @@
11
import fixtures
22
import parse_logs
33

4-
totals = {}
54

6-
prices = {}
7-
for item in fixtures.load_items():
8-
if item.sell_price:
9-
prices[item.name] = item.sell_price
5+
def net_totals() -> dict[str, dict[str:float]]:
6+
totals = {}
7+
for row in parse_logs.parse_logs("net"):
8+
zone_name = row["results"].get("location")
9+
if not zone_name:
10+
continue
11+
zone_totals = totals.setdefault(zone_name, {"nets": 0, "drops": {}})
12+
zone_totals["nets"] += 1
13+
for item in row["results"]["items"]:
14+
zone_totals["drops"][item["item"]] = (
15+
zone_totals["drops"].get(item["item"], 0) + 1
16+
)
17+
return totals
1018

11-
for row in parse_logs.parse_logs("net"):
12-
zone_name = row["results"].get("location")
13-
if not zone_name:
14-
continue
15-
zone_totals = totals.setdefault(zone_name, {"nets": 0, "drops": {}})
16-
zone_totals["nets"] += 1
17-
for item in row["results"]["items"]:
18-
zone_totals["drops"][item["item"]] = (
19-
zone_totals["drops"].get(item["item"], 0) + 1
20-
)
2119

22-
for zone, zone_data in sorted(totals.items()):
23-
print(f"{zone} ({zone_data['nets']}):")
24-
zone_total = sum(zone_data["drops"].values())
25-
percs = {
26-
item: (count, (count / zone_total) * 100)
27-
for item, count in zone_data["drops"].items()
28-
}
29-
value_of_drop = 0
30-
for item, (count, percent) in sorted(
31-
percs.items(), reverse=True, key=lambda kv: kv[1][1]
32-
):
33-
print(f"\t{item}: {percent:.4f}% ({count})")
34-
if item in prices:
35-
value_of_drop += (percent / 100) * prices[item]
36-
print(f"\tNet: {value_of_drop * 15}")
20+
def net_rates() -> dict[str, dict[str:float]]:
21+
rates = {}
22+
for zone, zone_data in net_totals().items():
23+
zone_total = sum(zone_data["drops"].values())
24+
rates[zone] = {
25+
item: count / zone_total for item, count in zone_data["drops"].items()
26+
}
27+
return rates
28+
29+
30+
if __name__ == "__main__":
31+
prices = {}
32+
for item in fixtures.load_items():
33+
if item.sell_price:
34+
prices[item.name] = item.sell_price
35+
36+
for zone, zone_data in sorted(net_totals().items()):
37+
print(f"{zone} ({zone_data['nets']}):")
38+
zone_total = sum(zone_data["drops"].values())
39+
percs = {
40+
item: (count, (count / zone_total) * 100)
41+
for item, count in zone_data["drops"].items()
42+
}
43+
value_of_drop = 0
44+
for item, (count, percent) in sorted(
45+
percs.items(), reverse=True, key=lambda kv: kv[1][1]
46+
):
47+
print(f"\t{item}: {percent:.4f}% ({count})")
48+
if item in prices:
49+
value_of_drop += (percent / 100) * prices[item]
50+
print(f"\tNet: {value_of_drop * 15}")

‎py/lemonade.py

+49-24
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,51 @@
1+
from collections import Counter
2+
3+
import fixtures
14
import parse_logs
25

3-
totals = {}
4-
5-
for row in parse_logs.parse_logs("lemonade"):
6-
zone_name = row["results"].get("location")
7-
if not zone_name:
8-
continue
9-
zone_totals = totals.setdefault(zone_name, {"lemonades": 0, "drops": {}})
10-
zone_totals["lemonades"] += 1
11-
for item in row["results"]["items"]:
12-
zone_totals["drops"][item["item"]] = (
13-
zone_totals["drops"].get(item["item"], 0) + 1
14-
)
15-
16-
for zone, zone_data in sorted(totals.items()):
17-
print(f"{zone} ({zone_data['lemonades']}):")
18-
zone_total = sum(zone_data["drops"].values())
19-
percs = {
20-
item: (count, (count / zone_total) * 100)
21-
for item, count in zone_data["drops"].items()
22-
}
23-
for item, (count, percent) in sorted(
24-
percs.items(), reverse=True, key=lambda kv: kv[1][1]
25-
):
26-
print(f"\t{item}: {percent:.4f}% ({count})")
6+
7+
def total_drops():
8+
totals = {}
9+
for row in parse_logs.parse_logs("lemonade"):
10+
zone_name = row["results"].get("location")
11+
if not zone_name:
12+
continue
13+
zone_totals = totals.setdefault(zone_name, {"lemonades": 0, "drops": {}})
14+
zone_totals["lemonades"] += 1
15+
for item in row["results"]["items"]:
16+
zone_totals["drops"][item["item"]] = (
17+
zone_totals["drops"].get(item["item"], 0) + 1
18+
)
19+
return totals
20+
21+
22+
def drop_rates() -> dict[str, dict[str, float]]:
23+
rates = {}
24+
for zone, zone_data in total_drops().items():
25+
zone_total = sum(zone_data["drops"].values())
26+
rates[zone] = {
27+
item: count / zone_total for item, count in zone_data["drops"].items()
28+
}
29+
return rates
30+
31+
32+
if __name__ == "__main__":
33+
items = {it.name: it for it in fixtures.load_items()}
34+
35+
for zone, zone_data in sorted(total_drops().items()):
36+
print(f"{zone} ({zone_data['lemonades']}):")
37+
zone_total = sum(zone_data["drops"].values())
38+
percs = {
39+
item: (count, (count / zone_total) * 100)
40+
for item, count in zone_data["drops"].items()
41+
}
42+
for item, (count, percent) in sorted(
43+
percs.items(), reverse=True, key=lambda kv: kv[1][1]
44+
):
45+
print(f"\t{item}: {percent:.4f}% ({count})")
46+
47+
drops_by_rarity: Counter[str, int] = Counter()
48+
for item, count in zone_data["drops"].items():
49+
drops_by_rarity[items[item].rarity or "NONE"] += count
50+
for rarity, count in sorted(drops_by_rarity.items()):
51+
print(f"\t{rarity.upper()}: {(count * 100 / zone_total):.4f}")

0 commit comments

Comments
 (0)