Updated November 2026
One row per customer is a different problem from one row per customer per month. The shape of the file narrows which methods can apply to it.
Each card opens a page with the analyses filed there and a worked example.
For example: Acceptance Sampling Plans; Method Agreement (Bland-Altman); Categorical tests.
For example: Anomaly detection; Causal impact; Changepoint Detection.
For example: Sequential A/B Test (Peek With an Approximate Guarantee); A/B test; ANCOVA.
For example: Multi-Touch Attribution Model Comparison; Benford's Law Screening; Conversion Funnel Drop-Off Analysis.
For example: Churn; Cohort retention; Difference-in-Differences.
For example: Multi-Rater Agreement (Fleiss Kappa); Intraclass correlation.
For example: Survival analysis.
For example: Paired comparison.
For example: Conjoint Analysis.
The data. standard_data_profile_v2.csv, the published sample file for Data profile: 800 rows; columns account_id, monthly_spend, visits, days_open, region, plan, currency, last_note, and more. Sample data, not a customer's.
The calculation. Python, standard library only. This exact code ran against the file when this page was built, and printed the output below it.
import csv
rows = list(csv.DictReader(open("standard_data_profile_v2.csv")))
cols = list(rows[0])
ids = {r["account_id"] for r in rows}
print(len(rows), "rows,", len(cols), "columns,", len(ids), "distinct ids")
for c in cols:
blank = sum(1 for r in rows if not r[c].strip())
if blank:
print(c, "is blank in", blank, "rows", f"({blank / len(rows):.0%})")
days = sorted(float(r["days_open"]) for r in rows)
print("days_open: median", days[len(days) // 2], "largest", days[-1])
800 rows, 9 columns, 800 distinct ids
last_note is blank in 230 rows (29%)
legacy_code is blank in 800 rows (100%)
days_open: median 400.0 largest 9000.0
What it says. There are as many distinct account ids as rows (800), so this is one row per account: a cross-section, not a panel. 1 column is empty in every row and can be dropped. The largest days_open is 9000 days, about 25 years, against a median of 400: a value worth checking before it pulls an average.
What it does not say. A blank is not always missing at random: if notes are left empty mostly for one kind of account, dropping those rows biases what follows. A profile flags such things; it does not decide them.
Run Data profile on this file or your own, or open its stored sample report.
Further reading on the method in the worked example. Each reference was looked up and its authors, title, year and venue confirmed on 30 October 2026.
Tell us what went wrong, in your own words. We capture the page you're on automatically, so no need to describe where you are.