Published article · August 7, 2026

What 110,527 Medical Appointments Taught Me About No-Shows: A Reproducible Python Analysis

A descriptive walkthrough of a public healthcare appointment dataset, the Python workflow behind the analysis, and the limits of what the patterns can and cannot prove.

Reproducible healthcare analytics

1. Introduction

Medical appointment no-shows are a practical healthcare operations problem because every missed visit can affect schedules, staff planning, patient communication, and access to care. For this portfolio project, I analyzed 110,527 public medical appointment records using Python. The goal was not to make clinical claims or prescribe an intervention. The goal was to show how a public dataset can be cleaned, summarized, visualized, and translated into careful operational questions.

The analysis is intentionally descriptive. It compares attendance outcomes across six visual views: overall attendance, age, gender, SMS reminder status, scholarship or support status, and weekday. Those views are useful for exploring patterns, but they do not establish cause and effect.

2. The Dataset

The case study uses 110,527 appointment records. The website does not redistribute the source dataset, and the project page is careful not to claim ownership of the original public records. The visible portfolio evidence focuses on the analytical workflow, exported charts, and the downloadable Python file that demonstrates how the analysis was performed.

The analysis uses appointment outcome, age, gender, SMS reminder status, scholarship or support status, scheduled day, and appointment day. The Python workflow converts date fields into datetime values and creates an appointment weekday field for the weekday comparison.

3. Analytical Workflow

The workflow starts with basic data inspection. The Python file loads the data with Pandas, prints the first rows, checks the shape, reviews column names, counts missing values, and checks for duplicate records. After that inspection, it prepares date columns and creates the weekday feature.

The code then calculates the overall attendance split using value counts and normalized percentages. It then creates six bar-chart views with Matplotlib. The workflow is deliberately simple and transparent: each visual answers one descriptive question, and the notebook-style sequence makes the steps easy for an employer, reviewer, or collaborator to follow.

4. Overall Attendance

The overall attendance view is the starting point because it establishes the basic size of the issue. In this dataset, 79.81% of appointments were attended and 20.19% were missed. That means missed appointments represent a meaningful share of the appointment records, but the majority of appointments were still attended.

This framing matters: the no-show group should not be overstated, but a one-in-five missed-appointment pattern is operationally important enough to investigate. The chart communicates the attendance balance quickly before the analysis moves into subgroup comparisons.

5. Age Patterns

The age view compares average age by appointment outcome. The purpose is not to label any age group as the cause of missed appointments. Instead, it asks whether age patterns appear different enough to warrant more careful follow-up. Age may interact with communication preferences, transportation, work schedules, caregiving responsibilities, and other factors that are not fully captured in a basic descriptive chart.

The right interpretation is cautious: the analysis shows age patterns across outcomes, but controlled modeling would be needed before stronger conclusions.

6. Gender Patterns

The gender view reviews appointment attendance by gender. This is another descriptive comparison rather than a causal statement. The chart helps reveal whether attendance and missed-appointment counts vary across the available gender categories in the dataset.

For a professional analytics portfolio, this view demonstrates subgroup analysis while also showing restraint. A chart can show differences in counts, but it cannot explain why those differences exist.

7. SMS Reminder Patterns

The SMS reminder view compares patients who did and did not receive an SMS reminder. This is one of the most tempting parts of the analysis to overstate, so the language has to stay precise. The analysis shows attendance patterns by SMS reminder status; it does not show that SMS reminders caused attendance changes.

Reminder behavior can be influenced by many factors. Patients may receive reminders because of scheduling rules, contact-data availability, appointment type, timing, or other operational decisions. The descriptive comparison suggests that reminder patterns may warrant further investigation.

8. Scholarship / Support Status

The scholarship or support-status view compares appointment attendance for records with and without that support flag. The case-study caption notes that scholarship status did not show a large attendance difference in this view. That is a useful finding because not every available variable produces a strong visual separation.

In practical analytics work, modest findings still matter. They can help teams avoid over-focusing on a variable that does not appear visually dominant in the first pass.

9. Weekday Patterns

The weekday view focuses on missed appointments by appointment day. The portfolio page highlights Tuesday and Wednesday as the highest missed-appointment counts in this descriptive view. This kind of pattern can support operational questions such as whether reminder timing, staffing, or patient communication differs across the week.

The careful interpretation is that weekday patterns may warrant further investigation. A weekday chart does not prove why patients miss visits or prove that a specific scheduling change would reduce no-shows.

10. Reproducibility

Reproducibility is one of the strongest parts of this project. The analysis is supported by a downloadable Python file, and the original notebook link remains available for review. You can download the Python analysis code or open the original notebook to inspect the workflow more directly.

The Python file loads the dataset, inspects quality signals, creates the weekday feature, calculates attendance percentages, and produces the six charts used in the portfolio.

11. What I Learned

This project reinforced three lessons. First, healthcare analytics needs clear boundaries. Descriptive comparisons are valuable, but they should not be presented as clinical proof. Second, simple visualizations can still create business value when they are connected to operational questions. Third, transparent code and careful language can make a portfolio project more credible than a polished dashboard with unsupported claims.

The analysis also strengthened my ability to explain findings to both technical and non-technical audiences.

12. Related Work

This article connects to the full healthcare no-show analysis case study, the broader project portfolio, my research profile, and the embedded dashboard portfolio. Together, these pages show how I move from data preparation to visual explanation, responsible interpretation, and practical stakeholder communication.