Help us measure site usage?

With your permission, we use self-hosted analytics to understand page usage. It is optional and does not affect the Service. Learn more.

RintermediatewebAI generated

CSV Data Quality Dashboard

Build a Shiny web app in R that checks the quality of any CSV file you upload, before you trust it for analysis. It shows how much of each column is missing, the distribution of every column (histograms for numbers and top values for text), duplicate rows, and columns with suspicious values, and lets you define validation rules (for example age between 0 and 120, email must match a pattern, or status must be one of a list) and see exactly which rows break them. The results can be downloaded as a report. You'll learn Shiny's reactive programming, the tidyverse for profiling data, designing validation rules, charts with ggplot2, and making an app robust against unexpected files.

Estimate
~13h
Steps
7
Completed by
0
Proposed by
codeseed.app

tidyverse · Shiny · ggplot2 · shinytest2

Project roadmap

  1. 01

    Define the app

    ~1.5h

    Write README.md: what the app accepts (CSV files up to a size limit), the four areas (overview, missing values, distributions, and validation rules), the rule types (required, numeric range, allowed values, pattern and unique), and the downloadable report. Prepare 2 messy sample files with known problems to test with. Done when: README.md describes every area and rule type.

  2. 02

    Upload and profile the data

    ~2h

    Build the app with fileInput and read the file with readr, detecting column types and reporting parsing problems (readr::problems). Show an overview: number of rows and columns, column types, duplicate rows, and memory size. Handle files that fail to parse, empty files and files over the limit with clear messages. Done when: uploading each sample file shows a correct overview.

  3. 03

    Show missing values

    ~1.5h

    Calculate the share of missing values per column (treating empty strings and values like NA or n/a as missing), and show it as a sorted bar chart and a table. Add a chart showing which rows have missing values, to spot patterns such as whole sections missing. Done when: the missing values match what you know is in the sample files.

  4. 04

    Show distributions

    ~2h

    Let the user pick a column: numeric columns show a histogram and summary statistics (min, quartiles, max, mean, and outliers by the IQR rule); text columns show the most common values and the number of distinct values. Flag columns that look suspicious: a single value only, numbers stored as text, or very rare categories. Done when: each column type shows a suitable chart and summary.

  5. 05

    Add validation rules

    ~2.5h

    Let users add rules through the interface (choosing a column, a rule type and its settings) and remove them, keeping them in a reactiveVal. Evaluate each rule with dplyr and show, per rule, the number of failing rows and a table of those rows. Allow downloading and uploading the rules as a JSON file, so they can be reused. Done when: rules find exactly the planted problems in the sample files.

  6. 06

    Download a report

    ~1.5h

    Add a download button that renders an HTML report (with R Markdown or Quarto) containing the overview, missing values, flagged columns, and each rule with its failing row count and a sample of failing rows. Done when: the downloaded report contains the same results as the app.

  7. 07

    Test it

    ~2h

    Move the profiling and rule functions into a separate file and test them with testthat on small data frames (each rule type, missing value detection and outliers). Add a shinytest2 test that uploads a sample file and checks the overview. Done when: all tests pass.

Ready to build this?

Get a GitHub repo and start building. Your AI reviewer checks each step as you go.

~13h · 7 steps

Tech stack

tidyverseShinyggplot2shinytest2