DavMelchi commited on
Commit
7045784
·
1 Parent(s): 101512e

Improve databases with fatima request

Browse files
queries/process_lte.py CHANGED
@@ -198,12 +198,27 @@ def process_lte_data(file_path: str):
198
  df_lncel_lnbts, df_physical_db, on="Code_Sector", how="left"
199
  )
200
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
201
  # Process LNCEL_FDD and LNCEL_TDD data
202
  df_lncel_fdd = dfs["LNCEL_FDD"]
203
  df_lncel_fdd.columns = df_lncel_fdd.columns.str.replace(r"[ ]", "", regex=True)
204
  df_lncel_fdd["ID_LNCEL"] = (
205
  df_lncel_fdd[["MRBTS", "LNBTS", "LNCEL"]].astype(str).apply("_".join, axis=1)
206
  )
 
207
  df_lncel_fdd = df_lncel_fdd[LNCEL_FDD_COLUMNS]
208
 
209
  df_lncel_tdd = dfs["LNCEL_TDD"]
 
198
  df_lncel_lnbts, df_physical_db, on="Code_Sector", how="left"
199
  )
200
 
201
+ # Add Number of cells per band on MRBTS
202
+ df_id_mrbts_band = df_lncel_lnbts[["MRBTS", "band"]]
203
+ df_id_mrbts_band_grouped = (
204
+ df_id_mrbts_band.groupby(["MRBTS", "band"])
205
+ .size()
206
+ .unstack(fill_value=0)
207
+ .rename(columns=lambda x: f"Number of {x} cells on MRBTS")
208
+ .reset_index()
209
+ )
210
+
211
+ df_lncel_lnbts = pd.merge(
212
+ df_lncel_lnbts, df_id_mrbts_band_grouped, on="MRBTS", how="left"
213
+ )
214
+
215
  # Process LNCEL_FDD and LNCEL_TDD data
216
  df_lncel_fdd = dfs["LNCEL_FDD"]
217
  df_lncel_fdd.columns = df_lncel_fdd.columns.str.replace(r"[ ]", "", regex=True)
218
  df_lncel_fdd["ID_LNCEL"] = (
219
  df_lncel_fdd[["MRBTS", "LNBTS", "LNCEL"]].astype(str).apply("_".join, axis=1)
220
  )
221
+
222
  df_lncel_fdd = df_lncel_fdd[LNCEL_FDD_COLUMNS]
223
 
224
  df_lncel_tdd = dfs["LNCEL_TDD"]
