rename pillar

This commit is contained in:
Debby
2026-06-27 13:23:02 +07:00
parent 17cc7833ad
commit ebc189f2a0
4 changed files with 807 additions and 1456 deletions
+46 -21
View File
@@ -11,6 +11,8 @@ Filtering Order:
6. Save analytical table (dengan nama/label lengkap untuk Looker Studio)
ADDED: Kolom indicator_name_id dan pillar_name_id (terjemahan Bahasa Indonesia)
CHANGED: pillar_name sekarang pakai prefix 'Food ' (Food Availability, Food Access, dst.)
'Sustainability' -> 'Food Other', nama Indonesia: Ketersediaan Pangan, Akses Pangan, dst.
"""
import pandas as pd
@@ -38,26 +40,36 @@ from google.cloud import bigquery
# =============================================================================
# TRANSLATION DICTIONARIES
# CHANGED: "Sustainability" / "sustainability" -> "Other" / "Lainnya"
# =============================================================================
PILLAR_TRANSLATION_ID: dict = {
# 4 pilar utama Food Security
"Availability" : "Ketersediaan",
"Access" : "Keterjangkauan",
"Utilization" : "Pemanfaatan",
"Stability" : "Stabilitas",
"Sustainability": "Keberlanjutan",
# Variasi penulisan yang mungkin muncul
"availability" : "Ketersediaan",
"access" : "Keterjangkauan",
"utilization" : "Pemanfaatan",
"stability" : "Stabilitas",
"sustainability": "Keberlanjutan",
# Mapping nama pilar (Inggris dengan prefix Food) -> Bahasa Indonesia
"Food Availability" : "Ketersediaan Pangan",
"Food Access" : "Keterjangkauan Pangan",
"Food Access" : "Akses Pangan",
"Food Utilization" : "Pemanfaatan Pangan",
"Food Stability" : "Stabilitas Pangan",
"Food Sustainability": "Keberlanjutan Pangan",
"Food Other" : "Indikator Tambahan",
# Variasi tanpa prefix Food (dari data lama)
"Availability" : "Ketersediaan Pangan",
"Access" : "Akses Pangan",
"Utilization" : "Pemanfaatan Pangan",
"Stability" : "Stabilitas Pangan",
"Other" : "Indikator Tambahan",
# Legacy Sustainability -> Food Other -> Indikator Tambahan
"Sustainability" : "Indikator Tambahan",
"sustainability" : "Indikator Tambahan",
# lowercase
"food availability" : "Ketersediaan Pangan",
"food access" : "Akses Pangan",
"food utilization" : "Pemanfaatan Pangan",
"food stability" : "Stabilitas Pangan",
"food other" : "Indikator Tambahan",
"availability" : "Ketersediaan Pangan",
"access" : "Akses Pangan",
"utilization" : "Pemanfaatan Pangan",
"stability" : "Stabilitas Pangan",
"other" : "Indikator Tambahan",
}
@@ -194,7 +206,11 @@ def translate_indicator(name: str) -> str:
def translate_pillar(name: str) -> str:
"""Terjemahkan nama pillar ke Bahasa Indonesia. Fallback ke nama asli."""
"""
Terjemahkan nama pillar ke Bahasa Indonesia. Fallback ke nama asli.
CHANGED: pillar_name menggunakan prefix 'Food ' (Food Availability, Food Access, dll.)
'Sustainability' -> 'Food Other' (EN) / 'Indikator Tambahan' (ID).
"""
if not name:
return name
return PILLAR_TRANSLATION_ID.get(name, name)
@@ -284,6 +300,18 @@ class AnalyticalLayerLoader:
self.df_clean = self.client.query(query).result().to_dataframe(create_bqstorage_client=False)
self.logger.info(f" Loaded: {len(self.df_clean):,} rows")
# Rename pillar_name: add 'Food ' prefix, remove Sustainability
PILLAR_RENAME_MAP = {
'Availability' : 'Food Availability',
'Access' : 'Food Access',
'Utilization' : 'Food Utilization',
'Stability' : 'Food Stability',
'Other' : 'Food Other',
'Sustainability': 'Food Other',
'sustainability': 'Food Other',
}
self.df_clean['pillar_name'] = self.df_clean['pillar_name'].replace(PILLAR_RENAME_MAP)
if 'is_year_range' in self.df_clean.columns:
yr = self.df_clean['is_year_range'].value_counts()
self.logger.info(f" Breakdown:")
@@ -614,11 +642,7 @@ class AnalyticalLayerLoader:
'value',
]].copy()
# ------------------------------------------------------------------
# TAMBAHAN: kolom terjemahan Bahasa Indonesia
# indicator_name_id : terjemahan Bahasa Indonesia dari indicator_name
# pillar_name_id : terjemahan Bahasa Indonesia dari pillar_name
# ------------------------------------------------------------------
# Terjemahan Bahasa Indonesia
analytical_df['indicator_name_id'] = analytical_df['indicator_name'].apply(translate_indicator)
analytical_df['pillar_name_id'] = analytical_df['pillar_name'].apply(translate_pillar)
@@ -701,7 +725,8 @@ class AnalyticalLayerLoader:
'fixed_countries': len(self.selected_country_ids),
'no_gaps' : True,
'layer' : 'gold',
'columns' : 'id + name + name_id (Looker Studio ready)'
'columns' : 'id + name + name_id (Looker Studio ready)',
'pillar_change' : 'Sustainability -> Food Other; all pillars use Food prefix',
}),
'validation_metrics' : json.dumps({
'fixed_countries' : len(self.selected_country_ids),