yeref 0.24.78__py3-none-any.whl → 0.24.79__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
yeref/yeref.py
CHANGED
@@ -16496,58 +16496,53 @@ async def return_retention_metrics(bot, PROJECT_USERNAME, EXTRA_D, BASE_P):
|
|
16496
16496
|
if not cohort_months:
|
16497
16497
|
return
|
16498
16498
|
|
16499
|
-
#
|
16500
|
-
|
16501
|
-
|
16502
|
-
|
16503
|
-
|
16499
|
+
# Функция прибавления месяцев
|
16500
|
+
def add_months(mo_str, n):
|
16501
|
+
y, m = map(int, mo_str.split("-"))
|
16502
|
+
total = m + n
|
16503
|
+
new_y = y + (total - 1) // 12
|
16504
|
+
new_m = (total - 1) % 12 + 1
|
16505
|
+
return f"{new_y:04d}-{new_m:02d}"
|
16506
|
+
|
16507
|
+
num_cohorts = len(cohort_months)
|
16508
|
+
first_cohort = cohort_months[0]
|
16504
16509
|
|
16505
16510
|
path = os.path.join(EXTRA_D, "4_retention_metrics.csv")
|
16506
16511
|
with open(path, "w", newline="", encoding="utf-8") as f:
|
16507
16512
|
writer = csv.writer(f)
|
16508
|
-
|
16509
|
-
# заголовок
|
16510
16513
|
header = ["Месяц/Когорта"] + [
|
16511
|
-
f"{c} ({len(cohort_users[c])})"
|
16512
|
-
for c in cohort_months
|
16514
|
+
f"{c} ({len(cohort_users[c])})" for c in cohort_months
|
16513
16515
|
] + ["∑"]
|
16514
16516
|
writer.writerow(header)
|
16515
16517
|
|
16516
|
-
|
16517
|
-
|
16518
|
+
for i in range(num_cohorts):
|
16519
|
+
calendar_mo = add_months(first_cohort, i)
|
16518
16520
|
row = [f"M{i+1}"]
|
16519
16521
|
row_sum = 0.0
|
16520
16522
|
for c in cohort_months:
|
16521
|
-
|
16522
|
-
|
16523
|
-
|
16524
|
-
|
16525
|
-
row_sum += rev
|
16526
|
-
else:
|
16523
|
+
y0, m0 = map(int, c.split("-"))
|
16524
|
+
y1, m1 = map(int, calendar_mo.split("-"))
|
16525
|
+
offset = (y1 - y0) * 12 + (m1 - m0)
|
16526
|
+
if offset < 0:
|
16527
16527
|
row.append("")
|
16528
|
+
else:
|
16529
|
+
rev = rev_by_cohort[c].get(offset, 0.0)
|
16530
|
+
if rev > 0:
|
16531
|
+
cell = f"{rev:.1f}"
|
16532
|
+
row.append(cell)
|
16533
|
+
row_sum += rev
|
16534
|
+
else:
|
16535
|
+
row.append("0.0")
|
16528
16536
|
row.append(f"{row_sum:.1f}")
|
16529
16537
|
writer.writerow(row)
|
16530
16538
|
|
16531
|
-
# вычисляем средний NRR-множитель (геометрическое среднее факторов роста)
|
16532
|
-
import math
|
16533
|
-
factors = []
|
16534
|
-
for c in cohort_months:
|
16535
|
-
for i in range(1, max_offset + 1):
|
16536
|
-
prev_rev = rev_by_cohort[c].get(i - 1, 0.0)
|
16537
|
-
curr_rev = rev_by_cohort[c].get(i, 0.0)
|
16538
|
-
if prev_rev > 0 and curr_rev > 0:
|
16539
|
-
factors.append(curr_rev / prev_rev)
|
16540
|
-
avg_multiplier = math.prod(factors) ** (1 / len(factors)) if factors else 1.0
|
16541
|
-
|
16542
|
-
writer.writerow([])
|
16543
|
-
writer.writerow([f"NRR ~ ×{avg_multiplier:.2f} monthly"])
|
16544
|
-
|
16545
16539
|
thumb = types.FSInputFile(os.path.join(EXTRA_D, "parse.jpg"))
|
16546
16540
|
await bot.send_document(chat_id=my_tid, document=types.FSInputFile(path), thumbnail=thumb)
|
16547
16541
|
except Exception as e:
|
16548
16542
|
logger.info(log_ % str(e))
|
16549
16543
|
await asyncio.sleep(round(random.uniform(0, 1), 2))
|
16550
16544
|
|
16545
|
+
|
16551
16546
|
# endregion
|
16552
16547
|
|
16553
16548
|
|
@@ -0,0 +1,8 @@
|
|
1
|
+
yeref/__init__.py,sha256=Qpv3o6Xa78VdLcsSRmctGtpnYE9btpAkCekgGhgJyXM,49
|
2
|
+
yeref/l_.py,sha256=LMX_olmJwq-tgoALJCnhV_fGrL_i_43yBLkLIcEVqGo,1176743
|
3
|
+
yeref/tonweb.js,sha256=Jf6aFOQ1OIY4q7fINYz-m5LsI3seMus124M5SYYZmtE,443659
|
4
|
+
yeref/yeref.py,sha256=OkzYRSpNveWRFwJTVruMsncDCazljcNo9rHXRuXcUL4,1053723
|
5
|
+
yeref-0.24.79.dist-info/METADATA,sha256=xiNJrIl4_xndDNgPlsinfljko2XWb2xZTvmF3xKcHwE,119
|
6
|
+
yeref-0.24.79.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
7
|
+
yeref-0.24.79.dist-info/top_level.txt,sha256=yCQKchWHbfV-3OuQPYRdi2loypD-nmbDJbtt3OuKKkY,6
|
8
|
+
yeref-0.24.79.dist-info/RECORD,,
|
yeref-0.24.78.dist-info/RECORD
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
yeref/__init__.py,sha256=Qpv3o6Xa78VdLcsSRmctGtpnYE9btpAkCekgGhgJyXM,49
|
2
|
-
yeref/l_.py,sha256=LMX_olmJwq-tgoALJCnhV_fGrL_i_43yBLkLIcEVqGo,1176743
|
3
|
-
yeref/tonweb.js,sha256=Jf6aFOQ1OIY4q7fINYz-m5LsI3seMus124M5SYYZmtE,443659
|
4
|
-
yeref/yeref.py,sha256=ka1maF69m7NWWK0UjGjci1EFQn3CvnQhXisGddf0Ao4,1054032
|
5
|
-
yeref-0.24.78.dist-info/METADATA,sha256=5iQzC-q2jHUQXxSE8Swo5ua247fJ3Nj7u80dG7LtyBg,119
|
6
|
-
yeref-0.24.78.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
7
|
-
yeref-0.24.78.dist-info/top_level.txt,sha256=yCQKchWHbfV-3OuQPYRdi2loypD-nmbDJbtt3OuKKkY,6
|
8
|
-
yeref-0.24.78.dist-info/RECORD,,
|
File without changes
|
File without changes
|