Skip to main content
🌍 Public

Share visualization

Send this visualization to others.

Data Analysis — major_occupations.csv

Public visualization

Data Analysis — major_occupations.csv

0 stars2🌍 Public
CCurran Kelleher
Last edited Oct 22, 2026
Created on Oct 22, 2026

Created from react-d3-starter template

major_occupations.csv — Dataset Documentation

Dataset Overview

  • Filename: major_occupations.csv
  • Rows: 1,000
  • Columns: 7
  • Size: ~152 KB

This dataset appears to link fields of academic study (undergraduate majors, identified by a 4-digit CIP code) to occupations (identified by SOC codes), each paired with numeric scores measuring exposure to artificial intelligence. The three exposure scores — an overall score plus language- and image-specific scores — appear to be standardized indices (values include negatives and fall roughly between −3.3 and +2.4), but their exact construction is not documented in the data itself and should be treated as tentative.

Column Descriptions

Column Apparent meaning (tentative) Type (Munzner) Missing / unusual values
cip4 4-digit CIP code identifying the field/major (e.g., 0100 = Agriculture). Stored as a number, but semantically a categorical code. Range 100–4504, 222 unique. Nominal (encoded as quantitative) 0 missing. Note that leading zeros may be stripped by numeric parsing.
field_of_study Human-readable name of the field of study. 417 unique values. Nominal 0 missing. Values may contain commas, slashes, and parentheses.
soc SOC occupation code (e.g., 19-1011). 289 unique. Nominal (identifier) 0 missing.
occupation Human-readable occupation title. 289 unique. Nominal 0 missing. May contain embedded commas (quoted in CSV).
ai_exposure Overall AI exposure score for the occupation. Range approx. −2.11 to 1.53, mean ≈ 0.84. Standardization method unknown. Quantitative 0 missing.
ai_exposure_language Language-related AI exposure score. Range approx. −1.66 to 1.86, mean ≈ 0.84. Quantitative 0 missing.
ai_exposure_image Image-related AI exposure score. Range approx. −3.31 to 2.42, mean ≈ 0.78. Quantitative 0 missing.

Parsing assumptions: The header is the first CSV record and may span multiple physical lines due to quoted cells with embedded newlines; a real CSV parser is used. All numeric columns are parsed with +; invalid or missing numeric values are coerced and filtered out rather than assumed to be zero.

Visualization Mappings

Chart type: Scatter plot.

  • X axis: ai_exposure_language (quantitative)
  • Y axis: ai_exposure_image (quantitative)
  • Color: ai_exposure (overall score), a continuous sequential scale
  • Tooltip: on hover, shows occupation, field_of_study, soc, and all three exposure scores
  • Zoom/pan: d3-zoom on the plot area for exploring the dense central cluster

Rationale: The dataset's core interest is how occupations relate along language vs. image AI exposure, and how those compare to the overall exposure score. A scatter plot places each of the 1,000 field–occupation pairs in that two-dimensional space, while encoding the overall score as color lets readers see whether the overall measure tracks the language/image components. Hover tooltips are essential because the categorical labels (occupation, field_of_study) are too numerous for a legend.

Visualization Ideas

