Skip to content

Commit 616d0e4

Browse files
committed
docs(m3): update README and Process Book with geographic section, 3rd member, 10 visualizations
1 parent f5dcf70 commit 616d0e4

3 files changed

Lines changed: 48 additions & 26 deletions

File tree

README.md

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# The Anatomy of Scent
22

3-
An interactive scrollytelling data visualization exploring what makes a perfume attractive, how composition influences popularity, and what trends define modern perfumery.
3+
*Making scents of 24,000 perfumes — a statistical journey through the invisible art of fragrance.*
44

55
**Live site**: [com-480-dataviz.vercel.app](https://com-480-dataviz.vercel.app)
66

@@ -14,20 +14,21 @@ An interactive scrollytelling data visualization exploring what makes a perfume
1414

1515
## About
1616

17-
This project analyzes 24,063 perfumes from the Fragrantica dataset and 2,000+ eBay listings to uncover patterns in fragrance composition, gender preferences, temporal trends, and market pricing. The story is told through a scrollytelling website with 8 interactive D3.js visualizations.
17+
This project analyzes 24,063 perfumes from the Fragrantica dataset and 2,000+ eBay listings to uncover patterns in fragrance composition, gender preferences, temporal trends, geographic differences, and market pricing. The story is told through a scrollytelling website with 10 interactive D3.js visualizations.
1818

1919
## Visualizations
2020

21-
| # | Visualization | Type | Data Source |
21+
| # | Section | Type | Interaction |
2222
| --- | --- | --- | --- |
23-
| 1 | The Building Blocks | Force-directed beeswarm | notes_stats.json |
24-
| 2 | His & Hers | Dual radar charts | notes_stats.json |
25-
| 3 | The Ratings Game | Scatter/bubble chart | notes_stats.json |
26-
| 4 | Fifty Years of Fragrance | Stacked area chart | temporal_trends.json |
27-
| 5 | The Price of Scent | Beeswarm strip plot | price_data.json |
28-
| 6a | Note Connections | Chord diagram | chord_data.json |
29-
| 6b | Flow of Fragrance | Sankey diagram | sankey_data.json |
30-
| 7 | The Full Picture | Interactive heatmap | accords_data.json |
23+
| 1 | The Building Blocks | Force-directed beeswarm | Hover bubbles for note details |
24+
| 2 | His & Hers | Dual radar charts | Hover axes, toggle unisex overlay |
25+
| 3 | The Ratings Game | Scatter/bubble chart | Hover dots for note + rating |
26+
| 4 | Fifty Years of Fragrance | Stacked area chart | Hover to explore decade trends |
27+
| 5 | The Price of Scent | Beeswarm strip plot | Hover for brand + price + type |
28+
| 6a | Note Connections | Chord diagram | Hover notes for strongest pairings |
29+
| 6b | Flow of Fragrance | Sankey diagram | Hover to trace note layers |
30+
| 7 | The Geography of Scent | World map + radar chart | Hover map regions, click step cards |
31+
| 8 | The Full Picture | Interactive heatmap | Click accords for co-occurrence |
3132

3233
## Technical Setup
3334

@@ -53,26 +54,38 @@ The processed JSON files are already included in `docs/data/`. To regenerate fro
5354
cd src
5455
pip3 install pandas
5556
python3 compute_advanced_data.py
57+
python3 compute_geo_data.py
5658
```
5759

5860
## Project Structure
5961

6062
```
6163
docs/ # Deployable website (served by Vercel)
62-
index.html # Scrollytelling main page
64+
index.html # Scrollytelling main page (8 sections + hero + footer)
6365
css/style.css # Dark luxury theme (Cormorant Garamond + DM Sans)
6466
js/main.js # Scrollama setup, navigation, shared utilities
65-
js/visualizations/ # One module per D3.js visualization (8 files)
66-
data/ # Pre-processed JSON files for D3.js
67+
js/visualizations/ # One module per D3.js visualization (10 files)
68+
beeswarm.js # Force-directed note frequency constellation
69+
radar.js # Gender comparison spider charts
70+
bubbles.js # Rating vs frequency scatter
71+
timeline.js # Stacked area temporal trends
72+
price.js # eBay price strip plot
73+
chord.js # Note co-occurrence chord diagram
74+
sankey.js # Top→middle→base note flow
75+
geo-radar.js # Geographic radar utilities
76+
geo-map.js # World choropleth + radar integration
77+
heatmap.js # Accord frequency interactive heatmap
78+
data/ # Pre-processed JSON files for D3.js (8 files)
6779
data/ # Raw datasets (not tracked — download from Kaggle)
6880
milestones/ # Milestone reports + process book
6981
src/ # Python preprocessing scripts
7082
```
7183

7284
## Tech Stack
7385

74-
- **D3.js v7** — all 8 interactive visualizations
86+
- **D3.js v7** — all 10 interactive visualizations
7587
- **Scrollama** — scroll-driven narrative transitions (IntersectionObserver)
88+
- **TopoJSON** — world map geographic data (CDN)
7689
- **d3-sankey** — Sankey diagram layout
7790
- **Vanilla HTML/CSS/JS** — no framework, no build step
7891
- **Python + pandas** — data preprocessing pipeline
@@ -82,7 +95,7 @@ src/ # Python preprocessing scripts
8295

8396
Raw datasets are not included in the repository (too large). Download from Kaggle:
8497

85-
- [Fragrantica Fragrance Dataset](https://www.kaggle.com/datasets/olgagmiufana1/fragrantica-com-fragrance-dataset) (~24K perfumes with notes, ratings, accords, gender, year)
98+
- [Fragrantica Fragrance Dataset](https://www.kaggle.com/datasets/olgagmiufana1/fragrantica-com-fragrance-dataset) (~24K perfumes with notes, ratings, accords, gender, year, country)
8699
- [Perfume E-Commerce Dataset 2024](https://www.kaggle.com/datasets/kanchana1990/perfume-e-commerce-dataset-2024) (~2K eBay listings with pricing)
87100

88101
## Milestone 1 (20th March, 5pm)

milestones/ProcessBook.html

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -503,35 +503,44 @@ <h2>Key Insights</h2>
503503
<strong>Composition trends mirror culture; price does not mirror composition.</strong> The timeline reveals a clear arc from aldehydic glamour (1970s) through clean aquatic (1990s) to gourmand and oud (2010s–2020s). Yet the price scatter shows no clean correlation between ingredient sophistication and market value — brand cachet drives pricing more than raw composition.
504504
</div>
505505

506+
<div class="insight">
507+
<strong>Geography shapes scent identity.</strong> An interactive world map with radar-on-hover (added after M2 feedback) reveals that the Middle East stands apart from every other region — higher woody, spicy, and musky proportions reflect an oud-based tradition fundamentally different from the Western floral canon. Europe and North America overlap heavily, while Asia favors lighter, citrus-forward profiles.
508+
</div>
509+
506510
<h2>Peer Assessment</h2>
507511

508-
<p>We split the work equally (50/50) with each team member owning distinct deliverables.</p>
512+
<p>We split the work across three team members, each owning distinct deliverables.</p>
509513

510514
<table class="assessment-table">
511515
<tr>
512516
<th>Area</th>
513517
<th>Alexandre Mourot</th>
514518
<th>Ga&euml;l Conde Losada</th>
519+
<th>Rayane Charif Chefchaouni</th>
515520
</tr>
516521
<tr>
517522
<td>Data</td>
518-
<td>Processing pipeline, Python scripts, JSON generation, note taxonomy mapping</td>
519-
<td>Exploratory data analysis, dataset selection, data quality assessment</td>
523+
<td>Processing pipeline, JSON generation, note taxonomy</td>
524+
<td>Exploratory data analysis, dataset selection</td>
525+
<td>Geographic data preprocessing, region mapping</td>
520526
</tr>
521527
<tr>
522528
<td>Architecture</td>
523-
<td>Website structure, scrollytelling setup with Scrollama, lazy initialization system</td>
524-
<td>Milestone reports (M1, M2), process book, testing across browsers</td>
529+
<td>Website structure, Scrollama setup, lazy init</td>
530+
<td>Milestone reports (M1, M2), process book</td>
531+
<td>World map integration, TopoJSON pipeline</td>
525532
</tr>
526533
<tr>
527534
<td>Visualizations</td>
528-
<td>Beeswarm, radar charts, bubble chart, interactive heatmap</td>
529-
<td>Chord diagram, Sankey diagram, timeline chart, price analysis</td>
535+
<td>Beeswarm, radar, bubble chart, heatmap</td>
536+
<td>Chord, Sankey, timeline, price strip</td>
537+
<td>Geographic world map, geographic radar</td>
530538
</tr>
531539
<tr>
532540
<td>Design</td>
533-
<td>CSS dark theme, responsive layout, typography, color system</td>
534-
<td>Content writing for scroll steps, narrative structure, user flow</td>
541+
<td>CSS theme, responsive layout, typography</td>
542+
<td>Narrative structure, scroll step content</td>
543+
<td>UX interaction hints, screencast</td>
535544
</tr>
536545
</table>
537546

@@ -544,7 +553,7 @@ <h2>What We Would Do Differently</h2>
544553
<h2>Conclusion</h2>
545554

546555
<p>
547-
The Anatomy of Scent transforms 24,063 rows of perfume data into a story anyone can follow. Through eight interactive visualizations and a scroll driven narrative, we made the hidden structure of perfumery visible and explorable. The project taught us that the hardest part of data visualization is not the code or the data. It is choosing what to show, when to show it, and how much to let the reader discover on their own.
556+
The Anatomy of Scent transforms 24,063 rows of perfume data into a story anyone can follow. Through ten interactive visualizations — including a world map added in response to M2 feedback — we made the hidden structure of perfumery visible and explorable across composition, gender, time, geography, and price. The project taught us that the hardest part of data visualization is not the code or the data. It is choosing what to show, when to show it, and how much to let the reader discover on their own.
548557
</p>
549558
</div>
550559

milestones/ProcessBook.pdf

8.83 KB
Binary file not shown.

0 commit comments

Comments
 (0)