Add Analitic dashboards for each database (Count of NE)
Browse files- README.md +2 -1
- apps/database_page.py +25 -3
- apps/dump_analysis.py +311 -0
- queries/process_all_db.py +22 -6
- queries/process_gsm.py +33 -2
- queries/process_lte.py +40 -2
- queries/process_small_bts.py +4 -1
- queries/process_wcdma.py +34 -2
- utils/check_sheet_exist.py +4 -0
- utils/utils_vars.py +56 -0
README.md
CHANGED
@@ -43,6 +43,7 @@ You can access the hosted version of the app at [https://davmelchi-db-query.hf.s
|
|
43 |
- [x] Add TRX database
|
44 |
- [x] Add MRBTS with code
|
45 |
- [x] Check TCH from MAL sheet
|
46 |
-
- [
|
|
|
47 |
- [ ] Add the ability to select columns
|
48 |
- [ ] Error handling
|
|
|
43 |
- [x] Add TRX database
|
44 |
- [x] Add MRBTS with code
|
45 |
- [x] Check TCH from MAL sheet
|
46 |
+
- [x] Add Analitic dashboards for each database (Count of NE)
|
47 |
+
- [ ] Improve Dashboard
|
48 |
- [ ] Add the ability to select columns
|
49 |
- [ ] Error handling
|
apps/database_page.py
CHANGED
@@ -3,7 +3,8 @@ from datetime import datetime
|
|
3 |
|
4 |
import streamlit as st
|
5 |
|
6 |
-
from
|
|
|
7 |
from queries.process_gsm import process_gsm_data_to_excel
|
8 |
from queries.process_lte import process_lte_data_to_excel
|
9 |
|
@@ -13,8 +14,8 @@ from queries.process_neighbors import process_neighbors_data_to_excel
|
|
13 |
|
14 |
# from queries.process_trx import process_trx_with_bts_name_data_to_excel
|
15 |
from queries.process_wcdma import process_wcdma_data_to_excel
|
16 |
-
from utils.check_sheet_exist import Technology, execute_checks_sheets_exist
|
17 |
-
from utils.utils_vars import UtilsVars
|
18 |
|
19 |
st.title("Database processing")
|
20 |
|
@@ -77,6 +78,17 @@ def execute_process_all_tech_db(uploaded_file):
|
|
77 |
download_button("All")
|
78 |
|
79 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
col1, col2, col3, col4 = st.columns(4)
|
81 |
col5, col6, col7, col8 = st.columns(4)
|
82 |
if uploaded_file is not None:
|
@@ -112,6 +124,7 @@ if uploaded_file is not None:
|
|
112 |
and Technology.mrbts == True
|
113 |
and Technology.mal == True
|
114 |
):
|
|
|
115 |
with col1:
|
116 |
st.button(
|
117 |
"Generate All DBs",
|
@@ -170,3 +183,12 @@ if uploaded_file is not None:
|
|
170 |
)
|
171 |
except Exception as e:
|
172 |
st.error(f"Error: {e}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
4 |
import streamlit as st
|
5 |
|
6 |
+
from apps.dump_analysis import dump_analysis_space
|
7 |
+
from queries.process_all_db import process_all_tech_db, process_all_tech_db_with_stats
|
8 |
from queries.process_gsm import process_gsm_data_to_excel
|
9 |
from queries.process_lte import process_lte_data_to_excel
|
10 |
|
|
|
14 |
|
15 |
# from queries.process_trx import process_trx_with_bts_name_data_to_excel
|
16 |
from queries.process_wcdma import process_wcdma_data_to_excel
|
17 |
+
from utils.check_sheet_exist import DumpType, Technology, execute_checks_sheets_exist
|
18 |
+
from utils.utils_vars import GsmAnalysisData, UtilsVars, WcdmaAnalysisData
|
19 |
|
20 |
st.title("Database processing")
|
21 |
|
|
|
78 |
download_button("All")
|
79 |
|
80 |
|
81 |
+
def execute_process_all_tech_db_with_stats(uploaded_file):
|
82 |
+
if uploaded_file is not None:
|
83 |
+
start_time = time.time()
|
84 |
+
process_all_tech_db_with_stats(uploaded_file)
|
85 |
+
execution_time = time.time() - start_time
|
86 |
+
st.write(
|
87 |
+
f"All databases are generated. Execution time: {execution_time:.2f} seconds"
|
88 |
+
)
|
89 |
+
download_button("All")
|
90 |
+
|
91 |
+
|
92 |
col1, col2, col3, col4 = st.columns(4)
|
93 |
col5, col6, col7, col8 = st.columns(4)
|
94 |
if uploaded_file is not None:
|
|
|
124 |
and Technology.mrbts == True
|
125 |
and Technology.mal == True
|
126 |
):
|
127 |
+
DumpType.full_dump = True
|
128 |
with col1:
|
129 |
st.button(
|
130 |
"Generate All DBs",
|
|
|
183 |
)
|
184 |
except Exception as e:
|
185 |
st.error(f"Error: {e}")
|
186 |
+
|
187 |
+
|
188 |
+
######################## ANALYTICS AND STATS ####################################
|
189 |
+
|
190 |
+
if uploaded_file is not None:
|
191 |
+
if DumpType.full_dump == True:
|
192 |
+
if st.button("Generate All DBs and Show Stats"):
|
193 |
+
execute_process_all_tech_db_with_stats(uploaded_file)
|
194 |
+
dump_analysis_space()
|
apps/dump_analysis.py
ADDED
@@ -0,0 +1,311 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
from utils.utils_vars import (
|
4 |
+
GsmAnalysisData,
|
5 |
+
LteFddAnalysisData,
|
6 |
+
LteTddAnalysisData,
|
7 |
+
WcdmaAnalysisData,
|
8 |
+
)
|
9 |
+
|
10 |
+
":red[**L2300 Parameters:**]"
|
11 |
+
|
12 |
+
|
13 |
+
def dump_analysis_space():
|
14 |
+
|
15 |
+
st.title("ANALYTICS DATA")
|
16 |
+
|
17 |
+
####################### GSM ANALYTICS DATA #######################################
|
18 |
+
st.subheader(":blue[GSM ANALYTICS DATA]")
|
19 |
+
|
20 |
+
(
|
21 |
+
number_of_bsc_col,
|
22 |
+
number_of_cell_col,
|
23 |
+
number_of_site_col,
|
24 |
+
number_of_empty_bts_name_col,
|
25 |
+
number_of_empty_bcf_name_col,
|
26 |
+
number_of_cell_with_empty_bcch_col,
|
27 |
+
) = st.columns((1, 1, 1, 1, 1, 1))
|
28 |
+
|
29 |
+
with number_of_bsc_col:
|
30 |
+
st.metric("Number of BSC", GsmAnalysisData.total_number_of_bsc)
|
31 |
+
with number_of_cell_col:
|
32 |
+
st.metric("Number of Cell", GsmAnalysisData.total_number_of_cell)
|
33 |
+
with number_of_site_col:
|
34 |
+
st.metric("Number of Site", GsmAnalysisData.number_of_site)
|
35 |
+
with number_of_empty_bts_name_col:
|
36 |
+
st.metric("Empty BTS name", GsmAnalysisData.number_of_bts_name_empty)
|
37 |
+
with number_of_empty_bcf_name_col:
|
38 |
+
st.metric("Empty BCF name", GsmAnalysisData.number_of_bcf_name_empty)
|
39 |
+
with number_of_cell_with_empty_bcch_col:
|
40 |
+
st.metric("Empty BCCH", GsmAnalysisData.number_of_bcch_empty)
|
41 |
+
|
42 |
+
st.markdown("***")
|
43 |
+
st.markdown(":blue[**Number of TRX per BSC**]")
|
44 |
+
number_of_trx_per_bsc_data_col, number_of_trx_per_bsc_plot_col = st.columns(2)
|
45 |
+
with number_of_trx_per_bsc_data_col:
|
46 |
+
st.write(GsmAnalysisData.number_of_trx_per_bsc)
|
47 |
+
with number_of_trx_per_bsc_plot_col:
|
48 |
+
st.bar_chart(GsmAnalysisData.number_of_trx_per_bsc)
|
49 |
+
|
50 |
+
st.markdown("***")
|
51 |
+
st.markdown(":blue[**Number of Site per BSC**]")
|
52 |
+
number_of_site_per_bsc_data_col, number_of_site_per_bsc_plot_col = st.columns(2)
|
53 |
+
with number_of_site_per_bsc_data_col:
|
54 |
+
st.write(GsmAnalysisData.number_of_site_per_bsc)
|
55 |
+
with number_of_site_per_bsc_plot_col:
|
56 |
+
st.bar_chart(GsmAnalysisData.number_of_site_per_bsc)
|
57 |
+
|
58 |
+
st.markdown("***")
|
59 |
+
st.markdown(":blue[**Number of Cell per BSC**]")
|
60 |
+
number_of_cell_per_bsc_data_col, number_of_cell_per_bsc_plot_col = st.columns(2)
|
61 |
+
with number_of_cell_per_bsc_data_col:
|
62 |
+
st.write(GsmAnalysisData.number_of_cell_per_bsc)
|
63 |
+
with number_of_cell_per_bsc_plot_col:
|
64 |
+
st.bar_chart(GsmAnalysisData.number_of_cell_per_bsc)
|
65 |
+
|
66 |
+
st.markdown("***")
|
67 |
+
st.markdown(":blue[**BTS AdminState Distribution**]")
|
68 |
+
bts_administate_distribution_data_col, bts_administate_distribution_plot_col = (
|
69 |
+
st.columns(2)
|
70 |
+
)
|
71 |
+
with bts_administate_distribution_data_col:
|
72 |
+
st.write(GsmAnalysisData.bts_administate_distribution)
|
73 |
+
with bts_administate_distribution_plot_col:
|
74 |
+
st.bar_chart(GsmAnalysisData.bts_administate_distribution)
|
75 |
+
|
76 |
+
st.markdown("***")
|
77 |
+
st.markdown(":blue[**Number of Cell per LAC**]")
|
78 |
+
number_of_cell_per_lac_data_col, number_of_cell_per_lac_plot_col = st.columns(2)
|
79 |
+
with number_of_cell_per_lac_data_col:
|
80 |
+
st.write(GsmAnalysisData.number_of_cell_per_lac)
|
81 |
+
with number_of_cell_per_lac_plot_col:
|
82 |
+
st.bar_chart(GsmAnalysisData.number_of_cell_per_lac)
|
83 |
+
|
84 |
+
st.markdown("***")
|
85 |
+
st.markdown(":blue[**TRX AdminState Distribution**]")
|
86 |
+
trx_administate_distribution_data_col, trx_administate_distribution_plot_col = (
|
87 |
+
st.columns(2)
|
88 |
+
)
|
89 |
+
with trx_administate_distribution_data_col:
|
90 |
+
st.write(GsmAnalysisData.trx_administate_distribution)
|
91 |
+
with trx_administate_distribution_plot_col:
|
92 |
+
st.bar_chart(GsmAnalysisData.trx_administate_distribution)
|
93 |
+
|
94 |
+
####################### WCDMA ANALYTICS DATA #######################################
|
95 |
+
st.subheader(":green[WCDMA ANALYTICS DATA]")
|
96 |
+
|
97 |
+
(
|
98 |
+
number_of_rnc_col,
|
99 |
+
number_of_cell_col,
|
100 |
+
number_of_site_col,
|
101 |
+
empty_wbts_name_col,
|
102 |
+
empty_wcel_name_col,
|
103 |
+
) = st.columns(5)
|
104 |
+
|
105 |
+
with number_of_rnc_col:
|
106 |
+
st.metric("Number of RNC", WcdmaAnalysisData.total_number_of_rnc)
|
107 |
+
with number_of_cell_col:
|
108 |
+
st.metric("Number of Cell", WcdmaAnalysisData.total_number_of_wcel)
|
109 |
+
with number_of_site_col:
|
110 |
+
st.metric("Number of Site", WcdmaAnalysisData.number_of_site)
|
111 |
+
with empty_wbts_name_col:
|
112 |
+
st.metric("Empty WBTS name", WcdmaAnalysisData.number_of_empty_wbts_name)
|
113 |
+
with empty_wcel_name_col:
|
114 |
+
st.metric("Empty WCEL name", WcdmaAnalysisData.number_of_empty_wcel_name)
|
115 |
+
|
116 |
+
st.markdown("***")
|
117 |
+
|
118 |
+
st.markdown(":green[**Number of Cell per RNC**]")
|
119 |
+
number_of_cell_per_rnc_data_col, number_of_cell_per_rnc_plot_col = st.columns(2)
|
120 |
+
with number_of_cell_per_rnc_data_col:
|
121 |
+
st.write(WcdmaAnalysisData.number_of_cell_per_rnc)
|
122 |
+
with number_of_cell_per_rnc_plot_col:
|
123 |
+
st.bar_chart(WcdmaAnalysisData.number_of_cell_per_rnc)
|
124 |
+
|
125 |
+
st.markdown("***")
|
126 |
+
|
127 |
+
st.markdown(":green[**Number of Site per RNC**]")
|
128 |
+
number_of_site_per_rnc_data_col, number_of_site_per_rnc_plot_col = st.columns(2)
|
129 |
+
with number_of_site_per_rnc_data_col:
|
130 |
+
st.write(WcdmaAnalysisData.number_of_site_per_rnc)
|
131 |
+
with number_of_site_per_rnc_plot_col:
|
132 |
+
st.bar_chart(WcdmaAnalysisData.number_of_site_per_rnc)
|
133 |
+
|
134 |
+
st.markdown("***")
|
135 |
+
|
136 |
+
st.markdown(":green[**Number of Cell per LAC**]")
|
137 |
+
number_of_cell_per_lac_data_col, number_of_cell_per_lac_plot_col = st.columns(2)
|
138 |
+
with number_of_cell_per_lac_data_col:
|
139 |
+
st.write(WcdmaAnalysisData.number_of_cell_per_lac)
|
140 |
+
with number_of_cell_per_lac_plot_col:
|
141 |
+
st.bar_chart(WcdmaAnalysisData.number_of_cell_per_lac)
|
142 |
+
|
143 |
+
st.markdown("***")
|
144 |
+
st.markdown(":green[**WCEL AdminState Distribution**]")
|
145 |
+
wcel_administate_distribution_data_col, wcel_administate_distribution_plot_col = (
|
146 |
+
st.columns(2)
|
147 |
+
)
|
148 |
+
with wcel_administate_distribution_data_col:
|
149 |
+
st.write(WcdmaAnalysisData.wcel_administate_distribution)
|
150 |
+
with wcel_administate_distribution_plot_col:
|
151 |
+
st.bar_chart(WcdmaAnalysisData.wcel_administate_distribution)
|
152 |
+
|
153 |
+
####################### LTE FDD ANALYTICS DATA #######################################
|
154 |
+
st.subheader(":red[LTE FDD ANALYTICS DATA]")
|
155 |
+
|
156 |
+
(
|
157 |
+
fdd_total_number_of_lncel_col,
|
158 |
+
fdd_total_number_of_site_col,
|
159 |
+
fdd_number_of_empty_lncel_name_col,
|
160 |
+
fdd_number_of_empty_lncel_cellname_col,
|
161 |
+
fdd_number_of_empty_lnbts_name_col,
|
162 |
+
) = st.columns(5)
|
163 |
+
|
164 |
+
with fdd_total_number_of_lncel_col:
|
165 |
+
st.metric("Nbr of Lncel", LteFddAnalysisData.total_number_of_lncel)
|
166 |
+
with fdd_total_number_of_site_col:
|
167 |
+
st.metric("Nbr of Site", LteFddAnalysisData.total_number_of_site)
|
168 |
+
with fdd_number_of_empty_lncel_name_col:
|
169 |
+
st.metric("Empty name", LteFddAnalysisData.number_of_empty_lncel_name)
|
170 |
+
with fdd_number_of_empty_lncel_cellname_col:
|
171 |
+
st.metric("Empty Cellname", LteFddAnalysisData.number_of_empty_lncel_cellname)
|
172 |
+
with fdd_number_of_empty_lnbts_name_col:
|
173 |
+
st.metric("Empty LNBTS name", LteFddAnalysisData.number_of_empty_lnbts_name)
|
174 |
+
|
175 |
+
st.markdown("***")
|
176 |
+
|
177 |
+
st.markdown(":red[**Number of Cell per Band**]")
|
178 |
+
fdd_number_of_cell_per_band_data_col, fdd_number_of_cell_per_band_plot_col = (
|
179 |
+
st.columns(2)
|
180 |
+
)
|
181 |
+
|
182 |
+
with fdd_number_of_cell_per_band_data_col:
|
183 |
+
st.write(LteFddAnalysisData.number_of_cell_per_band)
|
184 |
+
with fdd_number_of_cell_per_band_plot_col:
|
185 |
+
st.bar_chart(LteFddAnalysisData.number_of_cell_per_band)
|
186 |
+
|
187 |
+
st.markdown("***")
|
188 |
+
|
189 |
+
st.markdown(":red[**PhyCellId Distribution**]")
|
190 |
+
fdd_phycellid_distribution_data_col, fdd_phycellid_distribution_plot_col = (
|
191 |
+
st.columns(2)
|
192 |
+
)
|
193 |
+
with fdd_phycellid_distribution_data_col:
|
194 |
+
st.write(LteFddAnalysisData.phycellid_distribution)
|
195 |
+
with fdd_phycellid_distribution_plot_col:
|
196 |
+
st.bar_chart(LteFddAnalysisData.phycellid_distribution)
|
197 |
+
|
198 |
+
st.markdown("***")
|
199 |
+
|
200 |
+
st.markdown(":red[**Root Sequence Index Distribution**]")
|
201 |
+
(
|
202 |
+
fdd_rootsequenceindex_distribution_data_col,
|
203 |
+
fdd_rootsequenceindex_distribution_plot_col,
|
204 |
+
) = st.columns(2)
|
205 |
+
with fdd_rootsequenceindex_distribution_data_col:
|
206 |
+
st.write(LteFddAnalysisData.rootsequenceindex_distribution)
|
207 |
+
with fdd_rootsequenceindex_distribution_plot_col:
|
208 |
+
st.bar_chart(LteFddAnalysisData.rootsequenceindex_distribution)
|
209 |
+
|
210 |
+
st.markdown("***")
|
211 |
+
|
212 |
+
st.markdown(":red[**LNCel Administate Distribution**]")
|
213 |
+
(
|
214 |
+
fdd_lncel_administate_distribution_data_col,
|
215 |
+
fdd_lncel_administate_distribution_plot_col,
|
216 |
+
) = st.columns(2)
|
217 |
+
with fdd_lncel_administate_distribution_data_col:
|
218 |
+
st.write(LteFddAnalysisData.lncel_administate_distribution)
|
219 |
+
with fdd_lncel_administate_distribution_plot_col:
|
220 |
+
st.bar_chart(LteFddAnalysisData.lncel_administate_distribution)
|
221 |
+
|
222 |
+
st.markdown("***")
|
223 |
+
|
224 |
+
st.markdown(":red[**Number of Cell per TAC**]")
|
225 |
+
fdd_number_of_cell_per_tac_data_col, fdd_number_of_cell_per_tac_plot_col = (
|
226 |
+
st.columns(2)
|
227 |
+
)
|
228 |
+
with fdd_number_of_cell_per_tac_data_col:
|
229 |
+
st.write(LteFddAnalysisData.number_of_cell_per_tac)
|
230 |
+
with fdd_number_of_cell_per_tac_plot_col:
|
231 |
+
st.bar_chart(LteFddAnalysisData.number_of_cell_per_tac)
|
232 |
+
|
233 |
+
####################### LTE TDD ANALYTICS DATA #######################################
|
234 |
+
st.subheader(":orange[LTE TDD ANALYTICS DATA]")
|
235 |
+
|
236 |
+
(
|
237 |
+
tdd_total_number_of_lncel_col,
|
238 |
+
tdd_total_number_of_site_col,
|
239 |
+
tdd_number_of_empty_lncel_name_col,
|
240 |
+
tdd_number_of_empty_lncel_cellname_col,
|
241 |
+
tdd_number_of_empty_lnbts_name_col,
|
242 |
+
) = st.columns(5)
|
243 |
+
|
244 |
+
with tdd_total_number_of_lncel_col:
|
245 |
+
st.metric("Nbr of Lncel", LteTddAnalysisData.total_number_of_lncel)
|
246 |
+
with tdd_total_number_of_site_col:
|
247 |
+
st.metric("Nbr of Site", LteTddAnalysisData.total_number_of_site)
|
248 |
+
with tdd_number_of_empty_lncel_name_col:
|
249 |
+
st.metric("Empty name", LteTddAnalysisData.number_of_empty_lncel_name)
|
250 |
+
with tdd_number_of_empty_lncel_cellname_col:
|
251 |
+
st.metric("Empty Cellname", LteTddAnalysisData.number_of_empty_lncel_cellname)
|
252 |
+
with tdd_number_of_empty_lnbts_name_col:
|
253 |
+
st.metric("Empty LNBTS name", LteTddAnalysisData.number_of_empty_lnbts_name)
|
254 |
+
|
255 |
+
st.markdown("***")
|
256 |
+
|
257 |
+
st.markdown(":orange[**Number of Cell per Band**]")
|
258 |
+
tdd_number_of_cell_per_band_data_col, tdd_number_of_cell_per_band_plot_col = (
|
259 |
+
st.columns(2)
|
260 |
+
)
|
261 |
+
|
262 |
+
with tdd_number_of_cell_per_band_data_col:
|
263 |
+
st.write(LteTddAnalysisData.number_of_cell_per_band)
|
264 |
+
with tdd_number_of_cell_per_band_plot_col:
|
265 |
+
st.bar_chart(LteTddAnalysisData.number_of_cell_per_band)
|
266 |
+
|
267 |
+
st.markdown("***")
|
268 |
+
|
269 |
+
st.markdown(":orange[**PhyCellId Distribution**]")
|
270 |
+
tdd_phycellid_distribution_data_col, tdd_phycellid_distribution_plot_col = (
|
271 |
+
st.columns(2)
|
272 |
+
)
|
273 |
+
with tdd_phycellid_distribution_data_col:
|
274 |
+
st.write(LteTddAnalysisData.phycellid_distribution)
|
275 |
+
with tdd_phycellid_distribution_plot_col:
|
276 |
+
st.bar_chart(LteTddAnalysisData.phycellid_distribution)
|
277 |
+
|
278 |
+
st.markdown("***")
|
279 |
+
|
280 |
+
st.markdown(":orange[**Root Sequence Index Distribution**]")
|
281 |
+
(
|
282 |
+
tdd_rootsequenceindex_distribution_data_col,
|
283 |
+
tdd_rootsequenceindex_distribution_plot_col,
|
284 |
+
) = st.columns(2)
|
285 |
+
with tdd_rootsequenceindex_distribution_data_col:
|
286 |
+
st.write(LteTddAnalysisData.rootsequenceindex_distribution)
|
287 |
+
with tdd_rootsequenceindex_distribution_plot_col:
|
288 |
+
st.bar_chart(LteTddAnalysisData.rootsequenceindex_distribution)
|
289 |
+
|
290 |
+
st.markdown("***")
|
291 |
+
|
292 |
+
st.markdown(":orange[**LNCel Administate Distribution**]")
|
293 |
+
(
|
294 |
+
tdd_lncel_administate_distribution_data_col,
|
295 |
+
tdd_lncel_administate_distribution_plot_col,
|
296 |
+
) = st.columns(2)
|
297 |
+
with tdd_lncel_administate_distribution_data_col:
|
298 |
+
st.write(LteTddAnalysisData.lncel_administate_distribution)
|
299 |
+
with tdd_lncel_administate_distribution_plot_col:
|
300 |
+
st.bar_chart(LteTddAnalysisData.lncel_administate_distribution)
|
301 |
+
|
302 |
+
st.markdown("***")
|
303 |
+
|
304 |
+
st.markdown(":orange[**Number of Cell per TAC**]")
|
305 |
+
tdd_number_of_cell_per_tac_data_col, tdd_number_of_cell_per_tac_plot_col = (
|
306 |
+
st.columns(2)
|
307 |
+
)
|
308 |
+
with tdd_number_of_cell_per_tac_data_col:
|
309 |
+
st.write(LteTddAnalysisData.number_of_cell_per_tac)
|
310 |
+
with tdd_number_of_cell_per_tac_plot_col:
|
311 |
+
st.bar_chart(LteTddAnalysisData.number_of_cell_per_tac)
|
queries/process_all_db.py
CHANGED
@@ -1,18 +1,34 @@
|
|
1 |
-
from queries.process_gsm import combined_gsm_database
|
2 |
-
from queries.process_lte import process_lte_data
|
3 |
from queries.process_mrbts import process_mrbts_data
|
4 |
-
from queries.process_wcdma import process_wcdma_data
|
5 |
from utils.convert_to_excel import convert_dfs
|
6 |
from utils.utils_vars import UtilsVars
|
7 |
|
8 |
|
9 |
-
def
|
10 |
UtilsVars.all_db_dfs.clear()
|
11 |
-
combined_gsm_database(filepath)
|
12 |
process_wcdma_data(filepath)
|
13 |
-
process_lte_data(filepath),
|
14 |
process_mrbts_data(filepath)
|
15 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
UtilsVars.final_all_database = convert_dfs(
|
17 |
UtilsVars.all_db_dfs,
|
18 |
["GSM", "MAL", "TRX", "WCDMA", "LTE_FDD", "LTE_TDD", "MRBTS"],
|
|
|
1 |
+
from queries.process_gsm import combined_gsm_database, gsm_analaysis
|
2 |
+
from queries.process_lte import lte_fdd_analaysis, lte_tdd_analaysis, process_lte_data
|
3 |
from queries.process_mrbts import process_mrbts_data
|
4 |
+
from queries.process_wcdma import process_wcdma_data, wcdma_analaysis
|
5 |
from utils.convert_to_excel import convert_dfs
|
6 |
from utils.utils_vars import UtilsVars
|
7 |
|
8 |
|
9 |
+
def all_dbs(filepath: str):
|
10 |
UtilsVars.all_db_dfs.clear()
|
11 |
+
combined_gsm_database(filepath)
|
12 |
process_wcdma_data(filepath)
|
13 |
+
process_lte_data(filepath),
|
14 |
process_mrbts_data(filepath)
|
15 |
|
16 |
+
|
17 |
+
def process_all_tech_db(filepath: str):
|
18 |
+
all_dbs(filepath)
|
19 |
+
|
20 |
+
UtilsVars.final_all_database = convert_dfs(
|
21 |
+
UtilsVars.all_db_dfs,
|
22 |
+
["GSM", "MAL", "TRX", "WCDMA", "LTE_FDD", "LTE_TDD", "MRBTS"],
|
23 |
+
)
|
24 |
+
|
25 |
+
|
26 |
+
def process_all_tech_db_with_stats(filepath: str):
|
27 |
+
all_dbs(filepath)
|
28 |
+
gsm_analaysis(filepath)
|
29 |
+
wcdma_analaysis(filepath)
|
30 |
+
lte_fdd_analaysis(filepath)
|
31 |
+
lte_tdd_analaysis(filepath)
|
32 |
UtilsVars.final_all_database = convert_dfs(
|
33 |
UtilsVars.all_db_dfs,
|
34 |
["GSM", "MAL", "TRX", "WCDMA", "LTE_FDD", "LTE_TDD", "MRBTS"],
|
queries/process_gsm.py
CHANGED
@@ -4,7 +4,7 @@ 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.utils_vars import UtilsVars
|
8 |
|
9 |
BTS_COLUMNS = [
|
10 |
"ID_BCF",
|
@@ -82,7 +82,10 @@ def process_gsm_data(file_path: str):
|
|
82 |
# Process BTS data
|
83 |
df_bts = dfs["BTS"]
|
84 |
df_bts.columns = df_bts.columns.str.replace(r"[ ]", "", regex=True)
|
85 |
-
df_bts["code"] = df_bts["name"].str.split("_").str[0]
|
|
|
|
|
|
|
86 |
df_bts["Region"] = df_bts["name"].str.split("_").str[1]
|
87 |
df_bts["ID_BTS"] = df_bts[["BSC", "BCF", "BTS"]].astype(str).apply("_".join, axis=1)
|
88 |
df_bts["ID_MAL"] = (
|
@@ -178,3 +181,31 @@ def process_gsm_data_to_excel(file_path: str):
|
|
178 |
"""
|
179 |
gsm_dfs = combined_gsm_database(file_path)
|
180 |
UtilsVars.final_gsm_database = convert_dfs(gsm_dfs, ["GSM", "MAL", "TRX"])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.utils_vars import GsmAnalysisData, UtilsVars
|
8 |
|
9 |
BTS_COLUMNS = [
|
10 |
"ID_BCF",
|
|
|
82 |
# Process BTS data
|
83 |
df_bts = dfs["BTS"]
|
84 |
df_bts.columns = df_bts.columns.str.replace(r"[ ]", "", regex=True)
|
85 |
+
df_bts["code"] = df_bts["name"].str.split("_").str[0]
|
86 |
+
df_bts["code"] = (
|
87 |
+
pd.to_numeric(df_bts["code"], errors="coerce").fillna(0).astype(int)
|
88 |
+
)
|
89 |
df_bts["Region"] = df_bts["name"].str.split("_").str[1]
|
90 |
df_bts["ID_BTS"] = df_bts[["BSC", "BCF", "BTS"]].astype(str).apply("_".join, axis=1)
|
91 |
df_bts["ID_MAL"] = (
|
|
|
181 |
"""
|
182 |
gsm_dfs = combined_gsm_database(file_path)
|
183 |
UtilsVars.final_gsm_database = convert_dfs(gsm_dfs, ["GSM", "MAL", "TRX"])
|
184 |
+
|
185 |
+
|
186 |
+
#############################GSM ANALYSIS#################################
|
187 |
+
|
188 |
+
|
189 |
+
def gsm_analaysis(file_path: str):
|
190 |
+
gsm_df = process_gsm_data(file_path)
|
191 |
+
trx_df = process_trx_with_bts_name(file_path)
|
192 |
+
|
193 |
+
# df to count number of site per bsc
|
194 |
+
df_site_per_bsc = gsm_df[["BSC", "code"]]
|
195 |
+
df_site_per_bsc = df_site_per_bsc.drop_duplicates(subset=["code"], keep="first")
|
196 |
+
|
197 |
+
GsmAnalysisData.total_number_of_bsc = len(gsm_df["BSC"].unique())
|
198 |
+
GsmAnalysisData.total_number_of_cell = len(gsm_df["ID_BTS"].unique())
|
199 |
+
GsmAnalysisData.number_of_site = len(gsm_df["site_name"].unique())
|
200 |
+
GsmAnalysisData.number_of_cell_per_bsc = gsm_df["BSC"].value_counts()
|
201 |
+
GsmAnalysisData.number_of_site_per_bsc = df_site_per_bsc["BSC"].value_counts()
|
202 |
+
GsmAnalysisData.number_of_bts_name_empty = gsm_df["name"].isna().sum()
|
203 |
+
GsmAnalysisData.number_of_bcf_name_empty = gsm_df["site_name"].isna().sum()
|
204 |
+
GsmAnalysisData.number_of_bcch_empty = gsm_df["BCCH"].isna().sum()
|
205 |
+
GsmAnalysisData.bts_administate_distribution = gsm_df["adminState"].value_counts()
|
206 |
+
GsmAnalysisData.trx_administate_distribution = trx_df["adminState"].value_counts()
|
207 |
+
GsmAnalysisData.number_of_trx_per_bsc = trx_df["BSC"].value_counts()
|
208 |
+
# .rename(columns={"index": "BSC2", "BSC": "count2"})
|
209 |
+
# )
|
210 |
+
|
211 |
+
GsmAnalysisData.number_of_cell_per_lac = gsm_df["locationAreaIdLAC"].value_counts()
|
queries/process_lte.py
CHANGED
@@ -3,7 +3,7 @@ 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.utils_vars import UtilsVars, get_band
|
7 |
|
8 |
LNCEL_COLUMNS = [
|
9 |
"ID_LNBTS",
|
@@ -215,4 +215,42 @@ def process_lte_data_to_excel(file_path: str):
|
|
215 |
UtilsVars.final_lte_database = convert_dfs(lte_dfs, ["LTE_FDD", "LTE_TDD"])
|
216 |
|
217 |
|
218 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
4 |
from utils.config_band import config_band
|
5 |
from utils.convert_to_excel import convert_dfs, save_dataframe
|
6 |
+
from utils.utils_vars import LteFddAnalysisData, LteTddAnalysisData, UtilsVars, get_band
|
7 |
|
8 |
LNCEL_COLUMNS = [
|
9 |
"ID_LNBTS",
|
|
|
215 |
UtilsVars.final_lte_database = convert_dfs(lte_dfs, ["LTE_FDD", "LTE_TDD"])
|
216 |
|
217 |
|
218 |
+
#############################LTE ANALYSIS#################################
|
219 |
+
|
220 |
+
|
221 |
+
def lte_fdd_analaysis(file_path: str):
|
222 |
+
df_fdd = process_lte_data(file_path)[0]
|
223 |
+
|
224 |
+
LteFddAnalysisData.total_number_of_lncel = len(df_fdd["ID_LNCEL"].unique())
|
225 |
+
LteFddAnalysisData.total_number_of_site = len(df_fdd["code"].unique())
|
226 |
+
LteFddAnalysisData.number_of_empty_lncel_name = df_fdd["name"].isna().sum()
|
227 |
+
LteFddAnalysisData.number_of_empty_lncel_cellname = df_fdd["cellName"].isna().sum()
|
228 |
+
LteFddAnalysisData.number_of_empty_lnbts_name = df_fdd["lnbts_name"].isna().sum()
|
229 |
+
LteFddAnalysisData.number_of_cell_per_band = df_fdd["band"].value_counts()
|
230 |
+
LteFddAnalysisData.phycellid_distribution = df_fdd["phyCellId"].value_counts()
|
231 |
+
LteFddAnalysisData.rootsequenceindex_distribution = df_fdd[
|
232 |
+
"rootSeqIndex"
|
233 |
+
].value_counts()
|
234 |
+
LteFddAnalysisData.lncel_administate_distribution = df_fdd[
|
235 |
+
"administrativeState"
|
236 |
+
].value_counts()
|
237 |
+
LteFddAnalysisData.number_of_cell_per_tac = df_fdd["tac"].value_counts()
|
238 |
+
|
239 |
+
|
240 |
+
def lte_tdd_analaysis(file_path: str):
|
241 |
+
df_tdd = process_lte_data(file_path)[1]
|
242 |
+
|
243 |
+
LteTddAnalysisData.total_number_of_lncel = len(df_tdd["ID_LNCEL"].unique())
|
244 |
+
LteTddAnalysisData.total_number_of_site = len(df_tdd["code"].unique())
|
245 |
+
LteTddAnalysisData.number_of_empty_lncel_name = df_tdd["name"].isna().sum()
|
246 |
+
LteTddAnalysisData.number_of_empty_lncel_cellname = df_tdd["cellName"].isna().sum()
|
247 |
+
LteTddAnalysisData.number_of_empty_lnbts_name = df_tdd["lnbts_name"].isna().sum()
|
248 |
+
LteTddAnalysisData.number_of_cell_per_band = df_tdd["band"].value_counts()
|
249 |
+
LteTddAnalysisData.phycellid_distribution = df_tdd["phyCellId"].value_counts()
|
250 |
+
LteTddAnalysisData.rootsequenceindex_distribution = df_tdd[
|
251 |
+
"rootSeqIndex"
|
252 |
+
].value_counts()
|
253 |
+
LteTddAnalysisData.lncel_administate_distribution = df_tdd[
|
254 |
+
"administrativeState"
|
255 |
+
].value_counts()
|
256 |
+
LteTddAnalysisData.number_of_cell_per_tac = df_tdd["tac"].value_counts()
|
queries/process_small_bts.py
CHANGED
@@ -10,7 +10,10 @@ def process_small_bts_data(file_path: str):
|
|
10 |
)
|
11 |
df_bts = dfs["BTS"]
|
12 |
df_bts.columns = df_bts.columns.str.replace(r"[ ]", "", regex=True)
|
13 |
-
df_bts["code"] = df_bts["name"].str.split("_").str[0]
|
|
|
|
|
|
|
14 |
df_bts["ID_BTS"] = df_bts[["BSC", "BCF", "BTS"]].astype(str).apply("_".join, axis=1)
|
15 |
df_bts["ID_MAL"] = df_bts[["BSC", "BTS"]].astype(str).apply("_".join, axis=1)
|
16 |
df_bts = df_bts[["ID_BTS", "ID_MAL", "code", "name"]]
|
|
|
10 |
)
|
11 |
df_bts = dfs["BTS"]
|
12 |
df_bts.columns = df_bts.columns.str.replace(r"[ ]", "", regex=True)
|
13 |
+
df_bts["code"] = df_bts["name"].str.split("_").str[0]
|
14 |
+
df_bts["code"] = (
|
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"]]
|
queries/process_wcdma.py
CHANGED
@@ -3,7 +3,7 @@ import pandas as pd
|
|
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.utils_vars import UtilsVars
|
7 |
|
8 |
WCEL_COLUMNS = [
|
9 |
"ID_WBTS",
|
@@ -84,7 +84,10 @@ def process_wcdma_data(file_path: str):
|
|
84 |
# Process BTS data
|
85 |
df_wcel = dfs["WCEL"]
|
86 |
df_wcel.columns = df_wcel.columns.str.replace(r"[ ]", "", regex=True)
|
87 |
-
df_wcel["code"] = df_wcel["name"].str.split("_").str[0]
|
|
|
|
|
|
|
88 |
df_wcel["Region"] = df_wcel["name"].str.split("_").str[1]
|
89 |
df_wcel["ID_WCEL"] = (
|
90 |
df_wcel[["RNC", "WBTS", "WCEL"]].astype(str).apply("_".join, axis=1)
|
@@ -155,3 +158,32 @@ def process_wcdma_data_to_excel(file_path: str):
|
|
155 |
"""
|
156 |
wcdma_dfs = process_wcdma_data(file_path)
|
157 |
UtilsVars.final_wcdma_database = convert_dfs([wcdma_dfs], ["WCDMA"])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.utils_vars import UtilsVars, WcdmaAnalysisData
|
7 |
|
8 |
WCEL_COLUMNS = [
|
9 |
"ID_WBTS",
|
|
|
84 |
# Process BTS data
|
85 |
df_wcel = dfs["WCEL"]
|
86 |
df_wcel.columns = df_wcel.columns.str.replace(r"[ ]", "", regex=True)
|
87 |
+
df_wcel["code"] = df_wcel["name"].str.split("_").str[0]
|
88 |
+
df_wcel["code"] = (
|
89 |
+
pd.to_numeric(df_wcel["code"], errors="coerce").fillna(0).astype(int)
|
90 |
+
)
|
91 |
df_wcel["Region"] = df_wcel["name"].str.split("_").str[1]
|
92 |
df_wcel["ID_WCEL"] = (
|
93 |
df_wcel[["RNC", "WBTS", "WCEL"]].astype(str).apply("_".join, axis=1)
|
|
|
158 |
"""
|
159 |
wcdma_dfs = process_wcdma_data(file_path)
|
160 |
UtilsVars.final_wcdma_database = convert_dfs([wcdma_dfs], ["WCDMA"])
|
161 |
+
|
162 |
+
|
163 |
+
############################ANALYTICSS AND STATISTICS############################
|
164 |
+
|
165 |
+
|
166 |
+
def wcdma_analaysis(filepath: str):
|
167 |
+
"""
|
168 |
+
Process WCDMA data from the specified file path and convert it to Excel format
|
169 |
+
|
170 |
+
Args:
|
171 |
+
filepath (str): The path to the file.
|
172 |
+
"""
|
173 |
+
wcdma_df = process_wcdma_data(filepath)
|
174 |
+
|
175 |
+
# df to count number of site per rnc
|
176 |
+
df_site_per_rnc = wcdma_df[["RNC", "code"]]
|
177 |
+
df_site_per_rnc = df_site_per_rnc.drop_duplicates(subset=["code"], keep="first")
|
178 |
+
|
179 |
+
WcdmaAnalysisData.total_number_of_rnc = wcdma_df["RNC"].nunique()
|
180 |
+
WcdmaAnalysisData.total_number_of_wcel = wcdma_df["ID_WCEL"].nunique()
|
181 |
+
WcdmaAnalysisData.number_of_site = len(wcdma_df["site_name"].unique())
|
182 |
+
WcdmaAnalysisData.number_of_site_per_rnc = df_site_per_rnc["RNC"].value_counts()
|
183 |
+
WcdmaAnalysisData.number_of_cell_per_rnc = wcdma_df["RNC"].value_counts()
|
184 |
+
WcdmaAnalysisData.number_of_empty_wbts_name = wcdma_df["site_name"].isnull().sum()
|
185 |
+
WcdmaAnalysisData.number_of_empty_wcel_name = wcdma_df["name"].isnull().sum()
|
186 |
+
WcdmaAnalysisData.wcel_administate_distribution = wcdma_df[
|
187 |
+
"AdminCellState"
|
188 |
+
].value_counts()
|
189 |
+
WcdmaAnalysisData.number_of_cell_per_lac = wcdma_df["LAC"].value_counts()
|
utils/check_sheet_exist.py
CHANGED
@@ -1,6 +1,10 @@
|
|
1 |
import pandas as pd
|
2 |
|
3 |
|
|
|
|
|
|
|
|
|
4 |
class Technology:
|
5 |
gsm = False
|
6 |
wcdma = False
|
|
|
1 |
import pandas as pd
|
2 |
|
3 |
|
4 |
+
class DumpType:
|
5 |
+
full_dump = False
|
6 |
+
|
7 |
+
|
8 |
class Technology:
|
9 |
gsm = False
|
10 |
wcdma = False
|
utils/utils_vars.py
CHANGED
@@ -76,3 +76,59 @@ def get_band(text):
|
|
76 |
elif "L800" in text:
|
77 |
return "L800"
|
78 |
return np.nan # or return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
elif "L800" in text:
|
77 |
return "L800"
|
78 |
return np.nan # or return None
|
79 |
+
|
80 |
+
|
81 |
+
##############################STATISTICS############################
|
82 |
+
|
83 |
+
|
84 |
+
class GsmAnalysisData:
|
85 |
+
total_number_of_bsc = 0
|
86 |
+
total_number_of_cell = 0
|
87 |
+
number_of_site = 0
|
88 |
+
number_of_cell_per_bsc = pd.DataFrame()
|
89 |
+
number_of_site_per_bsc = pd.DataFrame()
|
90 |
+
number_of_bts_name_empty = 0
|
91 |
+
number_of_bcf_name_empty = 0
|
92 |
+
number_of_bcch_empty = 0
|
93 |
+
bts_administate_distribution = pd.DataFrame()
|
94 |
+
trx_administate_distribution = pd.DataFrame()
|
95 |
+
number_of_trx_per_bsc = pd.DataFrame()
|
96 |
+
number_of_cell_per_lac = pd.DataFrame()
|
97 |
+
|
98 |
+
|
99 |
+
class WcdmaAnalysisData:
|
100 |
+
total_number_of_rnc = 0
|
101 |
+
total_number_of_wcel = 0
|
102 |
+
number_of_site = 0
|
103 |
+
number_of_site_per_rnc = 0
|
104 |
+
number_of_cell_per_rnc = pd.DataFrame()
|
105 |
+
number_of_empty_wbts_name = 0
|
106 |
+
number_of_empty_wcel_name = 0
|
107 |
+
wcel_administate_distribution = pd.DataFrame()
|
108 |
+
number_of_cell_per_lac = pd.DataFrame()
|
109 |
+
|
110 |
+
|
111 |
+
class LteFddAnalysisData:
|
112 |
+
total_number_of_lncel = 0
|
113 |
+
total_number_of_site = 0
|
114 |
+
number_of_empty_lncel_name = 0
|
115 |
+
number_of_empty_lncel_cellname = 0
|
116 |
+
number_of_empty_lnbts_name = 0
|
117 |
+
number_of_cell_per_band = pd.DataFrame()
|
118 |
+
phycellid_distribution = pd.DataFrame()
|
119 |
+
rootsequenceindex_distribution = pd.DataFrame()
|
120 |
+
lncel_administate_distribution = pd.DataFrame()
|
121 |
+
number_of_cell_per_tac = pd.DataFrame()
|
122 |
+
|
123 |
+
|
124 |
+
class LteTddAnalysisData:
|
125 |
+
total_number_of_lncel = 0
|
126 |
+
total_number_of_site = 0
|
127 |
+
number_of_empty_lncel_name = 0
|
128 |
+
number_of_empty_lncel_cellname = 0
|
129 |
+
number_of_empty_lnbts_name = 0
|
130 |
+
number_of_cell_per_band = pd.DataFrame()
|
131 |
+
phycellid_distribution = pd.DataFrame()
|
132 |
+
rootsequenceindex_distribution = pd.DataFrame()
|
133 |
+
lncel_administate_distribution = pd.DataFrame()
|
134 |
+
number_of_cell_per_tac = pd.DataFrame()
|