queries/process_mrbts.py CHANGED
@@ -66,16 +66,49 @@ def process_mrbts_data(
66
  lte_fdd_df: pd.DataFrame = UtilsVars.all_db_dfs[4]
67
  lte_tdd_df: pd.DataFrame = UtilsVars.all_db_dfs[5]
68
 
69
- gsm_df = gsm_df[["ID_BCF", "site_name", "number_trx_per_bcf", "bcf_config_band"]]
 
 
 
 
 
 
 
 
 
70
  gsm_df = gsm_df.drop_duplicates(subset=["ID_BCF"], keep="first")
71
  gsm_df = gsm_df.rename(columns={"site_name": "gsm_name"})
72
 
73
- wcdma_df = wcdma_df[["WBTS", "site_name", "wbts_config_band"]]
 
 
 
 
 
 
 
 
74
  wcdma_df = wcdma_df.drop_duplicates(subset=["WBTS"], keep="first")
75
  wcdma_df = wcdma_df.rename(columns={"site_name": "wcdma_name"})
76
 
77
- lte_fdd_df = lte_fdd_df[["MRBTS", "lnbts_name", "lte_config_band"]]
78
- lte_tdd_df = lte_tdd_df[["MRBTS", "lnbts_name", "lte_config_band"]]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  lte_df = pd.concat([lte_fdd_df, lte_tdd_df], ignore_index=True)
80
  lte_df = lte_df.drop_duplicates(subset=["MRBTS"], keep="first")
81
 
 
66
  lte_fdd_df: pd.DataFrame = UtilsVars.all_db_dfs[4]
67
  lte_tdd_df: pd.DataFrame = UtilsVars.all_db_dfs[5]
68
 
69
+ gsm_df = gsm_df[
70
+ [
71
+ "ID_BCF",
72
+ "site_name",
73
+ "number_trx_per_bcf",
74
+ "bcf_config_band",
75
+ "G1800 TRX Per BCF",
76
+ "G900 TRX Per BCF",
77
+ ]
78
+ ]
79
  gsm_df = gsm_df.drop_duplicates(subset=["ID_BCF"], keep="first")
80
  gsm_df = gsm_df.rename(columns={"site_name": "gsm_name"})
81
 
82
+ wcdma_df = wcdma_df[
83
+ [
84
+ "WBTS",
85
+ "site_name",
86
+ "wbts_config_band",
87
+ "Number of U2100 cells on WBTS",
88
+ "Number of U900 cells on WBTS",
89
+ ]
90
+ ]
91
  wcdma_df = wcdma_df.drop_duplicates(subset=["WBTS"], keep="first")
92
  wcdma_df = wcdma_df.rename(columns={"site_name": "wcdma_name"})
93
 
94
+ lte_fdd_df = lte_fdd_df[
95
+ [
96
+ "MRBTS",
97
+ "lnbts_name",
98
+ "lte_config_band",
99
+ "Number of L1800 cells on MRBTS",
100
+ "Number of L2600 cells on MRBTS",
101
+ "Number of L800 cells on MRBTS",
102
+ ]
103
+ ]
104
+ lte_tdd_df = lte_tdd_df[
105
+ [
106
+ "MRBTS",
107
+ "lnbts_name",
108
+ "lte_config_band",
109
+ "Number of L2300 cells on MRBTS",
110
+ ]
111
+ ]
112
  lte_df = pd.concat([lte_fdd_df, lte_tdd_df], ignore_index=True)
113
  lte_df = lte_df.drop_duplicates(subset=["MRBTS"], keep="first")
114
 
queries/process_small_bts.py CHANGED
@@ -1,5 +1,7 @@
1
  import pandas as pd
2
 
 
 
3
 
4
  def process_small_bts_data(file_path: str):
5
  dfs = pd.read_excel(
@@ -15,7 +17,15 @@ def process_small_bts_data(file_path: str):
15
  pd.to_numeric(df_bts["code"], errors="coerce").fillna(0).astype(int)
16
  )
17
  df_bts["ID_BTS"] = df_bts[["BSC", "BCF", "BTS"]].astype(str).apply("_".join, axis=1)
 
18
  df_bts["ID_MAL"] = df_bts[["BSC", "BTS"]].astype(str).apply("_".join, axis=1)
19
- df_bts = df_bts[["ID_BTS", "ID_MAL", "code", "name"]]
 
 
 
 
 
 
 
20
 
21
  return df_bts
 
1
  import pandas as pd
2
 
3
+ from utils.utils_vars import UtilsVars
4
+
5
 
6
  def process_small_bts_data(file_path: str):
7
  dfs = pd.read_excel(
 
17
  pd.to_numeric(df_bts["code"], errors="coerce").fillna(0).astype(int)
18
  )
19
  df_bts["ID_BTS"] = df_bts[["BSC", "BCF", "BTS"]].astype(str).apply("_".join, axis=1)
20
+ df_bts["ID_BCF"] = df_bts[["BSC", "BCF"]].astype(str).apply("_".join, axis=1)
21
  df_bts["ID_MAL"] = df_bts[["BSC", "BTS"]].astype(str).apply("_".join, axis=1)
22
+ df_bts["SectorId2"] = (
23
+ df_bts["sectorId"].map(UtilsVars.sector_mapping).fillna(df_bts["sectorId"])
24
+ )
25
+ df_bts["band"] = (
26
+ df_bts["frequencyBandInUse"].map(UtilsVars.gsm_band).fillna("not found")
27
+ )
28
+ df_bts = df_bts[["ID_BTS", "ID_MAL", "code", "name", "SectorId2", "band"]]
29
+ # print(df_bts.head())
30
 
31
  return df_bts
queries/process_trx.py CHANGED
@@ -12,6 +12,8 @@ TRX_COLUMNS = [
12
  "number_trx_per_cell",
13
  "number_trx_per_bcf",
14
  "number_trx_per_site",
 
 
15
  ]
16
 
17
 
@@ -21,11 +23,16 @@ TRX_BTS_COLUMNS = [
21
  "BTS",
22
  "TRX",
23
  "ID_BTS",
 
24
  "number_trx_per_cell",
25
  "number_trx_per_bcf",
26
  "number_trx_per_site",
 
 
27
  "code",
28
  "name",
 
 
29
  "adminState",
30
  "bbUnitSupportsEdge",
31
  "channel0Maio",
@@ -182,10 +189,35 @@ def process_trx_with_bts_name(file_path: str):
182
  "Signal"
183
  ].transform("sum")
184
 
185
- df_trx_bts_name = df_trx_bts_name[TRX_BTS_COLUMNS]
 
 
 
 
 
 
 
 
 
 
 
186
 
187
- # UtilsVars.all_db_dfs.append(df_trx_bts_name)
 
 
 
188
 
 
 
 
 
 
 
 
 
 
 
 
189
  return df_trx_bts_name
190
 
191
 
 
12
  "number_trx_per_cell",
13
  "number_trx_per_bcf",
14
  "number_trx_per_site",
15
+ "G1800 TRX Per BCF",
16
+ "G900 TRX Per BCF",
17
  ]
