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()
|