DavMelchi commited on
Commit
a365f87
·
1 Parent(s): 4da3a5c

IMPROVE MRBTS INFOS

Browse files
queries/process_gsm.py CHANGED
@@ -2,7 +2,7 @@ import pandas as pd
2
 
3
  from queries.process_mal import process_mal_data, process_mal_with_bts_name
4
  from queries.process_trx import process_trx_data, process_trx_with_bts_name
5
- from utils.config_band import config_band
6
  from utils.convert_to_excel import convert_dfs, save_dataframe
7
  from utils.kml_creator import generate_kml_from_df
8
  from utils.utils_vars import GsmAnalysisData, UtilsVars, get_physical_db
@@ -159,11 +159,13 @@ def process_gsm_data(file_path: str):
159
 
160
  # create band dataframe
161
  df_band = config_band(df_bts)
 
162
 
163
  # Merge dataframes
164
  df_bts_bcf = pd.merge(df_bcf, df_bts, on="ID_BCF", how="left")
165
  df_2g = pd.merge(df_bts_bcf, df_trx, on="ID_BTS", how="left")
166
  df_2g = pd.merge(df_2g, df_band, on="code", how="left")
 
167
  df_2g = pd.merge(df_2g, df_mal, on="ID_MAL", how="left")
168
  df_2g["TRX_TCH_VS_MAL"] = df_2g.apply(
169
  lambda row: compare_trx_tch_versus_mal(row["TRX_TCH"], row["MAL_TCH"]), axis=1
 
2
 
3
  from queries.process_mal import process_mal_data, process_mal_with_bts_name
4
  from queries.process_trx import process_trx_data, process_trx_with_bts_name
5
+ from utils.config_band import bcf_band, config_band
6
  from utils.convert_to_excel import convert_dfs, save_dataframe
7
  from utils.kml_creator import generate_kml_from_df
8
  from utils.utils_vars import GsmAnalysisData, UtilsVars, get_physical_db
 
159
 
160
  # create band dataframe
161
  df_band = config_band(df_bts)
162
+ df_bcf_band = bcf_band(df_bts)
163
 
164
  # Merge dataframes
165
  df_bts_bcf = pd.merge(df_bcf, df_bts, on="ID_BCF", how="left")
166
  df_2g = pd.merge(df_bts_bcf, df_trx, on="ID_BTS", how="left")
167
  df_2g = pd.merge(df_2g, df_band, on="code", how="left")
168
+ df_2g = pd.merge(df_2g, df_bcf_band, on="ID_BCF", how="left")
169
  df_2g = pd.merge(df_2g, df_mal, on="ID_MAL", how="left")
170
  df_2g["TRX_TCH_VS_MAL"] = df_2g.apply(
171
  lambda row: compare_trx_tch_versus_mal(row["TRX_TCH"], row["MAL_TCH"]), axis=1
queries/process_lte.py CHANGED
@@ -1,7 +1,7 @@
1
  import numpy as np
2
  import pandas as pd
3
 
4
- from utils.config_band import config_band
5
  from utils.convert_to_excel import convert_dfs, save_dataframe
6
  from utils.kml_creator import generate_kml_from_df
7
  from utils.utils_vars import (
@@ -177,6 +177,7 @@ def process_lte_data(file_path: str):
177
 
178
  # create band dataframe
179
  df_band = config_band(df_lncel)
 
180
 
181
  # Process LNBTS data
182
  df_lnbts = dfs["LNBTS"]
@@ -190,6 +191,7 @@ def process_lte_data(file_path: str):
190
  # Merge dataframes
191
  df_lncel_lnbts = pd.merge(df_lncel, df_lnbts, on="ID_LNBTS", how="left")
192
  df_lncel_lnbts = pd.merge(df_lncel_lnbts, df_band, on="code", how="left")
 
193
 
194
  df_physical_db = get_physical_db()
195
  df_lncel_lnbts = pd.merge(
 
1
  import numpy as np
2
  import pandas as pd
3
 
4
+ from utils.config_band import config_band, lte_mrbts_band
5
  from utils.convert_to_excel import convert_dfs, save_dataframe
6
  from utils.kml_creator import generate_kml_from_df
7
  from utils.utils_vars import (
 
177
 
178
  # create band dataframe
179
  df_band = config_band(df_lncel)
180
+ df_mrbts_band = lte_mrbts_band(df_lncel)
181
 
182
  # Process LNBTS data
183
  df_lnbts = dfs["LNBTS"]
 
191
  # Merge dataframes
192
  df_lncel_lnbts = pd.merge(df_lncel, df_lnbts, on="ID_LNBTS", how="left")
193
  df_lncel_lnbts = pd.merge(df_lncel_lnbts, df_band, on="code", how="left")
194
+ df_lncel_lnbts = pd.merge(df_lncel_lnbts, df_mrbts_band, on="MRBTS", how="left")
195
 
196
  df_physical_db = get_physical_db()
197
  df_lncel_lnbts = pd.merge(
queries/process_mrbts.py CHANGED
@@ -2,10 +2,12 @@ import pandas as pd
2
 
3
  from utils.convert_to_excel import convert_dfs
4
  from utils.extract_code import extract_code_from_mrbts
5
- from utils.utils_vars import UtilsVars
6
 
7
 
8
- def process_mrbts_data(file_path: str) -> pd.DataFrame:
 
 
9
  """
10
  Process data from the specified file path.
11
 
@@ -14,11 +16,12 @@ def process_mrbts_data(file_path: str) -> pd.DataFrame:
14
  """
15
  dfs = pd.read_excel(
16
  file_path,
17
- sheet_name=["MRBTS"],
18
  engine="calamine",
19
  skiprows=[0],
20
  )
21
 
 
22
  df_mrbts = dfs["MRBTS"]
23
  df_mrbts.columns = df_mrbts.columns.str.replace(r"[ ]", "", regex=True)
24
 
@@ -29,9 +32,67 @@ def process_mrbts_data(file_path: str) -> pd.DataFrame:
29
  df_mrbts.loc[:, "code"] = df_mrbts["MRBTS"].apply(extract_code_from_mrbts)
30
  df_mrbts = df_mrbts[["MRBTS", "code", "name", "btsName"]]
31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  UtilsVars.all_db_dfs.append(df_mrbts)
33
  UtilsVars.all_db_dfs_names.append("MRBTS")
34
- return df_mrbts
35
 
36
 
37
  def process_mrbts_data_to_excel(file_path: str) -> None:
@@ -41,5 +102,7 @@ def process_mrbts_data_to_excel(file_path: str) -> None:
41
  Args:
42
  file_path (str): The path to the file.
43
  """
44
- mrbts_df = process_mrbts_data(file_path)
45
- UtilsVars.final_mrbts_database = convert_dfs([mrbts_df], ["MRBTS"])
 
 
 
2
 
3
  from utils.convert_to_excel import convert_dfs
4
  from utils.extract_code import extract_code_from_mrbts
5
+ from utils.utils_vars import UtilsVars, clean_bands
6
 
7
 
8
+ def process_mrbts_data(
9
+ file_path: str,
10
+ ) -> tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame]:
11
  """
12
  Process data from the specified file path.
13
 
 
16
  """
17
  dfs = pd.read_excel(
18
  file_path,
19
+ sheet_name=["MRBTS", "GNBCF", "WNBTS", "ALD"],
20
  engine="calamine",
21
  skiprows=[0],
22
  )
23
 
24
+ # MRBTS
25
  df_mrbts = dfs["MRBTS"]
26
  df_mrbts.columns = df_mrbts.columns.str.replace(r"[ ]", "", regex=True)
27
 
 
32
  df_mrbts.loc[:, "code"] = df_mrbts["MRBTS"].apply(extract_code_from_mrbts)
33
  df_mrbts = df_mrbts[["MRBTS", "code", "name", "btsName"]]
34
 
35
+ # GNBCF
36
+ df_gnbcf = dfs["GNBCF"]
37
+ df_gnbcf.columns = df_gnbcf.columns.str.replace(r"[ ]", "", regex=True)
38
+ df_gnbcf = df_gnbcf[["MRBTS", "bscId", "bcfId"]]
39
+ df_gnbcf["ID_BCF"] = (
40
+ (df_gnbcf[["bscId", "bcfId"]]).astype(str).apply("_".join, axis=1)
41
+ )
42
+
43
+ df_gnbcf = df_gnbcf[["MRBTS", "ID_BCF"]]
44
+
45
+ # WNBTS
46
+ df_wnbts = dfs["WNBTS"]
47
+ df_wnbts.columns = df_wnbts.columns.str.replace(r"[ ]", "", regex=True)
48
+ df_wnbts = df_wnbts[["MRBTS", "wbtsId"]]
49
+ df_wnbts = df_wnbts.rename(columns={"wbtsId": "WBTS"})
50
+
51
+ # ALD
52
+ df_ald = dfs["ALD"]
53
+ df_ald.columns = df_ald.columns.str.replace(r"[ ]", "", regex=True)
54
+ df_ald = df_ald[["MRBTS", "productCode"]]
55
+ df_ald = df_ald.drop_duplicates(subset=["MRBTS"], keep="first")
56
+
57
+ df_mrbts = pd.merge(df_mrbts, df_gnbcf, on="MRBTS", how="left")
58
+ df_mrbts = pd.merge(df_mrbts, df_wnbts, on="MRBTS", how="left")
59
+ df_mrbts = pd.merge(df_mrbts, df_ald, on="MRBTS", how="left")
60
+
61
+ ##################################################################################"""
62
+ ###################################################################################
63
+
64
+ gsm_df: pd.DataFrame = UtilsVars.all_db_dfs[0]
65
+ wcdma_df: pd.DataFrame = UtilsVars.all_db_dfs[3]
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
+
82
+ df_mrbts = pd.merge(df_mrbts, gsm_df, on="ID_BCF", how="left")
83
+ df_mrbts = pd.merge(df_mrbts, wcdma_df, on="WBTS", how="left")
84
+ df_mrbts = pd.merge(df_mrbts, lte_df, on="MRBTS", how="left")
85
+
86
+ df_mrbts["mrbts_config_band"] = (
87
+ df_mrbts[["bcf_config_band", "wbts_config_band", "lte_config_band"]]
88
+ .astype(str)
89
+ .apply("/".join, axis=1)
90
+ )
91
+ df_mrbts["mrbts_config_band"] = df_mrbts["mrbts_config_band"].apply(clean_bands)
92
+
93
  UtilsVars.all_db_dfs.append(df_mrbts)
94
  UtilsVars.all_db_dfs_names.append("MRBTS")
95
+ return df_mrbts, df_gnbcf, df_wnbts
96
 
97
 
98
  def process_mrbts_data_to_excel(file_path: str) -> None:
 
102
  Args:
103
  file_path (str): The path to the file.
104
  """
105
+ mrbts_df, gnbcf_df, wnbts_df = process_mrbts_data(file_path)
106
+ UtilsVars.final_mrbts_database = convert_dfs(
107
+ [mrbts_df, gnbcf_df, wnbts_df], ["MRBTS", "GNBCF", "WNBTS"]
108
+ )
queries/process_site_db.py CHANGED
@@ -1,6 +1,6 @@
1
  import pandas as pd
2
 
3
- from utils.utils_vars import SiteAnalysisData, UtilsVars
4
 
5
  GSM_COLUMNS = [
6
  "code",
@@ -57,13 +57,6 @@ CODE_COLUMNS = [
57
  ]
58
 
59
 
60
- def clean_bands(bands):
61
- if pd.isna(bands):
62
- return None
63
- parts = [p for p in bands.split("/") if p != "nan"]
64
- return "/".join(parts) if parts else None
65
-
66
-
67
  def site_db():
68
  gsm_df: pd.DataFrame = UtilsVars.all_db_dfs[0]
69
  wcdma_df: pd.DataFrame = UtilsVars.all_db_dfs[3]
 
1
  import pandas as pd
2
 
3
+ from utils.utils_vars import SiteAnalysisData, UtilsVars, clean_bands
4
 
5
  GSM_COLUMNS = [
6
  "code",
 
57
  ]
58
 
59
 
 
 
 
 
 
 
 
60
  def site_db():
61
  gsm_df: pd.DataFrame = UtilsVars.all_db_dfs[0]
62
  wcdma_df: pd.DataFrame = UtilsVars.all_db_dfs[3]
queries/process_wcdma.py CHANGED
@@ -1,6 +1,6 @@
1
  import pandas as pd
2
 
3
- from utils.config_band import config_band
4
  from utils.convert_to_excel import convert_dfs, save_dataframe
5
  from utils.extract_code import extract_code_from_mrbts
6
  from utils.kml_creator import generate_kml_from_df
@@ -145,6 +145,7 @@ def process_wcdma_data(file_path: str):
145
 
146
  # create config_band dataframe
147
  df_band = config_band(df_wcel)
 
148
 
149
  # Process WBTS data
150
  df_wbts = dfs["WBTS"]
@@ -171,6 +172,7 @@ def process_wcdma_data(file_path: str):
171
 
172
  df_physical_db = get_physical_db()
173
  df_3g = pd.merge(df_3g, df_band, on="code", how="left")
 
174
  df_3g = pd.merge(df_3g, df_physical_db, on="Code_Sector", how="left")
175
  # Save dataframes
176
  # save_dataframe(df_wcel, "wcel")
 
1
  import pandas as pd
2
 
3
+ from utils.config_band import config_band, wbts_band
4
  from utils.convert_to_excel import convert_dfs, save_dataframe
5
  from utils.extract_code import extract_code_from_mrbts
6
  from utils.kml_creator import generate_kml_from_df
 
145
 
146
  # create config_band dataframe
147
  df_band = config_band(df_wcel)
148
+ df_wbts_band = wbts_band(df_wcel)
149
 
150
  # Process WBTS data
151
  df_wbts = dfs["WBTS"]
 
172
 
173
  df_physical_db = get_physical_db()
174
  df_3g = pd.merge(df_3g, df_band, on="code", how="left")
175
+ df_3g = pd.merge(df_3g, df_wbts_band, on="WBTS", how="left")
176
  df_3g = pd.merge(df_3g, df_physical_db, on="Code_Sector", how="left")
177
  # Save dataframes
178
  # save_dataframe(df_wcel, "wcel")
utils/config_band.py CHANGED
@@ -30,3 +30,96 @@ def config_band(df: pd.DataFrame) -> pd.DataFrame:
30
  df_band.rename(columns={"band": "site_config_band"}, inplace=True)
31
 
32
  return df_band
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  df_band.rename(columns={"band": "site_config_band"}, inplace=True)
31
 
32
  return df_band
33
+
34
+
35
+ def bcf_band(df: pd.DataFrame) -> pd.DataFrame:
36
+ """
37
+ Create a dataframe that contains the bcf configuration band for each bcf ID.
38
+
39
+ Parameters
40
+ ----------
41
+ df : pd.DataFrame
42
+ The dataframe containing the bcf information, with columns "ID" and "band"
43
+
44
+ Returns
45
+ -------
46
+ pd.DataFrame
47
+ The dataframe containing the bcf configuration band for each bcf ID, with columns "ID" and "bcf_config_band"
48
+ """
49
+ df_band = df[["ID_BCF", "band"]].copy()
50
+ df_band["ID"] = df_band[["ID_BCF", "band"]].astype(str).apply("_".join, axis=1)
51
+ # remove duplicates ID
52
+ df_band = df_band.drop_duplicates(subset=["ID"])
53
+ df_band = df_band[["ID_BCF", "band"]]
54
+ df_band["band"] = df_band["band"].fillna("empty")
55
+ df_band = (
56
+ df_band.groupby("ID_BCF")["band"]
57
+ .apply(lambda x: "/".join(sorted(x)))
58
+ .reset_index()
59
+ )
60
+ # rename band to config
61
+ df_band.rename(columns={"band": "bcf_config_band"}, inplace=True)
62
+
63
+ return df_band
64
+
65
+
66
+ def wbts_band(df: pd.DataFrame) -> pd.DataFrame:
67
+ """
68
+ Create a dataframe that contains the wbts configuration band for each wbts ID.
69
+
70
+ Parameters
71
+ ----------
72
+ df : pd.DataFrame
73
+ The dataframe containing the wbts information, with columns "ID" and "band"
74
+
75
+ Returns
76
+ -------
77
+ pd.DataFrame
78
+ The dataframe containing the wbts configuration band for each wbts ID, with columns "ID" and "wbts_config_band"
79
+ """
80
+ df_band = df[["WBTS", "band"]].copy()
81
+ df_band["ID"] = df_band[["WBTS", "band"]].astype(str).apply("_".join, axis=1)
82
+ # remove duplicates ID
83
+ df_band = df_band.drop_duplicates(subset=["ID"])
84
+ df_band = df_band[["WBTS", "band"]]
85
+ df_band["band"] = df_band["band"].fillna("empty")
86
+ df_band = (
87
+ df_band.groupby("WBTS")["band"]
88
+ .apply(lambda x: "/".join(sorted(x)))
89
+ .reset_index()
90
+ )
91
+ # rename band to config
92
+ df_band.rename(columns={"band": "wbts_config_band"}, inplace=True)
93
+
94
+ return df_band
95
+
96
+
97
+ def lte_mrbts_band(df: pd.DataFrame) -> pd.DataFrame:
98
+ """
99
+ Create a dataframe that contains the mrbts configuration band for each mrbts ID.
100
+
101
+ Parameters
102
+ ----------
103
+ df : pd.DataFrame
104
+ The dataframe containing the mrbts information, with columns "ID" and "band"
105
+
106
+ Returns
107
+ -------
108
+ pd.DataFrame
109
+ The dataframe containing the mrbts configuration band for each mrbts ID, with columns "ID" and "mrbts_config_band"
110
+ """
111
+ df_band = df[["MRBTS", "band"]].copy()
112
+ df_band["ID"] = df_band[["MRBTS", "band"]].astype(str).apply("_".join, axis=1)
113
+ # remove duplicates ID
114
+ df_band = df_band.drop_duplicates(subset=["ID"])
115
+ df_band = df_band[["MRBTS", "band"]]
116
+ df_band["band"] = df_band["band"].fillna("empty")
117
+ df_band = (
118
+ df_band.groupby("MRBTS")["band"]
119
+ .apply(lambda x: "/".join(sorted(x)))
120
+ .reset_index()
121
+ )
122
+ # rename band to config
123
+ df_band.rename(columns={"band": "lte_config_band"}, inplace=True)
124
+
125
+ return df_band
utils/utils_vars.py CHANGED
@@ -139,6 +139,13 @@ def get_band(text):
139
  return np.nan # or return None
140
 
141
 
 
 
 
 
 
 
 
142
  class GsmAnalysisData:
143
  total_number_of_bsc = 0
144
  total_number_of_cell = 0
 
139
  return np.nan # or return None
140
 
141
 
142
+ def clean_bands(bands):
143
+ if pd.isna(bands):
144
+ return None
145
+ parts = [p for p in bands.split("/") if p != "nan"]
146
+ return "/".join(parts) if parts else None
147
+
148
+
149
  class GsmAnalysisData:
150
  total_number_of_bsc = 0
151
  total_number_of_cell = 0