Logo Lanfrica

lerato-z/sa-data-job-analysis

Domain:

socioeconomic
Creator:
ler
Host:
Analysing what South African employers actually ask for in data and tech roles — skills, salaries and locations, pulled from live job postings via the Adzuna API. # SA Tech Jobs Snapshot What South African employers actually ask for in data and tech roles — skills, locations, and salaries — collected from live job postings via the Adzuna API. This is a snapshot analysis: postings were pulled once, cleaned, and analysed. The interesting part isn't the pipeline, it's what reading the data carefully forces you to confront — truncated descriptions, a field that means two different things, and a market concentrated in two cities. ## Findings **1. SA tech hiring is a two-province market.** Gauteng and the Western Cape account for 95% of all geolocated postings. KwaZulu-Natal — home to Durban, a metro of 3.5 million — contributes under 4%. North West province produced zero postings. **2. SQL, Python, and Power BI lead demand — but the numbers are a floor.** Adzuna truncates descriptions to 500 characters, and requirements lists tend to sit near the end of an ad. So a skill's measured share depends partly on *where in the ad it appears*: role-defining terms (in the job title, e.g. "Machine Learning Engineer") survive truncation, while tools buried in a requirements list are often cut off. The chart encodes this — darker bars appear early and are reliable; lighter bars appear late and are undercounted. **3. "Data" means two different jobs.** Skill co-occurrence separates into two clusters that barely overlap: a business-intelligence cluster (Excel + Power BI + SQL) and a data-science/engineering cluster (Python + cloud + ML). A posting from one rarely asks for skills from the other. ## How it works Four scripts, run in order: | Script | Does | |---|---| | `pull.py` | Fetches postings from the Adzuna API, saves raw JSON to `data/raw/` | | `clean.py` | Deduplicates, parses locations, normalises company names → `data/postings_clean.csv` | | `extract.py` | Detects requirements sections and extracts skills → `data/postings_skills.csv` | | `charts.py` | Renders the three charts to `docs/charts/` | ## Run it yourself You'll …

Licenses