Viewing a saved revision (read-only)
0u83hBJbwZHXmv9A_MTRg
Data Analysis — major_occupations.csv
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.
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 showsai_exposure. - Interaction/annotation: Toggle between the pair view and the occupation view.
- Implementation note: Use
d3.rollupbysocand check that the values are identical within each group.
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.
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.binwith about 30 bins and a shared selection state.
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.
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.
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.
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.
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.
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.
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
cip4as a string to preserve leading zeros, and jitter deterministically.
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_exposureand 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.
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.rollupwith aSetand show the top 25.
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.hierarchyon two-digit CIP, thenfield_of_study.
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.binor a KDE with a shared x-scale and a minimum group size.
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.
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.
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
socand used3.sort.
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.meanand draw reference lines in the existing zoomable layer.
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).
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
occupationandfield_of_study, and reuse the existingdotsselection to change opacity.