rename pillar
This commit is contained in:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user