🎯 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/indicators.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 compoindic 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 | |
|---|---|---|---|---|
| compoindic-1.0.0.tar.gz | 30.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| compoindic-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 52.0 kB
Release files / compoindic-1.0.0.tar.gz
| Download URL | compoindic-1.0.0.tar.gz |
|---|---|
| Size | 30.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6cffd51961102e60d8fe5b7c91c75cf71affe77020fc10fbebceaec6ec4d0d28
|
|
BLAKE2b-256 checksum How to use checksums |
686206a625b49d0408d6ef530a5d0c9e7d9abfededbb14b503e14217cf019de3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Release files / compoindic-1.0.0-py3-none-any.whl
| Download URL | compoindic-1.0.0-py3-none-any.whl |
|---|---|
| Size | 21.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
31d167722cd814811783fae675b155b9b96366c8da2fa5eea4780148abcb5264
|
|
BLAKE2b-256 checksum How to use checksums |
d11662e6404a20ac98a9306609d2a9faf04816b2fb2366466d7693d596760cdf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Security for compoindic 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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.