No project brief was provided, so these ideas are framed by the existing scatter plot's goal: helping a general audience (students, advisors, analysts) see how AI exposure varies across occupations and fields of study. All scores are treated as tentative, since their construction is undocumented.

  1. Occupation-Level Deduplicated Scatter

    • Main question: Does the language/image pattern hold when each occupation is counted once, not once per major?
    • Data fields: soc, occupation, ai_exposure_language, ai_exposure_image, ai_exposure
    • Visual encoding: Scatter of the 289 unique occupations; the scores are assumed constant per soc, which should be verified. Color shows ai_exposure.
    • Interaction/annotation: Toggle between the pair view and the occupation view.
    • Implementation note: Use d3.rollup by soc and check that the values are identical within each group.
  2. Field-of-Study Ranking Dot Plot

    • Main question: Which fields lead to the most AI-exposed occupations on average?
    • Data fields: field_of_study, ai_exposure
    • Visual encoding: Horizontal dot plot of the mean per field, with a min–max range line. Show the top and bottom 20 fields.
    • Interaction/annotation: Click a field to list its occupations.
    • Implementation note: Group with d3.rollup, sort, and slice. Filter out fields with only one row, or flag them.
  3. Overall Exposure Histogram

    • Main question: How is overall exposure distributed, and is it skewed?
    • Data fields: ai_exposure
    • Visual encoding: Histogram with a median line.
    • Interaction/annotation: Brush a range to highlight the matching points in the scatter.
    • Implementation note: d3.bin with about 30 bins and a shared selection state.
  4. Language vs. Overall Scatter

    • Main question: How closely does the overall score track the language component?
    • Data fields: ai_exposure_language, ai_exposure
    • Visual encoding: Scatter with a regression line and a diagonal reference line.
    • Interaction/annotation: Annotate the largest residuals.
    • Implementation note: Compute a least-squares fit manually and label the top 5 residuals.
  5. Image vs. Overall Scatter

    • Main question: Is image exposure a weaker predictor of the overall score than language exposure?
    • Data fields: ai_exposure_image, ai_exposure
    • Visual encoding: Scatter matching idea 4, with the same axes so the two can be compared side by side.
    • Interaction/annotation: Linked hover between the two panels.
    • Implementation note: Small multiples sharing the y-scale, with R² in each panel title.
  6. Scatterplot Matrix

    • Main question: How do all three scores relate pairwise?
    • Data fields: ai_exposure, ai_exposure_language, ai_exposure_image
    • Visual encoding: 3×3 matrix with scatterplots off the diagonal and histograms on it.
    • Interaction/annotation: Brush in one cell to highlight points in all cells.
    • Implementation note: Create one scale per variable and reuse the points via a shared selection set.
  7. Hexbin Density View

    • Main question: Where is the dense core hidden by overplotting?
    • Data fields: ai_exposure_language, ai_exposure_image
    • Visual encoding: Hexagonal bins with sequential color by count.
    • Interaction/annotation: Hover a hex to see its count and top occupations.
    • Implementation note: Implement a small hexbin helper, or bin by rounded coordinates.
  8. Divergence Highlight: Language minus Image

    • Main question: Which occupations are strongly language-exposed but not image-exposed, or the reverse?
    • Data fields: occupation, ai_exposure_language, ai_exposure_image
    • Visual encoding: Diverging bar chart of the difference, showing the top 15 in each direction.
    • Interaction/annotation: Hover for the occupation's three scores.
    • Implementation note: Derive the difference per unique soc, then sort.
  9. SOC Major-Group Boxplots

    • Main question: Which broad occupation families are most exposed?
    • Data fields: soc (first two digits), ai_exposure
    • Visual encoding: Boxplots per two-digit SOC prefix, ordered by median.
    • Interaction/annotation: Click a box to filter the scatter.
    • Implementation note: Derive the prefix with soc.slice(0,2). The labels are numeric codes unless you add a lookup, which would be external data, so show the codes only.
  10. CIP Family Strip Plot

    • Main question: How does exposure vary across broad fields of study?
    • Data fields: cip4 (first two digits), ai_exposure
    • Visual encoding: Jittered strip plot per CIP two-digit family, with a mean tick.
    • Interaction/annotation: Tooltip showing field_of_study.
    • Implementation note: Keep cip4 as a string to preserve leading zeros, and jitter deterministically.
  11. Field-to-Occupation Network

    • Main question: Which occupations are shared by many fields?
    • Data fields: cip4, field_of_study, soc, occupation, ai_exposure
    • Visual encoding: Bipartite force or arc layout. Occupation nodes are colored by ai_exposure and sized by the number of linked fields.
    • Interaction/annotation: Click a node to highlight its neighbors.
    • Implementation note: Build links from the rows and limit the view to a selected CIP family for readability.
  12. Occupation Degree Bar Chart

    • Main question: Which occupations are the most common destinations across majors?
    • Data fields: soc, occupation, field_of_study, ai_exposure
    • Visual encoding: Bars of the count of distinct fields per occupation, colored by exposure.
    • Interaction/annotation: Click a bar to list its fields.
    • Implementation note: Use d3.rollup with a Set and show the top 25.
  13. Treemap by CIP Family

    • Main question: Where does the data concentrate, and how exposed is each area?
    • Data fields: cip4, ai_exposure
    • Visual encoding: Treemap with area for row count and color for mean exposure.
    • Interaction/annotation: Click to zoom into the individual fields.
    • Implementation note: Use d3.hierarchy on two-digit CIP, then field_of_study.
  14. Ridgeline of Exposure by CIP Family

    • Main question: How do the shapes of the exposure distributions differ among the largest families?
    • Data fields: cip4 (prefix), ai_exposure
    • Visual encoding: Stacked density curves (ridgelines) for the families with the most rows.
    • Interaction/annotation: Hover to highlight one ridge.
    • Implementation note: Use d3.bin or a KDE with a shared x-scale and a minimum group size.
  15. Parallel Coordinates

    • Main question: Do occupations that rank high on one score rank high on the others?
    • Data fields: ai_exposure_language, ai_exposure_image, ai_exposure
    • Visual encoding: Three parallel axes with semi-transparent polylines colored by overall exposure.
    • Interaction/annotation: Brush an axis to filter the lines.
    • Implementation note: Draw lines on canvas for performance, with the axis brushes combined as an intersection.
  16. Field Profile Small Multiples

    • Main question: What does the exposure profile of a selected field's occupations look like?
    • Data fields: field_of_study, ai_exposure_language, ai_exposure_image
    • Visual encoding: A grid of mini scatterplots, one per selected field, on a shared scale with the full dataset in light gray behind.
    • Interaction/annotation: A dropdown or search box picks the fields.
    • Implementation note: Render the background points once per panel and filter by field_of_study.
  17. Top/Bottom Occupations Lollipop

    • Main question: Which specific occupations are the most and least exposed?
    • Data fields: occupation, ai_exposure
    • Visual encoding: Lollipop chart of the top 15 and bottom 15 unique occupations.
    • Interaction/annotation: Hover shows the language and image scores.
    • Implementation note: Deduplicate by soc and use d3.sort.
  18. Quadrant Scatter with Counts

    • Main question: What share of occupations is above or below average on both modalities?
    • Data fields: ai_exposure_language, ai_exposure_image
    • Visual encoding: Scatter divided into four quadrants at the means, each labeled with its count and percentage.
    • Interaction/annotation: Click a quadrant to list its occupations.
    • Implementation note: Compute the means with d3.mean and draw reference lines in the existing zoomable layer.
  19. Cumulative Distribution Comparison

    • Main question: How do the language, image, and overall distributions compare directly?
    • Data fields: ai_exposure, ai_exposure_language, ai_exposure_image
    • Visual encoding: Three ECDF step lines on one axis, distinguished by dash style and gray level.
    • Interaction/annotation: A hover crosshair reads the percentile at each value.
    • Implementation note: Sort each column and plot rank/n, using d3.line().curve(d3.curveStepAfter).
  20. Searchable Occupation Lookup Panel

    • Main question: How exposed is a particular occupation or major I care about?
    • Data fields: occupation, field_of_study, soc, cip4, all three scores
    • Visual encoding: A search box linked to the scatter. Matches are highlighted and the rest dimmed, with a small bar summary of the three scores for the selection.
    • Interaction/annotation: Type-ahead search, with the selection pinned on click.
    • Implementation note: Filter case-insensitively on occupation and field_of_study, and reuse the existing dots selection to change opacity.

Comments

Sign in to join the discussion.