🎯 Composite Indicator Builder
Professional tool for constructing composite indicators using various methodologies
Author: Dr. Merwan Roudane
Email: merwanroudane920@gmail.com
GitHub: merwanroudane/indic
📋 Overview
The Composite Indicator Builder is a comprehensive Python package designed for researchers, economists, and data analysts who need to construct composite indicators following OECD guidelines and academic best practices. The package features a beautiful modern GUI built with CustomTkinter and implements multiple weighting and aggregation methodologies.
✨ Key Features
- 🎨 Modern GUI - Beautiful, intuitive interface with light/dark mode support
- 📊 Multiple Methods - 9 different calculation methodologies
- 📈 Advanced Analytics - Built-in visualizations and statistical analysis
- 💾 Excel Integration - Import data and export results seamlessly
- 🔬 Research-Grade - Based on OECD Handbook and peer-reviewed literature
- 🌐 Cross-Platform - Works on Windows, macOS, and Linux
🚀 Quick Start
Installation
# Clone the repository
git clone https://github.com/merwanroudane/indic.git
cd indic
# Install the package
pip install -e .
# Or install directly from GitHub
pip install git+https://github.com/merwanroudane/indic.git
Launch the Application
# Run from command line
indicator
# Or run from Python
python -m indicator.gui
Basic Usage Example
import pandas as pd
from indicator import PCA_Calculation, EqualWeights, normalizar_dados
# Load your data
df = pd.read_excel("your_data.xlsx")
# Normalize data
data = pd.DataFrame()
for col in df.select_dtypes(include=['number']).columns:
data[col] = normalizar_dados(df[col].tolist(), orientacao="Min")
# Calculate using PCA
pca_model = PCA_Calculation(data)
results = pca_model.run()
# Access results
for i, result in enumerate(results):
print(f"Unit {i+1}: CI = {result.ci:.3f}, Weights = {result.weights}")
📚 Methodology
Available Methods
-
Principal Component Analysis (PCA)
- Statistical method based on variance explained
- Includes Varimax rotation for interpretability
- Filters components using OECD criteria
-
Shannon's Entropy
- Information theory-based weighting
- Assigns higher weights to discriminatory indicators
- Fully data-driven approach
-
Benefit of the Doubt (BoD)
- Based on Data Envelopment Analysis (DEA)
- Optimizes weights to maximize each unit's performance
- Can incorporate expert opinion through bounds
-
Equal Weights
- Simple arithmetic mean
- Baseline method for comparison
- Assumes equal importance of all indicators
-
Geometric Mean
- Multiplicative aggregation
- Less compensatory than arithmetic mean
- Suitable for essential indicators
-
Harmonic Mean
- Least compensatory aggregation
- Penalizes poor performance
- Ideal for critical dimensions
-
Factor Analysis
- Assumes underlying latent factors
- Alternative to PCA
- Includes Varimax rotation
-
Correlation-based Weighting
- Weights based on correlation structure
- Simple and interpretable
- Can use reference indicator
-
Minimal Uncertainty
- Optimizes to minimize ranking uncertainty
- Combines information from multiple methods
- Provides robust consensus ranking
🎨 GUI Features
Main Interface
The application features a modern, professional interface with:
- Sidebar Controls - Easy access to all settings and options
- Data Preview - View your imported data
- Interactive Results - Explore results with tabs for each method
- Visualizations - Automatic generation of charts and graphs
- Export Functionality - One-click Excel export
Screenshots
┌─────────────────────────────────────────────────────────────┐
│ 🔬 Indicator Builder Dr. Merwan Roudane │
├──────────────┬──────────────────────────────────────────────┤
│ │ │
│ 📁 Data │ 📋 Data Preview │
│ Management │ │
│ │ ┌──────────────────────────────────┐ │
│ 📊 Select │ │ DMU │ Ind1 │ Ind2 │ Ind3 │ │
│ Indicators │ ├──────────────────────────────── │ │
│ │ │ 1 │ 0.75 │ 0.82 │ 0.91 │ │
│ ⚙️ Methods │ │ 2 │ 0.63 │ 0.77 │ 0.85 │ │
│ │ │ ... │ ... │ ... │ ... │ │
│ 🚀 Calculate│ └──────────────────────────────────┘ │
│ │ │
│ 💾 Export │ 📊 Results & Visualizations │
│ │ │
└──────────────┴──────────────────────────────────────────────┘
📖 User Guide
1. Loading Data
- Click "Load Excel File"
- Select your Excel file (.xlsx or .xls)
- Data should have:
- Numeric columns for indicators
- Optional label column for unit names
- No missing values
2. Selecting Indicators
- Check boxes next to indicators you want to include
- Choose a Label Column (optional) for unit identification
- Select a Control Variable (optional) for normalization
3. Choosing Methods
- Select one or more calculation methods
- Different methods provide different perspectives
- Use multiple methods for robustness analysis
4. Calculating
- Click "Calculate Indicators"
- Progress bar shows calculation status
- Results appear in separate tabs
5. Reviewing Results
Each result tab shows:
- Rankings - Sorted composite indicator values
- Weights - Indicator weights used
- Statistics - Min, max, mean, standard deviation
- Visualizations - Bar charts and distributions
6. Exporting
- Click "Export Results"
- Choose save location
- Excel file contains:
- Separate sheets for each method
- Summary statistics sheet
- Full weight information
💻 Python API
Basic Example
from indicator import PCA_Calculation, normalizar_dados
import pandas as pd
# Load and prepare data
df = pd.read_excel("data.xlsx")
data = pd.DataFrame({
col: normalizar_dados(df[col].tolist(), "Min")
for col in df.select_dtypes(include=['number']).columns
})
# Calculate composite indicators
model = PCA_Calculation(data)
results = model.run()
# Extract CI values and weights
ci_values = [r.ci for r in results]
weights = results[0].weights # Same for all units in PCA
Advanced Usage - Multiple Methods
from indicator import (
PCA_Calculation,
Entropy_Calculation,
BOD_Calculation,
GeometricMean
)
methods = {
'PCA': PCA_Calculation(data),
'Entropy': Entropy_Calculation(data),
'BoD': BOD_Calculation(data),
'Geometric': GeometricMean(data)
}
results = {}
for name, model in methods.items():
results[name] = model.run()
# Compare results across methods
import numpy as np
correlations = {}
for m1 in results:
for m2 in results:
if m1 < m2:
ci1 = [r.ci for r in results[m1]]
ci2 = [r.ci for r in results[m2]]
corr = np.corrcoef(ci1, ci2)[0, 1]
correlations[f"{m1} vs {m2}"] = corr
Custom Bounds for BoD
from indicator import BOD_Calculation
# Set min/max bounds for each indicator
bounds = [
(0.1, 0.5), # Indicator 1: weight between 0.1 and 0.5
(0.0, 0.3), # Indicator 2: weight between 0.0 and 0.3
(0.2, 0.8), # Indicator 3: weight between 0.2 and 0.8
]
model = BOD_Calculation(data, bounds=bounds)
results = model.run()
📊 Data Requirements
Input Format
- File Type: Excel (.xlsx, .xls)
- Structure:
- Rows = Units/Entities (DMUs, countries, regions, etc.)
- Columns = Indicators + optional label column
- Data Type: Numeric values for indicators
- Missing Data: Not allowed (will prompt error)
- Size: Recommended maximum 300 rows
Example Data Structure
| Country | GDP_per_capita | Life_Expectancy | Education_Index |
|---|---|---|---|
| USA | 65000 | 78.5 | 0.92 |
| Germany | 48000 | 81.0 | 0.95 |
| Japan | 42000 | 84.5 | 0.94 |
🔬 Scientific Background
Normalization
The package implements Min-Max normalization:
- Min-oriented: (x - min) / (max - min) → Higher values are better
- Max-oriented: (max - x) / (max - min) → Lower values are better
Orientation is automatically determined by correlation with control variable.
Weight Determination
Different methods use different approaches:
- PCA/Factor Analysis: Based on variance explained
- Entropy: Based on information content
- BoD: Based on linear programming
- Correlation: Based on correlation structure
Aggregation
Multiple aggregation functions:
- Linear: Weighted arithmetic mean (fully compensatory)
- Geometric: Multiplicative (partially compensatory)
- Harmonic: Least compensatory
📚 References
Key Literature
-
OECD (2008). Handbook on Constructing Composite Indicators: Methodology and User Guide. OECD Publishing, Paris.
-
Nardo, M., et al. (2005). Handbook on Constructing Composite Indicators. OECD Statistics Working Papers.
-
Cherchye, L., et al. (2007). "An Introduction to 'Benefit of the Doubt' Composite Indicators." Social Indicators Research, 82(1), 111-145.
-
Zhou, P., Ang, B.W., & Poh, K.L. (2007). "A non-radial DEA approach to measuring environmental performance." European Journal of Operational Research, 178(1), 1-9.
-
Greco, S., et al. (2019). "On the Methodological Framework of Composite Indices: A Review." Social Indicators Research, 141, 61-94.
🛠️ Development
Requirements
pip install -r requirements.txt
Testing
pytest tests/
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
👤 Author
Dr. Merwan Roudane
- Email: merwanroudane920@gmail.com
- GitHub: @merwanroudane
- Repository: merwanroudane/indic
🙏 Acknowledgments
- OECD for methodological guidelines
- Academic community for research foundations
- Open-source community for excellent tools and libraries
📞 Support
For questions, issues, or suggestions:
- Email: merwanroudane920@gmail.com
- Issues: GitHub Issues
📈 Citation
If you use this package in your research, please cite:
@software{roudane2024indicator,
author = {Roudane, Merwan},
title = {Composite Indicator Builder: A Python Package for Constructing Composite Indicators},
year = {2024},
url = {https://github.com/merwanroudane/indic},
version = {1.0.0}
}
Made with ❤️ by Dr. Merwan Roudane
Metadata
Release files for indicators-merwan 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| indicators_merwan-1.0.0.tar.gz | 34.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| indicators_merwan-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 55.9 kB
Release files / indicators_merwan-1.0.0.tar.gz
| Download URL | indicators_merwan-1.0.0.tar.gz |
|---|---|
| Size | 34.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
011367ac723df57028148657b05b8596c77ce5f68bb0bfd84e30e8ce29a43c53
|
|
BLAKE2b-256 checksum How to use checksums |
e6f840e87b9977c6e0aa49e04a86f795a7dd186c808765b15b54dbd2abf04913
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Release files / indicators_merwan-1.0.0-py3-none-any.whl
| Download URL | indicators_merwan-1.0.0-py3-none-any.whl |
|---|---|
| Size | 21.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0e38169ab8dab08183df6a28ae968d3b6386c3861ccae2f56d8967eb72113dd2
|
|
BLAKE2b-256 checksum How to use checksums |
ba16a4f04713f01d480b9665ebd73fad510b9e3dde492712897f3adfc76170fa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Security for indicators-merwan 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.