SHELLAPANDIANGANHUNGING commited on
Commit
eba1901
·
verified ·
1 Parent(s): 325d6ac

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -11
app.py CHANGED
@@ -1440,23 +1440,47 @@ setTimeout(() => {
1440
  </script>
1441
  """, unsafe_allow_html=True)
1442
 
1443
- # 🔹 Helper: ASCII Sparkline in PLN Blue
1444
  def ascii_sparkline_pln(data):
1445
  if not data or len(data) == 0:
1446
- return ""
 
1447
  try:
1448
  data = [float(x) for x in data]
1449
- min_val, max_val = min(data), max(data)
1450
- if max_val == min_val:
1451
- norm = [3] * len(data)
 
 
 
 
 
 
 
 
 
1452
  else:
1453
- norm = [int(7 * (x - min_val) / (max_val - min_val + 1e-9)) for x in data]
1454
- blocks = "▁▂▃▄▅▆▇█"
1455
- spark = "".join(blocks[min(max(0, i), 7)] for i in norm)
1456
- return f"<span class='spark' style='color:#003DA5;'>{spark}</span>"
1457
- except:
1458
- return "<span class='spark' style='color:#999;'>▁▁▁</span>"
 
 
 
 
 
 
 
 
 
 
 
 
1459
 
 
 
1460
  # ——————— 1. Creators: ONLY Coverage < 90% AND Slope < 0 ———————
1461
  def predict_creators(df):
1462
  # ❌ Tidak ada filter Non-Positive
 
1440
  </script>
1441
  """, unsafe_allow_html=True)
1442
 
1443
+ #bloob line
1444
  def ascii_sparkline_pln(data):
1445
  if not data or len(data) == 0:
1446
+ return "<span class='spark' style='color:#999;'>—</span>"
1447
+
1448
  try:
1449
  data = [float(x) for x in data]
1450
+ n = len(data)
1451
+ if n == 1:
1452
+ return "<span class='spark' style='color:#003DA5;'>•</span>"
1453
+
1454
+ # Normalisasi ke [0, 10] dalam tinggi 16px (y terbalik: 0=top, 16=bottom)
1455
+ min_y, max_y = min(data), max(data)
1456
+ height = 16
1457
+ margin = 2
1458
+ usable_h = height - 2 * margin
1459
+
1460
+ if max_y == min_y:
1461
+ y_coords = [margin + usable_h / 2] * n
1462
  else:
1463
+ y_coords = [
1464
+ margin + usable_h * (1 - (v - min_y) / (max_y - min_y + 1e-9))
1465
+ for v in data
1466
+ ]
1467
+
1468
+ # Buat koordinat polyline: x = 0, 8, 16, ... (jarak 8px per titik)
1469
+ points = " ".join(f"{i * 8},{y:.1f}" for i, y in enumerate(y_coords))
1470
+ width = max(24, (n - 1) * 8 + 4)
1471
+
1472
+ svg = (
1473
+ f'<svg class="sparkline" width="{width}" height="{height}" '
1474
+ f'viewBox="-2 0 {width} {height}" style="vertical-align:middle" '
1475
+ f'xmlns="http://www.w3.org/2000/svg">'
1476
+ f'<polyline points="{points}" fill="none" stroke="#003DA5" '
1477
+ f'stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/>'
1478
+ f'</svg>'
1479
+ )
1480
+ return svg
1481
 
1482
+ except Exception:
1483
+ return "<span class='spark' style='color:#999;'>⚠</span>"
1484
  # ——————— 1. Creators: ONLY Coverage < 90% AND Slope < 0 ———————
1485
  def predict_creators(df):
1486
  # ❌ Tidak ada filter Non-Positive