db_query / documentations /lte_capacity_docs.py
DavMelchi's picture
LTE capacity 1st commit
027f03b
import streamlit as st
st.markdown(
"""
# LTE Capacity Analysis Documentation
This documentation provides a technical and practical reference for the LTE Capacity Analysis application, detailing input/output columns, processing workflow, and key metrics as implemented in:
- apps/kpi_analysis/lte_capacity.py
- process_kpi/process_lte_capacity.py
- utils/kpi_analysis_utils.py
---
## 1. Input Files and Expected Columns
### a. Dump File (XLSB)
- Contains network configuration and site data.
- Expected columns (see `LTE_DATABASE_COLUMNS` in `process_lte_capacity.py`):
- code: Unique site identifier
- Region: Geographical region of the site
- site_config_band: Configured frequency bands at the site
- final_name: Formatted site name
### b. Busy Hour (BH) KPI Report (CSV)
- Contains performance metrics for LTE cells during busy hours.
- Key columns (see `KPI_COLUMNS` in `process_lte_capacity.py`):
- date: Timestamp of the measurement
- LNCEL_name: Cell identifier (format: SiteName_LBand_CellID)
- Cell_Avail_excl_BLU: Cell availability percentage excluding BLU
- E_UTRAN_Avg_PRB_usage_per_TTI_DL: Average Physical Resource Block usage in downlink
---
## 2. Output Columns and Their Meaning
### a. LTE Analysis Output (`LTE_ANALYSIS_COLUMNS`):
- **Site Information**:
- code: Site identifier
- Region: Geographical region
- site_config_band: Configured frequency bands
- **Cell Configuration**:
- LNCEL_name_l800: Cell name for 800MHz band
- LNCEL_name_l1800: Cell name for 1800MHz band
- LNCEL_name_l2300: Cell name for 2300MHz band
- LNCEL_name_l2600: Cell name for 2600MHz band
- LNCEL_name_l1800s: Cell name for 1800MHz supplementary band
- **PRB Usage Metrics**:
- avg_prb_usage_bh_l800: Average PRB usage for 800MHz band
- avg_prb_usage_bh_l1800: Average PRB usage for 1800MHz band
- avg_prb_usage_bh_l2300: Average PRB usage for 2300MHz band
- avg_prb_usage_bh_l2600: Average PRB usage for 2600MHz band
- avg_prb_usage_bh_l1800s: Average PRB usage for 1800s band
- **Cell Status**:
- num_congested_cells: Number of cells exceeding PRB usage threshold
- num_cells: Total number of cells at the site
- num_cell_with_kpi: Number of cells with valid KPI data
- num_down_or_no_kpi_cells: Number of down or non-reporting cells
- prb_diff_between_cells: Maximum PRB usage difference between cells at the site
- load_balance_required: Flag indicating if load balancing is needed
- **Analysis Results**:
- congestion_comment: Comments on cell congestion status
- final_comments: Summary of site status and recommendations
---
## 3. Processing Workflow
1. **Data Loading and Validation**:
- Load and validate the dump file and BH report
- Check for required columns and data integrity
2. **Data Processing**:
- Parse site and cell information from the dump file
- Process KPI data from the BH report
- Calculate average PRB usage per cell and band
3. **Analysis**:
- Identify congested cells based on PRB usage threshold
- Calculate load balancing requirements
- Determine site-level congestion status
- Generate recommendations for capacity expansion
4. **Reporting**:
- Combine all analysis results into a comprehensive DataFrame
- Generate final comments and recommendations
- Prepare data for visualization and export
---
## 4. Key Functions
### a. `process_lte_bh_report` (in `process_lte_capacity.py`)
- Main function that orchestrates the LTE capacity analysis
- Parameters:
- dump_path: Path to the site dump file
- bh_report_path: Path to the Busy Hour KPI report
- num_last_days: Number of days to analyze
- num_threshold_days: Number of days for threshold calculations
- availability_threshold: Minimum required cell availability (%)
- prb_usage_threshold: Threshold for PRB usage (%)
- prb_diff_between_cells_threshold: Maximum allowed PRB difference between cells (%)
### b. `lte_analysis_logic` (in `process_lte_capacity.py`)
- Core logic for analyzing LTE capacity
- Identifies congested cells and calculates load balancing requirements
- Generates comments and recommendations
### c. analyze_prb_usage (in kpi_analysis_utils.py)
- Analyzes PRB usage patterns
- Identifies cells with high PRB utilization
- Generates comments on congestion status
### d. cell_availability_analysis (in kpi_analysis_utils.py)
- Analyzes cell availability metrics
- Identifies cells with availability issues
- Generates availability-related comments
---
## 5. Configuration Parameters
### a. Band Mapping (from LteCapacity class):
- Defines the recommended next band for capacity expansion
- Example: L1800 β†’ L800, L800 β†’ L1800, etc.
### b. Thresholds (configurable via UI/parameters):
- Availability Threshold: Default 95%
- PRB Usage Threshold: Default 80%
- PRB Difference Threshold: Default 20%
- Analysis Period: Default 7 days
- Threshold Days: Default 3 days
---
## 6. Example Usage and Output Analysis
### Basic Usage
```python
from process_kpi.process_lte_capacity import process_lte_bh_report
import pandas as pd
# Process LTE capacity analysis
results = process_lte_bh_report(
dump_path="network_dump_202305.xlsb",
bh_report_path="lte_bh_report_20230501_20230507.csv",
num_last_days=7, # Analyze last 7 days
num_threshold_days=3, # Consider threshold violations if seen on β‰₯3 days
availability_threshold=95.0, # Minimum acceptable cell availability (%)
prb_usage_threshold=80.0, # PRB usage threshold for congestion (%)
prb_diff_between_cells_threshold=20.0 # Max allowed PRB difference between cells (%)
)
# Unpack results
bh_report_df, lte_analysis_df = results
# Example: Display sites with congestion
congested_sites = lte_analysis_df[lte_analysis_df['num_congested_cells'] > 0]
print(f"Found {len(congested_sites)} sites with congestion")
# Example: Export results to Excel
with pd.ExcelWriter('lte_capacity_analysis.xlsx') as writer:
lte_analysis_df.to_excel(writer, sheet_name='LTE_Analysis', index=False)
bh_report_df.to_excel(writer, sheet_name='BH_Report', index=False)
```
### Understanding the Output
- `lte_analysis_df`: Contains per-site analysis with capacity recommendations
- `bh_report_df`: Raw busy hour metrics for detailed investigation
## 7. Column Reference Table
### Site Information
| Column | Type | Description | Example |
|--------|------|-------------|---------|
| code | str | Unique site identifier | SITE123 |
| Region | str | Mali Geographical region | CENTRAL |
| site_config_band | str | Configured frequency bands | L1800/L800 |
### Cell Configuration
| Column | Type | Description | Example |
|--------|------|-------------|---------|
| LNCEL_name_l800 | str | 800MHz cell name | SITE123_L800_1 |
| LNCEL_name_l1800 | str | 1800MHz cell name | SITE123_L1800_1 |
| LNCEL_name_l2300 | str | 2300MHz cell name | SITE123_L2300_1 |
| LNCEL_name_l2600 | str | 2600MHz cell name | SITE123_L2600_1 |
| LNCEL_name_l1800s | str | 1800s cell name | SITE123_L1800S_1 |
### PRB Usage Metrics
| Column | Type | Description | Range |
|--------|------|-------------|-------|
| avg_prb_usage_bh_l800 | float | Avg PRB usage 800MHz | 0-100% |
| avg_prb_usage_bh_l1800 | float | Avg PRB usage 1800MHz | 0-100% |
| avg_prb_usage_bh_l2300 | float | Avg PRB usage 2300MHz | 0-100% |
| avg_prb_usage_bh_l2600 | float | Avg PRB usage 2600MHz | 0-100% |
| avg_prb_usage_bh_l1800s | float | Avg PRB usage 1800s | 0-100% |
### Cell Status
| Column | Type | Description |
|--------|------|-------------|
| num_cells | int | Total cells at site |
| num_cell_with_kpi | int | Cells with valid KPI data |
| num_down_or_no_kpi_cells | int | Non-reporting cells |
| num_congested_cells | int | Cells exceeding PRB threshold |
| prb_diff_between_cells | float | Max PRB difference between cells |
| load_balance_required | bool | If load balancing is needed |
### Analysis Results
| Column | Type | Description |
|--------|------|-------------|
| congestion_comment | str | Analysis of congestion status |
| final_comments | str | Summary and recommendations |
| recommended_action | str | Suggested capacity actions |
| next_band | str | Recommended band for expansion |
"""
)