Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1440,23 +1440,47 @@ setTimeout(() => {
|
|
| 1440 |
</script>
|
| 1441 |
""", unsafe_allow_html=True)
|
| 1442 |
|
| 1443 |
-
#
|
| 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 |
-
|
| 1450 |
-
if
|
| 1451 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1452 |
else:
|
| 1453 |
-
|
| 1454 |
-
|
| 1455 |
-
|
| 1456 |
-
|
| 1457 |
-
|
| 1458 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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
|