Analyzing customer satisfaction with mobile banking apps by collecting and processing user reviews from the Google Play Store for three Ethiopian banks:
# Customer Experience Analytics for Fintech Apps
A modular and robust pipeline for analyzing customer experience and satisfaction with fintech mobile apps, focusing on Ethiopian banks: Commercial Bank of Ethiopia (CBE), Bank of Abyssinia (BOA), and Dashen Bank.
## Key Features
- Automated scraping of Google Play Store reviews
- Comprehensive data cleaning and preprocessing
- **Rating-based sentiment mapping** for robust sentiment analysis
- Extraction of key drivers and pain points using NLP
- Modular, maintainable codebase (analysis, recommendations, visualization, ethics)
- Insightful visualizations and actionable recommendations
- Professional reporting and export capabilities
## Project Structure
- `data/` — Raw and processed datasets
- `notebooks/` — Jupyter notebooks for analysis and reporting
- `src/` — Modular Python source code:
- `analysis/` — Insights, sentiment, visualization, ethics modules
- `recommendations/` — Automated improvement suggestions
- `reports/` — Generated reports and figures
- `tests/` — Unit tests
## Analysis Pipeline
### 1. Data Collection
- Reviews are scraped from the Google Play Store using the `google-play-scraper` Python package for each bank's official app.
- Each review includes: review text, rating, date, bank name, and source.
### 2. Data Cleaning & Preprocessing
- **Deduplication:** Remove duplicate reviews per bank.
- **Missing Data Handling:** Drop rows with missing review text, rating, or date.
- **Date Normalization:** Convert all dates to ISO format (`YYYY-MM-DD`).
- **Column Standardization:** Ensure columns: `review`, `rating`, `date`, `bank`, `source`.
### 3. Sentiment Mapping
- **Robust Sentiment Assignment:**
- Reviews are assigned sentiment labels based on their star rating to mitigate issues from typos, sarcasm, or ambiguous review text.
- Mapping logic:
- Ratings **4 or 5** → `positive`
- Ratings **1 or 2** → `negative`
- Rating **3** → `neutral`
- This sentiment is stored in the `derived_sentiment` column …