db_query / queries /process_atoll_db.py
DavMelchi's picture
addind atoll site DB
9cd5e21
import pandas as pd
from queries.process_gsm import process_gsm_data
from queries.process_lte import process_lte_data
from queries.process_wcdma import process_wcdma_data
from utils.convert_to_excel import convert_dfs, save_dataframe
from utils.utils_vars import UtilsVars
LTE_ATOLL_EMETTEUR_COLUMNS = [
"code",
"name",
"Hauteur",
"Azimut",
]
LTE_ATOLL_CELLULE_COLUMNS = [
"name",
"band",
"earfcnDL",
"rootSeqIndex",
"phyCellId",
"pMax",
]
WCDMA_ATOLL_EMETTEUR_COLUMNS = [
"code",
"name",
"Hauteur",
"Azimut",
"porteuse",
]
WCDMA_ATOLL_CELLULE_COLUMNS = [
"name",
"UARFCN",
"PriScrCode",
"PtxPrimaryCPICH",
]
GSM_ATOLL_COLUMNS = [
"code",
"name",
"Hauteur",
"Azimut",
"band_frequence",
"TRX_TCH",
"number_trx_per_cell",
"BCCH",
"configuration_schema",
"type_cellule",
"BSIC",
]
SITE_COLUMNS = [
"code",
"Longitude",
"Latitude",
"Hauteur",
]
########################### PROCESS LTE DATA FOR ATOLL#########################
def process_data_for_atoll(file_path: str):
df: pd.DataFrame = process_lte_data(file_path)
lte_fdd_df = df[0]
lte_tdd_df = df[1]
lte_tdd_df = lte_tdd_df.rename(columns={"earfcn": "earfcnDL"})
lte_atoll_df = pd.concat([lte_fdd_df, lte_tdd_df], ignore_index=True)
lte_site_df = lte_atoll_df[SITE_COLUMNS]
lte_atoll_emetteur_df = lte_atoll_df[LTE_ATOLL_EMETTEUR_COLUMNS]
lte_atoll_cellule_df = lte_atoll_df[LTE_ATOLL_CELLULE_COLUMNS]
# rename columns
lte_atoll_emetteur_df = lte_atoll_emetteur_df.rename(
columns={
"code": "Site",
"name": "Emetteur",
"Hauteur": "Hauteur (m)",
"Azimut": "Azimut (°)",
}
)
lte_atoll_emetteur_df.loc[
lte_atoll_emetteur_df["Hauteur (m)"] < 1, "Hauteur (m)"
] = 1
lte_atoll_emetteur_df.loc[lte_atoll_emetteur_df["Azimut (°)"] < 0, "Azimut (°)"] = 0
# Add additionals columns
lte_atoll_emetteur_df["Activé"] = True
lte_atoll_emetteur_df["DX (m)"] = 0
lte_atoll_emetteur_df["DY (m)"] = 0
lte_atoll_emetteur_df["Antenne"] = "OML 65deg 17dBi 6Tilt 1800MHz"
lte_atoll_emetteur_df["Downtilt mécanique (°)"] = 0
lte_atoll_emetteur_df["Rayon de calcul principal (m)"] = 15000
lte_atoll_emetteur_df["Modèle de propagation principal"] = (
"Standard Propagation Model"
)
lte_atoll_emetteur_df["Pertes émission (dB)"] = 0
lte_atoll_emetteur_df["Pertes réception (dB)"] = 0
lte_atoll_emetteur_df["Facteur de bruit (dB)"] = 5
lte_atoll_emetteur_df["Groupe d'hexagones"] = None
lte_atoll_emetteur_df["Rayon hexagone (m)"] = 5000
lte_atoll_emetteur_df["Commentaires"] = None
lte_atoll_emetteur_df["Equipement TMA"] = None
lte_atoll_emetteur_df["Equipement câbles"] = None
lte_atoll_emetteur_df["Equipement émetteur"] = None
lte_atoll_emetteur_df["Longueur de câbles en émission (m)"] = 100
lte_atoll_emetteur_df["Longueur de câbles en réception (m)"] = 100
lte_atoll_emetteur_df["Pertes diverses en émission (dB)"] = 0
lte_atoll_emetteur_df["Pertes diverses en réception (dB)"] = 0
lte_atoll_emetteur_df["Rayon de calcul étendu (m)"] = 20000
lte_atoll_emetteur_df["Modèle de propagation étendu"] = "(aucun)"
lte_atoll_emetteur_df["Résolution principale (m)"] = 500
lte_atoll_emetteur_df["Résolution étendue (m)"] = 10
lte_atoll_emetteur_df["Downtilt électrique additionnel (°)"] = 2
lte_atoll_emetteur_df["Nombre de ports d'antennes en émission"] = 2
lte_atoll_emetteur_df["Nombre de ports d'antennes en réception"] = 2
lte_atoll_emetteur_df["Type d'émetteur"] = "Intra-réseau (serveur et brouilleur)"
lte_atoll_emetteur_df["Antenne partagée"] = None
lte_atoll_emetteur_df["Equipement antenne intelligente"] = None
lte_atoll_emetteur_df["Tilt latéral mécanique (°)"] = 0
lte_atoll_emetteur_df["Diagramme partagé"] = None
# Rename cellule columns
lte_atoll_cellule_df = lte_atoll_cellule_df.rename(
columns={
"name": "Nom",
"earfcnDL": "Numéro de canal",
"rootSeqIndex": "Séquences ROOT PRACH",
"phyCellId": "Physical Cell ID",
"pMax": "Puissance max (dBm)",
}
)
# Map oml_band_frequence
lte_atoll_cellule_df["Bande de fréquences"] = (
lte_atoll_cellule_df["band"]
.map(UtilsVars.oml_lte_freq_band)
.fillna("not found")
)
lte_atoll_cellule_df["Emetteur"] = lte_atoll_cellule_df["Nom"]
lte_atoll_cellule_df["Charge de trafic (UL) (%)"] = 70
lte_atoll_cellule_df["Charge de trafic (DL) (%)"] = 70
lte_atoll_cellule_df["Equipement de réception"] = "Default Cell Equipment"
lte_atoll_cellule_df["Commentaires"] = None
lte_atoll_cellule_df["Nombre max d'utilisateurs"] = 600
lte_atoll_cellule_df["Noise rise UL (dB)"] = 2.5
lte_atoll_cellule_df["Nombre max de voisines intra-technologie"] = None
lte_atoll_cellule_df["Nombre max de voisines inter-technologies"] = None
lte_atoll_cellule_df["Active"] = True
lte_atoll_cellule_df["Scheduler"] = "Proportional Fair"
lte_atoll_cellule_df["RSRP min (dBm)"] = -128
lte_atoll_cellule_df["Support de diversité (DL)"] = "Diversité d'émission"
lte_atoll_cellule_df["Configuration de sous-trames TDD"] = "0 - DSUUU-DSUUU"
lte_atoll_cellule_df["Distance de réutilisation (m)"] = 20000
lte_atoll_cellule_df["Etat du SSS ID"] = "Alloué"
lte_atoll_cellule_df["Etat d'allocation de canal"] = "Alloué"
lte_atoll_cellule_df["Charge de trafic max (UL) (%)"] = 90
lte_atoll_cellule_df["Charge de trafic max (DL) (%)"] = 90
lte_atoll_cellule_df["Noise rise UL inter-technologies (dB)"] = 0
lte_atoll_cellule_df["Noise rise DL inter-technologies (dB)"] = 0
lte_atoll_cellule_df["Support de diversité (UL)"] = 1
lte_atoll_cellule_df["Nombre d'utilisateurs MU-MIMO co-schédulés (UL)"] = 2
lte_atoll_cellule_df["Offset EPRE SS / RS (dB)"] = 0
lte_atoll_cellule_df["Offset EPRE PDSCH / RS (dB)"] = 0
lte_atoll_cellule_df["Couche"] = "Macro Layer"
lte_atoll_cellule_df["Support de coordination d'interférences"] = 0
lte_atoll_cellule_df["Ratio de trafic en bordure de cellule (DL) (%)"] = 0
lte_atoll_cellule_df["Seuil ICIC de delta path loss (dB)"] = 0
lte_atoll_cellule_df["Facteur de contrôle de puissance fractionnaire"] = 1
lte_atoll_cellule_df["Noise rise max (UL) (dB)"] = 6
lte_atoll_cellule_df["C/(I+N) PUSCH max (dB)"] = 30
lte_atoll_cellule_df["Noise rise ICIC (UL) (dB)"] = 0
lte_atoll_cellule_df["EPRE RS par port d'antenne (dBm)"] = 12.2
lte_atoll_cellule_df["Offset EPRE PBCH / RS (dB)"] = 0
lte_atoll_cellule_df["Offset EPRE PDCCH / RS (dB)"] = 0
lte_atoll_cellule_df["Nombre d'utilisateurs (DL)"] = 300
lte_atoll_cellule_df["Nombre d'utilisateurs (UL)"] = 300
lte_atoll_cellule_df["Configuration de trame"] = None
lte_atoll_cellule_df["Taux d'utilisation AAS (DL) (%)"] = 0
lte_atoll_cellule_df["Distributions angulaires des interférences (AAS)"] = 10
lte_atoll_cellule_df["Domaine Physical Cell ID"] = None
lte_atoll_cellule_df["Etat du PSS ID"] = "Alloué"
lte_atoll_cellule_df["ID"] = None
lte_atoll_cellule_df["Nombre d'utilisateurs MU-MIMO co-schédulés (DL)"] = 2
lte_atoll_cellule_df["Schéma des sous-trames vides (ABS)"] = None
lte_atoll_cellule_df["Type de cellule"] = 1
lte_atoll_cellule_df["Nombre de RSI PRACH requis"] = 10
lte_atoll_cellule_df["Etat du RSI PRACH"] = "Alloué"
lte_atoll_cellule_df["Ordre"] = 1
lte_atoll_cellule_df["Seuil de sélection de cellule (dB)"] = 0
lte_atoll_cellule_df["Offset individuel de cellule (dB)"] = 0
lte_atoll_cellule_df["Marge de handover (dB)"] = 3
lte_atoll_cellule_df["Domaine de PRACH RSI"] = None
lte_atoll_cellule_df["Puissance max (dBm)"] = (
lte_atoll_cellule_df["Puissance max (dBm)"] / 10
)
########################### PROCESS WCDMA DATA FOR ATOLL#########################
wcdma_atoll_df: pd.DataFrame = process_wcdma_data(file_path)
wcdma_site_df = wcdma_atoll_df[SITE_COLUMNS]
wcdma_atoll_emetteur_df = wcdma_atoll_df[WCDMA_ATOLL_EMETTEUR_COLUMNS]
# rename columns
wcdma_atoll_emetteur_df = wcdma_atoll_emetteur_df.rename(
columns={
"code": "Site",
"name": "Emetteur",
"Hauteur": "Hauteur (m)",
"Azimut": "Azimut (°)",
"porteuse": "Bande de fréquences",
}
)
# Add atoll wcdma emetteur columns
wcdma_atoll_emetteur_df["Activé"] = "True"
wcdma_atoll_emetteur_df["DX (m)"] = 0
wcdma_atoll_emetteur_df["DY (m)"] = 0
wcdma_atoll_emetteur_df["Antenne"] = "OML 65deg 17dBi 6Tilt 1800MHz"
wcdma_atoll_emetteur_df["Downtilt mécanique (°)"] = 0
wcdma_atoll_emetteur_df["Rayon de calcul principal (m)"] = 15000
wcdma_atoll_emetteur_df["Modèle de propagation principal"] = (
"Standard Propagation Model"
)
wcdma_atoll_emetteur_df["Pertes émission (dB)"] = 0
wcdma_atoll_emetteur_df["Pertes réception (dB)"] = 0
wcdma_atoll_emetteur_df["Facteur de bruit (dB)"] = 5
wcdma_atoll_emetteur_df["Groupe d'hexagones"] = None
wcdma_atoll_emetteur_df["Rayon hexagone (m)"] = 5000
wcdma_atoll_emetteur_df["Commentaires"] = None
wcdma_atoll_emetteur_df["Equipement TMA"] = None
wcdma_atoll_emetteur_df["Equipement câbles"] = None
wcdma_atoll_emetteur_df["Equipement émetteur"] = None
wcdma_atoll_emetteur_df["Longueur de câbles en émission (m)"] = 0
wcdma_atoll_emetteur_df["Longueur de câbles en réception (m)"] = 0
wcdma_atoll_emetteur_df["Gain de diversité d'antenne de réception (dB)"] = 0
wcdma_atoll_emetteur_df["Pertes diverses en émission (dB)"] = 0
wcdma_atoll_emetteur_df["Pertes diverses en réception (dB)"] = 0
wcdma_atoll_emetteur_df["Rayon de calcul étendu (m)"] = 20000
wcdma_atoll_emetteur_df["Modèle de propagation étendu"] = "(aucun)"
wcdma_atoll_emetteur_df["Résolution principale (m)"] = 10000
wcdma_atoll_emetteur_df["Résolution étendue (m)"] = None
wcdma_atoll_emetteur_df["Downtilt électrique additionnel (°)"] = 2
wcdma_atoll_emetteur_df["Type de diversité d'émission"] = "Pas de diversité"
wcdma_atoll_emetteur_df["Partage des puissances entre porteuses"] = False
wcdma_atoll_emetteur_df["Puissance max partagée (dBm)"] = 43
wcdma_atoll_emetteur_df["Nombre de ports d'antennes en émission"] = 1
wcdma_atoll_emetteur_df["Nombre de ports d'antennes en réception"] = 1
wcdma_atoll_emetteur_df["Antenne partagée"] = False
wcdma_atoll_emetteur_df["Mode multi-cellules"] = "Aucun"
wcdma_atoll_emetteur_df["Portée max (m)"] = None
wcdma_atoll_emetteur_df["Tilt latéral mécanique (°)"] = 0
wcdma_atoll_emetteur_df["Diagramme partagé"] = None
# Replace Hauteur (m) values less than 1 with 1
wcdma_atoll_emetteur_df.loc[
wcdma_atoll_emetteur_df["Hauteur (m)"] < 1, "Hauteur (m)"
] = 1
wcdma_atoll_cellule_df = wcdma_atoll_df[WCDMA_ATOLL_CELLULE_COLUMNS]
# rename columns
wcdma_atoll_cellule_df = wcdma_atoll_cellule_df.rename(
columns={
"name": "Nom",
"UARFCN": "Porteuse",
"PriScrCode": "Scrambling code primaire",
"PtxPrimaryCPICH": "Puissance pilote (dBm)",
}
)
# Add columns Emetteur equal to Nom value
wcdma_atoll_cellule_df["Emetteur"] = wcdma_atoll_cellule_df["Nom"]
# Add additional column
wcdma_atoll_cellule_df["Domaine scrambling code"] = None
wcdma_atoll_cellule_df["Seuil AS (dB)"] = 5
wcdma_atoll_cellule_df["Puissance max (dBm)"] = 46
wcdma_atoll_cellule_df["Puissance SCH (dBm)"] = 21
wcdma_atoll_cellule_df["Puissance autres CCH (dBm)"] = 30
wcdma_atoll_cellule_df["Puissance totale (dBm)"] = None
wcdma_atoll_cellule_df["Facteur de charge UL (%)"] = None
wcdma_atoll_cellule_df["Commentaires"] = None
wcdma_atoll_cellule_df["Distance de réutilisation du SC (m)"] = 20000
wcdma_atoll_cellule_df["Nombre max de voisines intra-porteuse"] = 32
wcdma_atoll_cellule_df["Nombre max de voisines inter-technologies"] = 32
wcdma_atoll_cellule_df["Facteur de charge UL max (%)"] = 80
wcdma_atoll_cellule_df["Charge DL max (% Pmax)"] = 80
wcdma_atoll_cellule_df["Puissance HSDPA disponible (dBm)"] = None
wcdma_atoll_cellule_df["Dégagement de puissance (dB)"] = None
wcdma_atoll_cellule_df["Nombre max de codes HS-PDSCH"] = None
wcdma_atoll_cellule_df["Nombre max de voisines inter-porteuses"] = 32
wcdma_atoll_cellule_df["Nombre min de codes HS-PDSCH"] = None
wcdma_atoll_cellule_df["Allocation dynamique de puissance HSDPA"] = True
wcdma_atoll_cellule_df["Allocation dynamique de puissance HS-SCCH"] = True
wcdma_atoll_cellule_df["Puissance HS-SCCH (dBm)"] = None
wcdma_atoll_cellule_df["Nombre de canaux HS-SCCH"] = None
wcdma_atoll_cellule_df["Nombre max d'utilisateurs HSDPA"] = None
wcdma_atoll_cellule_df["Débit UL max par utilisateur (kbps)"] = 4000
wcdma_atoll_cellule_df["Débit DL max par utilisateur (kbps)"] = 45000
wcdma_atoll_cellule_df["Active"] = True
wcdma_atoll_cellule_df["Puissance DL HSUPA (dBm)"] = None
wcdma_atoll_cellule_df["Nombre max d'utilisateurs HSUPA"] = None
wcdma_atoll_cellule_df["Facteur de charge UL dû au HSUPA (%)"] = None
wcdma_atoll_cellule_df["Nombre d'utilisateurs HSUPA"] = None
wcdma_atoll_cellule_df["Facteur de réutilisation (UL)"] = None
wcdma_atoll_cellule_df["Nombre d'utilisateurs HSDPA"] = None
wcdma_atoll_cellule_df["Support HSPA"] = "Aucun"
wcdma_atoll_cellule_df["Noise rise UL inter-technologies (dB)"] = None
wcdma_atoll_cellule_df["Noise rise DL inter-technologies (dB)"] = None
wcdma_atoll_cellule_df["ID"] = None
wcdma_atoll_cellule_df["Support MIMO"] = "Aucun"
wcdma_atoll_cellule_df["SC verrouillé"] = True
wcdma_atoll_cellule_df["Algorithme du scheduler HSDPA"] = None
wcdma_atoll_cellule_df["RSCP min (dBm)"] = None
wcdma_atoll_cellule_df["Ordre"] = 1
wcdma_atoll_cellule_df["Couche"] = "Macro Layer"
wcdma_atoll_cellule_df["Offset individuel de cellule (dB)"] = 0
wcdma_atoll_cellule_df["Marge de handover (dB)"] = 0
wcdma_atoll_cellule_df["Puissance pilote (dBm)"] = (
wcdma_atoll_cellule_df["Puissance pilote (dBm)"] / 10
)
########################### PROCESS GSM DATA FOR ATOLL#########################
gsm_atoll_df: pd.DataFrame = process_gsm_data(file_path)
gsm_site_df = gsm_atoll_df[SITE_COLUMNS]
gsm_atoll_df = gsm_atoll_df[GSM_ATOLL_COLUMNS]
# rename columns
gsm_atoll_df = gsm_atoll_df.rename(
columns={
"code": "Site",
"name": "Emetteur",
"Hauteur": "Hauteur (m)",
"Azimut": "Azimut (°)",
"band_frequence": "Bande de fréquences",
"TRX_TCH": "Canaux",
"number_trx_per_cell": "TRXs requis",
"BCCH": "BCCH",
"configuration_schema": "Configurations de schémas de codage GPRS/EDGE",
"type_cellule": "Type de cellule",
"BSIC": "BSIC",
}
)
# Add atoll columns
gsm_atoll_df["Activé"] = "True"
gsm_atoll_df["DX (m)"] = 0
gsm_atoll_df["DY (m)"] = 0
gsm_atoll_df["Antenne"] = "OML 65deg 17dBi 6Tilt 1800MHz"
gsm_atoll_df["Downtilt mécanique (°)"] = 0
gsm_atoll_df["PIRE (dBm)"] = None
gsm_atoll_df["Puissance (dBm)"] = 43
gsm_atoll_df["Pertes émission (dB)"] = 3
gsm_atoll_df["Rayon de calcul principal (m)"] = 15000
gsm_atoll_df["Modèle de propagation principal"] = "Standard Propagation Model"
gsm_atoll_df["Groupe d'hexagones"] = None
gsm_atoll_df["Rayon hexagone (m)"] = 5000
gsm_atoll_df["Commentaires"] = None
gsm_atoll_df["Equipement TMA"] = None
gsm_atoll_df["Equipement câbles"] = None
gsm_atoll_df["Equipement émetteur"] = None
gsm_atoll_df["Longueur de câbles en émission (m)"] = 0
gsm_atoll_df["Longueur de câbles en réception (m)"] = 0
gsm_atoll_df["Pertes diverses en émission (dB)"] = 0
gsm_atoll_df["Pertes diverses en réception (dB)"] = 0
gsm_atoll_df["Rayon de calcul étendu (m)"] = 20000
gsm_atoll_df["Modèle de propagation étendu"] = "(aucun)"
gsm_atoll_df["Résolution principale (m)"] = 10000
gsm_atoll_df["Résolution étendue (m)"] = None
gsm_atoll_df["GPRS/EDGE"] = True
gsm_atoll_df["Mode de saut"] = None
gsm_atoll_df["Poids AFP"] = 1
gsm_atoll_df["Domaine de BSIC"] = "ALL BSICs"
gsm_atoll_df["Verrouiller canaux et MAIO"] = False
gsm_atoll_df["Verrouiller HSN"] = False
gsm_atoll_df["Verrouiller BSIC"] = False
gsm_atoll_df["Couche HCS"] = "Macro Layer"
gsm_atoll_df["Nombre max de schémas de codage (non utilisé)"] = None
gsm_atoll_df["Nombre max de voisines intra-technologie"] = None
gsm_atoll_df["Nombre max de voisines inter-technologies"] = None
gsm_atoll_df["Nombre max de TRXs"] = 16
gsm_atoll_df["Downtilt électrique additionnel (°)"] = None
gsm_atoll_df["Portée min (m)"] = None
gsm_atoll_df["Portée max (m)"] = None
gsm_atoll_df["Configuration de codecs"] = "Adaptive Multi-Rate"
gsm_atoll_df["FN Offset"] = None
gsm_atoll_df["Offset de resélection (dB)"] = 0
gsm_atoll_df["Seuil de réception couche HCS"] = None
gsm_atoll_df["PBCCH supporté"] = False
gsm_atoll_df["Seuil de réception PBCCH"] = -102
gsm_atoll_df["Offset PBCCH de resélection de cellule (dB)"] = 0
gsm_atoll_df["ID"] = None
gsm_atoll_df["Type d'émetteur"] = "Intra-réseau (serveur et brouilleur)"
gsm_atoll_df["Antenne partagée"] = None
gsm_atoll_df["Pertes réception (dB)"] = 0
gsm_atoll_df["Facteur de bruit (dB)"] = 5
gsm_atoll_df["Distance de réutilisation (m)"] = 20000
gsm_atoll_df["Tilt latéral mécanique (°)"] = 0
gsm_atoll_df["Diagramme partagé"] = None
# Add "Nombre de TRX" equal to "TRXs requis"
gsm_atoll_df["Nombre de TRX"] = gsm_atoll_df["TRXs requis"]
# Replace Hauteur (m) values less than 1 with 1
gsm_atoll_df.loc[gsm_atoll_df["Hauteur (m)"] < 1, "Hauteur (m)"] = 1
# save_dataframe(gsm_atoll_df, "GSM_ATOLL")
# save_dataframe(wcdma_atoll_emetteur_df, "WCDMA_ATOLL_EMETTEUR")
# save_dataframe(wcdma_atoll_cellule_df, "WCDMA_ATOLL_CELLULE")
# save_dataframe(lte_atoll_emetteur_df, "LTE_ATOLL_EMETTEUR")
# save_dataframe(lte_atoll_cellule_df, "LTE_ATOLL_CELLULE")
################################ SITE ########################################
site_df: pd.DataFrame = pd.concat(
[gsm_site_df, wcdma_site_df, lte_site_df], ignore_index=True
)
site_df.drop_duplicates(subset=["code"], keep="first", inplace=True)
# order by code
site_df.sort_values(by=["code"], inplace=True)
# rename columns
site_df.rename(
columns={
"code": "Nom",
"Longitude": "Longitude",
"Latitude": "Latitude",
"Hauteur": "Hauteur du support (m)",
},
inplace=True,
)
site_df["Altitude (m)"] = None
site_df["Commentaires"] = None
site_df["Type de support"] = "Pylône haubané"
site_df["Nb max CEs UL"] = 1200
site_df["Nb max CEs DL"] = 1200
site_df["Débit Iub Backhaul max UL (kbps)"] = 300000
site_df["Débit Iub Backhaul max DL (kbps)"] = 500000
site_df["Equipement"] = None
site_df["Débit max interface S1 (DL) (kbps)"] = 500000
site_df["Débit max interface S1 (UL) (kbps)"] = 300000
UtilsVars.final_atoll_database = convert_dfs(
[
gsm_atoll_df,
wcdma_atoll_emetteur_df,
wcdma_atoll_cellule_df,
lte_atoll_emetteur_df,
lte_atoll_cellule_df,
site_df,
],
[
"GSM",
"WCDMA_EMETTEUR",
"WCDMA_CELLULE",
"LTE_EMETTEUR",
"LTE_CELLULE",
"SITE",
],
)