ChatGPT data analysis: check the rows behind the chart

Upload a structured file, state the calculation you want, and ask ChatGPT to show its method alongside the result. Before using a chart, check the row count, missing values, and denominator. A clean-looking percentage can answer the wrong question when one row is counted twice.

ChatGPT can analyze files and produce tables, charts, and code-backed calculations. Available inputs vary by account and workspace; OpenAI's data-analysis documentation, checked October 23, 2026, describes the current workflow. This article concerns analysis in a conversation. Editing formulas inside a workbook is covered by the separate ChatGPT for Excel guide.

Start with a question the file can answer

Suppose you want to compare workshop attendance across two locations. This original fictional CSV contains a duplicate record and an unknown attendance value:

registration_id,location,attended
R01,East,yes
R02,East,no
R02,East,no
R03,West,yes
R04,West,
R05,West,yes

There are six data rows but five distinct registration IDs. Deduplicating by registration ID leaves two East registrations and three West registrations. East has one confirmed attendee; West has two. The blank value for R04 is unknown, so treating it as “no” changes the meaning of the analysis.

Save the data as a CSV and upload it to a regular conversation where file analysis is available. Give the column definitions rather than asking only for “insights”:

Analyze this workshop registration CSV.
One registration_id represents one registration. Repeated identical rows
with the same ID are duplicates. Flag conflicting rows for the same ID.
attended=yes means confirmed attendance, no means confirmed absence,
and blank means unknown.

First report raw rows, unique IDs, duplicate IDs, and missing values.
Then show each location's unique registrations, yes/no/unknown counts,
and confirmed attendees divided by all unique registrations.
Keep unknown separate; do not fill it with no.
Show the calculation code and the table before making a chart.
Do not infer why someone attended or missed the workshop.

Compare the answer with a small known result

For this fixture, the expected table is:

Location Unique registrations Yes No Unknown Confirmed attendees / all registrations
East 2 1 1 0 50%
West 3 2 0 1 66.7%

The West rate is 2 ÷ 3, rounded to one decimal place. Reporting 100% would describe a different denominator: the two records with known attendance. That can be a useful second measure if labeled, but it cannot replace the requested measure.

If ChatGPT returns East as 33.3%, look for code that counted the duplicate R02 twice. If it reports zero unknown values, inspect any step that filled blanks before grouping. Correct that step and rerun the analysis before adjusting chart colors or titles.

These are expected values for the authored fixture, not a claimed live ChatGPT result. The arithmetic was checked separately during preparation.

Review the method and the chart together

When ChatGPT runs Python, inspect the displayed analysis code and ask it to explain any filtering or grouping you do not recognize. A chart should use the same table you reviewed. Request a title that names the denominator, such as “Confirmed attendance as a share of registrations,” and keep the unknown count visible beside it.

OpenAI notes that the analysis Python environment cannot make external web requests or API calls. Supply any external data needed for the calculation instead of assuming a missing file was fetched.

For a real registration export, start with a few records you can reconcile manually, then compare the full output with the original export's totals. Keep the deduplication rule and denominator with the result when you share it; otherwise a coworker can reproduce the same chart while calculating a different rate.

Keep reading