Data Science
Collect, clean, and analyze data to support decisions in government, NGOs, and business.
Prerequisites
No prior experience required β open to beginners.
Certificate
Awarded by Rescue Academy on successful completion of the program's assessments and final project.
Learn Online β Live Classes
Register, receive your schedule, and join live instructor-led Data Science classes on Zoom. Assignments, instructor feedback, and a certificate on completion.
Learn In Person
Attend Data Science classes in person in Juba with hands-on labs, instructor mentorship, and a certificate on completion.
What You'll Learn
- Data Science Lifecycle β from collection to deployment
- Exploratory Data Analysis (EDA) with Pandas & visualizations
- Statistical inference, correlation & data mining techniques
- Data visualization & storytelling with Matplotlib & Seaborn
- Data privacy, anonymization & ethical handling of PII
Curriculum
Beginner
Full lessons available belowModule 1: The Data Science Lifecycle
Learning objectives
- Understand the end-to-end data science process
Lessons
- From Question to Insight
- The Data Science Lifecycle Stages
Module 2: Exploratory Data Analysis (EDA)
Learning objectives
- Explore and understand a dataset
Lessons
- Using describe() and info()
- Spotting Patterns & Outliers
Module 3: Statistical Inference & Data Mining
Learning objectives
- Apply basic statistical reasoning to data
Lessons
- Descriptive vs Inferential Statistics
- Basic Data Mining Concepts
Module 4: Data Visualization & Storytelling
Learning objectives
- Communicate data findings clearly
Lessons
- Choosing the Right Chart
- Telling a Story with Data
Module 5: Data Privacy & Security in Analytics
Learning objectives
- Handle data responsibly
Lessons
- Anonymizing Sensitive Data
- Data Privacy Best Practices
Intermediate
Outline β full lessons coming soonModule 1: Data Cleaning in Practice
Learning objectives
- Clean messy real-world data
Lessons
- Handling Missing & Duplicate Data
- Data Type & Format Issues
Module 2: Working with Pandas & NumPy
Learning objectives
- Manipulate data efficiently in Python
Lessons
- Pandas DataFrames in Depth
- NumPy for Numerical Work
Module 3: Intro to Predictive Analytics
Learning objectives
- Apply basic predictive techniques to data
Lessons
- Simple Predictive Models
- Interpreting Predictions
Module 4: Reporting & Dashboards
Learning objectives
- Present data science findings professionally
Lessons
- Building a Data Report
- Intro to Dashboarding Tools
Module 5: Intermediate Project
Learning objectives
- Complete an end-to-end analysis on a real dataset
Lessons
- Planning a Data Project
- Analyze & Present Findings
Advanced
Outline β full lessons coming soonModule 1: Advanced Statistical Methods
Learning objectives
- Apply more advanced statistical techniques
Lessons
- Hypothesis Testing
- Correlation vs Causation
Module 2: Machine Learning for Data Science
Learning objectives
- Apply ML as part of a data science workflow
Lessons
- When to Bring in ML
- Model Selection for a Data Problem
Module 3: Big Data Concepts
Learning objectives
- Understand working with larger-scale data
Lessons
- Big Data Concepts (Conceptual)
- Scaling Beyond a Single Machine
Module 4: Data Ethics & Governance
Learning objectives
- Apply data ethics at an organizational level
Lessons
- Data Governance Basics
- Ethical Data Use in Organizations
Module 5: Capstone Project
Learning objectives
- Deliver a complete data science project end to end
Lessons
- Planning the Capstone
- Analyze, Model & Present
Full Lessons β Beginner Level
1. The Data Science Lifecycle
Every data science project follows a standard lifecycle — a repeatable process that turns raw data into real-world insights. Understanding these phases is more important than any single tool, because it gives you a roadmap from question to decision.
- Data Collection: Gather data from surveys, APIs, CSV files, or databases. In South Sudan, this might mean combining NGO program reports, mobile money logs, or health clinic records.
- Data Cleaning: Handle missing values, remove duplicates, and fix inconsistencies. Real-world data is always messy — expect to spend 60-80% of your time here.
- Exploration (EDA): Use summary statistics and visualizations to find patterns, outliers, and relationships. This guides what questions to ask next.
- Modeling & Analysis: Apply statistical methods or machine learning to answer your question — whether that is forecasting, classification, or identifying trends.
- Deployment & Reporting: Share findings through dashboards, reports, or interactive tools. Stakeholders need clear, actionable insights — not raw code.
Practical Skill: Use Jupyter Notebooks to document every step of the lifecycle. Each cell becomes a record of your thinking — great for collaboration and reproducibility. Export final results to Tableau Public for interactive dashboards.
Try it Yourself — Data Pipeline Simulation
Python (Pandas simulation)
# Simulating the Data Science Lifecycle with a dictionary pipeline
# You would normally load a real CSV with pd.read_csv()
# Step 1 & 2: Collect & Clean
raw_data = [
{"name": "Clinic A", "patients": 340, "staff": 5, "region": "Central"},
{"name": "Clinic B", "patients": 510, "staff": 8, "region": "Central"},
{"name": "Clinic C", "patients": None, "staff": 3, "region": "Equatoria"}, # missing value!
{"name": "Clinic D", "patients": 180, "staff": 2, "region": "Equatoria"},
{"name": "Clinic E", "patients": 620, "staff": 10, "region": "Central"},
{"name": "Clinic F", "patients": 280, "staff": None, "region": "Upper Nile"}, # missing value!
]
# Remove rows with missing data (simple cleaning)
clean_data = [r for r in raw_data if r["patients"] and r["staff"]]
print(f"Loaded {len(raw_data)} records, cleaned to {len(clean_data)}")
# Step 3: Explore — calculate summary stats
total_patients = sum(r["patients"] for r in clean_data)
avg_patients = total_patients / len(clean_data)
print(f"Total patients across clinics: {total_patients}")
print(f"Average patients per clinic: {avg_patients:.0f}")
# Step 4 & 5: Insight & Report
print("\nInsight: Central region clinics see more patients on average.")
print("Recommendation: Allocate more staff to Equatoria clinics to improve coverage.")
2. Exploratory Data Analysis (EDA)
EDA is the process of getting to know your dataset before building any models. You use descriptive statistics and summary functions to uncover patterns, anomalies, and distributions. EDA answers questions like: "Are there outliers?" "Which columns are most correlated?" "Is the data balanced across groups?"
df.describe()— summary statistics (count, mean, min, max, quartiles) for numeric columns.df.info()— column names, data types, and non-null counts. Essential for spotting missing data.df['column'].value_counts()— frequency distribution of categorical values.- Always visualize distributions early — a histogram or boxplot reveals outliers and skew that summary stats alone can hide.
Practical Skill: In Jupyter Notebooks, run EDA commands cell by cell. Use Pandas for tabular summaries and Matplotlib or Seaborn for quick plots. The goal is to form hypotheses, not confirm them.
Try it Yourself — EDA on a Public Health Mock Dataset
Python (Pandas)
# Exploratory Data Analysis with Pandas
# Install: pip install pandas
import pandas as pd
import numpy as np
# Create a mock public health dataset
data = {
"clinic": ["A", "B", "C", "D", "E", "F"],
"patients": [340, 510, 480, 180, 620, 280],
"staff": [5, 8, 6, 2, 10, 4],
"region": ["Central", "Central", "Equatoria", "Equatoria", "Central", "Upper Nile"],
"vaccination_rate": [0.72, 0.88, 0.65, 0.91, 0.95, 0.54]
}
df = pd.DataFrame(data)
# 1. Structure overview
print("=== Dataset Info ===")
print(df.info())
print("\n=== Summary Statistics ===")
print(df.describe())
print("\n=== Per-Region Distribution ===")
print(df["region"].value_counts())
print("\n=== Average Patients by Region ===")
print(df.groupby("region")["patients"].mean().round(0))
# Key finding
print("\nInsight: Central region has more staff and higher patient volume.")
print("Upper Nile has the lowest vaccination rate — may need investigation.")
3. Statistical Inference & Data Mining
Statistical inference means drawing conclusions about a large population from a smaller sample. Data mining is the process of discovering hidden relationships and patterns in large datasets — like finding which factors most strongly predict patient outcomes or identifying clusters of similar schools for resource allocation.
- Correlation analysis (
df.corr()) measures how strongly two numeric variables move together. A value near +1 means they rise together; near -1 means one rises as the other falls; near 0 means no linear relationship. - A high correlation does not imply causation — always consider confounding factors.
- Data mining often uses clustering (unsupervised learning) to group similar records — for example, grouping NGO programs by budget size, reach, and impact score.
- In Jupyter Notebooks, use heatmaps (Seaborn) to visualize correlation matrices at a glance.
Practical Skill: Before building complex models, compute a correlation matrix to identify which features are redundant (highly correlated) and which are independent predictors. This saves time and improves model performance.
Try it Yourself — Correlation Matrix & Trend Filtering
Python (Pandas & NumPy)
# Finding correlations and significant trends in corporate data
# Install: pip install pandas numpy
import pandas as pd
import numpy as np
# Simulated corporate data: department performance
np.random.seed(42)
data = {
"training_hours": np.random.randint(10, 80, 8),
"productivity_score": np.random.uniform(50, 100, 8),
"employee_satisfaction": np.random.uniform(2, 5, 8),
"days_absent": np.random.randint(0, 15, 8)
}
df = pd.DataFrame(data)
print("=== Dataset ===")
print(df.round(1), "\n")
# Compute correlation matrix
corr = df.corr()
print("=== Correlation Matrix ===")
print(corr.round(3), "\n")
# Find the strongest correlation (excluding self)
corr_values = corr.unstack().drop_duplicates()
strongest = corr_values[corr_values.abs().argsort()[::-1]][:3]
print("=== Top 3 Strongest Correlations ===")
for pair, val in strongest.items():
if val != 1.0:
print(f" {pair[0]} vs {pair[1]}: {val:.3f}")
# Insight
print("\nInsight: High training hours may correlate with productivity.")
print("But check if satisfied employees are also more productive!")
4. Data Visualization & Storytelling
A chart is worth a thousand rows of data. Data storytelling is the art of turning complex numbers into visual narratives that decision-makers can act on immediately. The best visualizations are clear, honest, and focused — they answer a specific question and highlight the key insight.
- Line charts show trends over time (e.g., monthly malaria cases).
- Bar charts compare categories (e.g., aid received per region).
- Scatter plots reveal relationships between two numeric variables (e.g., income vs food security).
- Use Matplotlib and Seaborn for static charts, Tableau Public for interactive dashboards.
Practical Skill: Always label your axes, use a clear title, and add a caption explaining the insight. A chart without context is just decoration. Build your first dashboard in Tableau Public (free!) or Jupyter Notebooks.
Try it Yourself — Beautiful Bar Chart & Line Chart
Python (Matplotlib)
# Visualizing data with Matplotlib — clean and professional
# Install: pip install matplotlib pandas
import matplotlib.pyplot as plt
import pandas as pd
# Sample data: monthly clinic visits in South Sudan
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
malaria_cases = [120, 145, 180, 210, 195, 160]
hygiene_workshops = [5, 8, 12, 15, 13, 10]
# Create a side-by-side figure
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))
# --- Bar Chart: Malaria cases per month ---
bars = ax1.bar(months, malaria_cases, color="#1D448A", width=0.6)
ax1.set_title("Malaria Cases by Month", fontsize=13, fontweight="bold")
ax1.set_xlabel("Month")
ax1.set_ylabel("Cases")
ax1.set_ylim(0, 250)
# Add value labels on top of each bar
for bar, val in zip(bars, malaria_cases):
ax1.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 5,
str(val), ha="center", fontsize=9, fontweight="bold")
# --- Line Chart: Hygiene workshops over time ---
ax2.plot(months, hygiene_workshops, color="#F2C035",
marker="o", linewidth=2.5, markersize=8)
ax2.set_title("Hygiene Workshops (Jan-Jun)", fontsize=13, fontweight="bold")
ax2.set_xlabel("Month")
ax2.set_ylabel("Workshops")
ax2.set_ylim(0, 20)
# Add data point labels
for m, v in zip(months, hygiene_workshops):
ax2.text(m, v + 0.5, str(v), ha="center", fontsize=9, fontweight="bold")
plt.tight_layout()
plt.show()
print("Charts generated! The bar chart shows malaria spikes in Apr-May.")
print("The line chart shows workshop frequency increasing over time.")
print("Insight: More workshops correlate with fewer cases? Investigate!")
5. Data Privacy & Security in Analytics
Real-world datasets often contain Personally Identifiable Information (PII) — names, phone numbers, email addresses, or national IDs. Before sharing data or publishing a report, you must anonymize it. This is not just ethical — it may be legally required (e.g., under data protection laws). Always ask: "Could anyone be harmed if this data leaked?"
- Masking: Replace real names with placeholders (e.g., "Patient_001" instead of "John Deng").
- Dropping: Remove sensitive columns entirely if they are not needed for analysis.
- Aggregating: Group data at a higher level (e.g., show city averages instead of individual records).
- Ethical handling: Never use personal data for purposes people did not consent to. Document your data governance.
Practical Skill: Before publishing any dashboard or sharing a CSV, run a privacy check: drop or mask names, emails, phone numbers, and IDs. Use Pandas to automate this — it takes 2 lines of code.
Try it Yourself — Anonymize a Dataset with Pandas
Python (Pandas)
# Safe data handling: masking and dropping PII
# Install: pip install pandas
import pandas as pd
# Simulate a sensitive dataset
raw_data = pd.DataFrame({
"patient_name": ["John Deng", "Grace Nyok", "Amina Bakr", "Peter Malong"],
"phone": ["+211 912 345 678", "+211 923 456 789", "+211 934 567 890", "+211 945 678 901"],
"email": ["john.d@email.com", "grace.n@email.com", "amina.b@email.com", "peter.m@email.com"],
"diagnosis": ["Malaria", "Typhoid", "Malaria", "Diarrhea"],
"age": [34, 28, 45, 31],
"days_admitted": [5, 3, 7, 2],
"region": ["Juba", "Malakal", "Wau", "Juba"]
})
print("=== ORIGINAL DATASET (Contains PII) ===")
print(raw_data, "\n")
# --- Step 1: Drop columns that are not essential ---
safe_data = raw_data.drop(columns=["phone", "email"])
print("--- After dropping phone & email ---")
print(safe_data, "\n")
# --- Step 2: Mask patient names ---
safe_data["patient_name"] = [
f"Patient_{i:03d}" for i in range(1, len(safe_data) + 1)
]
print("--- After masking patient names ---")
print(safe_data, "\n")
# --- Step 3: Optional — aggregate data for reporting (no individuals) ---
print("--- Aggregated Report (no PII) ---")
report = safe_data.groupby("region").agg(
total_patients=("patient_name", "count"),
avg_age=("age", "mean"),
avg_stay=("days_admitted", "mean")
).round(1)
print(report)
print("\nPrivacy preserved! The anonymized dataset is safe to share.")
print("Reports should use aggregated data to protect individuals.")
Quick Quiz — Data Science Basics
Tools & Technologies
- Python
- Jupyter
- Pandas
- NumPy
- Microsoft Excel
Career Opportunities
- Data/AI analyst role at a bank, telecom, or NGO
- Research or further-study pathway in AI/ML/Data Science
- Remote/freelance AI or data work
Practical Projects
- Complete a full data analysis: clean, explore, visualize, and report insights from a real dataset
- Build a simple data dashboard summarizing key findings for a non-technical audience