18
 
19
 
 
23
  "BTS",
24
  "TRX",
25
  "ID_BTS",
26
+ "ID_BCF",
27
  "number_trx_per_cell",
28
  "number_trx_per_bcf",
29
  "number_trx_per_site",
30
+ "G1800 TRX Per BCF",
31
+ "G900 TRX Per BCF",
32
  "code",
33
  "name",
34
+ "SectorId2",
35
+ "band",
36
  "adminState",
37
  "bbUnitSupportsEdge",
38
  "channel0Maio",
 
189
  "Signal"
190
  ].transform("sum")
191
 
192
+ # Avoir les TRX par bande et par secteur et BCF sous forme concaténée comme 5/3/3
193
+
194
+ trx_band_bcfid = (
195
+ df_trx_bts_name.groupby(["ID_BCF", "band", "SectorId2"])
196
+ .size()
197
+ .reset_index(name="count")
198
+ )
199
+
200
+ # Étape 2 : pivot avec valeurs manquantes = 0
201
+ pivot_df = trx_band_bcfid.pivot_table(
202
+ index=["ID_BCF", "band"], columns="SectorId2", values="count", fill_value=0
203
+ )
204
 
205
+ # Étape 3 : s’assurer que toutes les colonnes de secteur (1, 2, 3) existent
206
+ for s in [1, 2, 3]:
207
+ if s not in pivot_df.columns:
208
+ pivot_df[s] = 0
209
 
210
+ # 🟢 Conversion en entier AVANT concaténation
211
+ pivot_df[[1, 2, 3]] = pivot_df[[1, 2, 3]].astype(int)
212
+
213
+ pivot_df["concat"] = pivot_df[[1, 2, 3]].astype(str).agg("/".join, axis=1)
214
+
215
+ final = pivot_df["concat"].unstack().reset_index().rename_axis(None, axis=1)
216
+ final.columns = ["ID_BCF", "G1800 TRX Per BCF", "G900 TRX Per BCF"]
217
+
218
+ df_trx_bts_name = pd.merge(df_trx_bts_name, final, on="ID_BCF", how="left")
219
+
220
+ df_trx_bts_name = df_trx_bts_name[TRX_BTS_COLUMNS]
221
  return df_trx_bts_name
222
 
223
 
queries/process_wcdma.py CHANGED
@@ -161,7 +161,19 @@ def process_wcdma_data(file_path: str):
161
  df_wncel["code_wcel"] = (
162
  df_wncel[["CODE", "WNCEL"]].astype(str).apply("_".join, axis=1)
163
  )
 
164
  df_wncel = df_wncel[WNCEL_COLUMNS]
 
 
 
 
 
 
 
 
 
 
 
165
 
166
  # Merge dataframes
167
  df_wcel_bcf = pd.merge(df_wcel, df_wbts, on="ID_WBTS", how="left")
@@ -169,6 +181,7 @@ def process_wcdma_data(file_path: str):
169
  df_3g = pd.merge(df_wcel_bcf, df_wncel, on="code_wcel", how="left")
170
 
171
  df_3g = df_3g[WCEL_COLUMNS]
 
172
 
173
  df_physical_db = get_physical_db()
174
  df_3g = pd.merge(df_3g, df_band, on="code", how="left")
 
161
  df_wncel["code_wcel"] = (
162
  df_wncel[["CODE", "WNCEL"]].astype(str).apply("_".join, axis=1)
163
  )
164
+
165
  df_wncel = df_wncel[WNCEL_COLUMNS]
166
+ # Number of cell per Band per WBTS
167
+
168
+ df_id_wbts_band = df_wcel[["ID_WBTS", "band"]]
169
+ df_id_wbts_band_grouped = (
170
+ df_id_wbts_band.groupby(["ID_WBTS", "band"])
171
+ .size()
172
+ .unstack(fill_value=0)
173
+ .rename(columns=lambda x: f"Number of {x} cells on WBTS")
174
+ .reset_index()
175
+ )
176
+ print(df_id_wbts_band_grouped.head())
177
 
178
  # Merge dataframes
179
  df_wcel_bcf = pd.merge(df_wcel, df_wbts, on="ID_WBTS", how="left")
 
181
  df_3g = pd.merge(df_wcel_bcf, df_wncel, on="code_wcel", how="left")
182
 
183
  df_3g = df_3g[WCEL_COLUMNS]
184
+ df_3g = pd.merge(df_3g, df_id_wbts_band_grouped, on="ID_WBTS", how="left")
185
 
186
  df_physical_db = get_physical_db()
187
  df_3g = pd.merge(df_3g, df_band, on="code", how="left")