data trove chocolate origins
Reading
This dataset contains 2,530 chocolate bar reviews covering bean origins, cocoa percentages, ingredients, and expert ratings across reviews dated 2006–2021. Two things stand out: first, cocoa percent clusters tightly between 70–74% but has 235 outliers (9.3%) stretching up to 100%, suggesting a small but notable group of ultra-dark bars worth investigating. Second, ratings skew modestly negative with a mean of 3.20 and median of 3.25 out of 4.0, indicating most bars are rated good-to-very-good — but the distribution of scores by bean origin (Venezuela, Peru, Dominican Republic, and Ecuador dominate) could reveal whether provenance drives quality. The 'company' column is entirely blank and should be ignored.
citing: cocoa_percent.stats.mean · cocoa_percent.stats.n_outliers · cocoa_percent.stats.outlier_rate · cocoa_percent.stats.q1 · cocoa_percent.stats.q3 · rating.stats.mean · rating.stats.median · rating.stats.max · country_of_bean_origin.top_values · company_location.stats.top_value · company_location.stats.top_rate · ingredients.top_values · review_date.stats.min · review_date.stats.max
Charts the summary said to look at first
Show data table
| bin | count |
|---|---|
| 1 – 1.075 | 4 |
| 1.075 – 1.15 | 0 |
| 1.15 – 1.225 | 0 |
| 1.225 – 1.3 | 0 |
| 1.3 – 1.375 | 0 |
| 1.375 – 1.45 | 0 |
| 1.45 – 1.525 | 10 |
| 1.525 – 1.6 | 0 |
| 1.6 – 1.675 | 0 |
| 1.675 – 1.75 | 0 |
| 1.75 – 1.825 | 3 |
| 1.825 – 1.9 | 0 |
| 1.9 – 1.975 | 0 |
| 1.975 – 2.05 | 33 |
| 2.05 – 2.125 | 0 |
| 2.125 – 2.2 | 0 |
| 2.2 – 2.275 | 17 |
| 2.275 – 2.35 | 0 |
| 2.35 – 2.425 | 0 |
| 2.425 – 2.5 | 0 |
| 2.5 – 2.575 | 166 |
| 2.575 – 2.65 | 0 |
| 2.65 – 2.725 | 0 |
| 2.725 – 2.8 | 333 |
| 2.8 – 2.875 | 0 |
| 2.875 – 2.95 | 0 |
| 2.95 – 3.025 | 523 |
| 3.025 – 3.1 | 0 |
| 3.1 – 3.175 | 0 |
| 3.175 – 3.25 | 0 |
| 3.25 – 3.325 | 464 |
| 3.325 – 3.4 | 0 |
| 3.4 – 3.475 | 0 |
| 3.475 – 3.55 | 565 |
| 3.55 – 3.625 | 0 |
| 3.625 – 3.7 | 0 |
| 3.7 – 3.775 | 300 |
| 3.775 – 3.85 | 0 |
| 3.85 – 3.925 | 0 |
| 3.925 – 4 | 112 |
Show data table
| value | count | share |
|---|---|---|
| Venezuela | 253 | 10.0% |
| Peru | 244 | 9.6% |
| Dominican Republic | 226 | 8.9% |
| Ecuador | 219 | 8.7% |
| Madagascar | 177 | 7.0% |
| Blend | 156 | 6.2% |
| Nicaragua | 100 | 4.0% |
| Bolivia | 80 | 3.2% |
| Tanzania | 79 | 3.1% |
| Colombia | 79 | 3.1% |
| Brazil | 78 | 3.1% |
| Belize | 76 | 3.0% |
| Vietnam | 73 | 2.9% |
| Guatemala | 62 | 2.5% |
| Mexico | 55 | 2.2% |
| Papua New Guinea | 50 | 2.0% |
| Costa Rica | 43 | 1.7% |
| Trinidad | 42 | 1.7% |
| Ghana | 41 | 1.6% |
| India | 35 | 1.4% |
Show data table
| bin | count |
|---|---|
| 42 – 43.45 | 1 |
| 43.45 – 44.9 | 0 |
| 44.9 – 46.35 | 1 |
| 46.35 – 47.8 | 0 |
| 47.8 – 49.25 | 0 |
| 49.25 – 50.7 | 1 |
| 50.7 – 52.15 | 0 |
| 52.15 – 53.6 | 1 |
| 53.6 – 55.05 | 16 |
| 55.05 – 56.5 | 2 |
| 56.5 – 57.95 | 1 |
| 57.95 – 59.4 | 8 |
| 59.4 – 60.85 | 47 |
| 60.85 – 62.3 | 23 |
| 62.3 – 63.75 | 14 |
| 63.75 – 65.2 | 124 |
| 65.2 – 66.65 | 28 |
| 66.65 – 68.1 | 106 |
| 68.1 – 69.55 | 13 |
| 69.55 – 71 | 1046 |
| 71 – 72.45 | 340 |
| 72.45 – 73.9 | 72 |
| 73.9 – 75.35 | 377 |
| 75.35 – 76.8 | 35 |
| 76.8 – 78.25 | 63 |
| 78.25 – 79.7 | 2 |
| 79.7 – 81.15 | 95 |
| 81.15 – 82.6 | 18 |
| 82.6 – 84.05 | 9 |
| 84.05 – 85.5 | 40 |
| 85.5 – 86.95 | 1 |
| 86.95 – 88.4 | 9 |
| 88.4 – 89.85 | 2 |
| 89.85 – 91.3 | 12 |
| 91.3 – 92.75 | 0 |
| 92.75 – 94.2 | 0 |
| 94.2 – 95.65 | 0 |
| 95.65 – 97.1 | 0 |
| 97.1 – 98.55 | 0 |
| 98.55 – 100 | 23 |
Show data table
| value | count | share |
|---|---|---|
| U.S.A. | 1136 | 44.9% |
| Canada | 177 | 7.0% |
| France | 176 | 7.0% |
| U.K. | 133 | 5.3% |
| Italy | 78 | 3.1% |
| Belgium | 63 | 2.5% |
| Ecuador | 58 | 2.3% |
| Australia | 53 | 2.1% |
| Switzerland | 44 | 1.7% |
| Germany | 42 | 1.7% |
| Spain | 36 | 1.4% |
| Venezuela | 31 | 1.2% |
| Japan | 31 | 1.2% |
| Denmark | 31 | 1.2% |
| Austria | 30 | 1.2% |
| Colombia | 29 | 1.1% |
| New Zealand | 27 | 1.1% |
| Hungary | 26 | 1.0% |
| Brazil | 25 | 1.0% |
| Peru | 23 | 0.9% |
Show data table
| value | count | share |
|---|---|---|
| 3- B,S,C | 999 | 39.5% |
| 2- B,S | 718 | 28.4% |
| 4- B,S,C,L | 286 | 11.3% |
| 5- B,S,C,V,L | 184 | 7.3% |
| 4- B,S,C,V | 141 | 5.6% |
| 87 | 3.4% | |
| 2- B,S* | 31 | 1.2% |
| 4- B,S*,C,Sa | 20 | 0.8% |
| 3- B,S*,C | 12 | 0.5% |
| 3- B,S,L | 8 | 0.3% |
| 4- B,S*,C,V | 7 | 0.3% |
| 5-B,S,C,V,Sa | 6 | 0.2% |
| 1- B | 6 | 0.2% |
| 4- B,S,V,L | 5 | 0.2% |
| 4- B,S,C,Sa | 5 | 0.2% |
| 6-B,S,C,V,L,Sa | 4 | 0.2% |
| 3- B,S,V | 3 | 0.1% |
| 4- B,S*,V,L | 3 | 0.1% |
| 4- B,S*,C,L | 2 | 0.1% |
| 3- B,S*,Sa | 1 | 0.0% |
Schema
10 columns| Alerts | ||||
|---|---|---|---|---|
| ref | categorical | 0.0% | 630 |
|
| company | categorical | 0.0% | 1 |
imbalance
|
| company_location | categorical | 0.0% | 67 |
|
| review_date | numeric | 0.0% | 16 |
|
| country_of_bean_origin | categorical | 0.0% | 62 |
|
| specific_bean_origin | text | 0.0% | 1,605 |
one_word
duplicates
|
| cocoa_percent | numeric | 0.0% | 46 |
outliers
|
| ingredients | categorical | 0.0% | 22 |
|
| most_memorable_characteristics | text | 0.0% | 2,487 |
near_unique
|
| rating | numeric | 0.0% | 12 |
|
ref
categorical foreign_keyThis column appears to be a numeric reference or ID code stored as a categorical string, likely a ticket number, document reference, or external record identifier. With 630 unique values across 2,530 rows, the average reuse rate is ~4 rows per value, and the entropy ratio of 0.9954 is nearly maximal, indicating an almost-uniform distribution with no dominant category. The most frequent value ('414') appears only 10 times (top_rate ≈ 0.004), confirming no single reference dominates—but the non-unique nature rules out a pure primary key, suggesting these are foreign references that recur legitimately. Treatment: Left-join or group-by on this reference ID; verify the target table to confirm referential integrity.
- n
- 2,530
- nulls
- 0 (0.0%)
- unique
- 630
- top_value
- 414
- top_rate
- 0.003953
- cardinality
- 630
- entropy
- 9.257
- entropy_ratio
- 0.9954
company
categorical other imbalanceThis column is intended to capture a company name but contains a single blank string across all 2,530 rows — it is effectively empty. Cardinality is 1, entropy is 0, and the top value is an empty string with a 100% hit rate, meaning the field was never populated. This is a completely uninformative column with zero analytical value. Treatment: Drop entirely; the column carries no information and is populated only with empty strings.
- n
- 2,530
- nulls
- 0 (0.0%)
- unique
- 1
- top_value
- top_rate
- 1
- cardinality
- 1
- entropy
- 0
- entropy_ratio
- 0
company_location
categorical featureThis column encodes the country of company headquarters across 2,530 records, with 67 distinct country values and zero nulls. The distribution is heavily US-dominated: 'U.S.A.' alone accounts for 44.9% of all rows (1,136 of 2,530), nearly 6.4× the next most frequent country (Canada at 177). The entropy ratio of 0.606 confirms moderate-to-high concentration despite 67 categories, and the presence of both abbreviations ('U.S.A.', 'U.K.') and full names ('Canada', 'France') suggests inconsistent formatting that may complicate grouping or joining. Treatment: Standardise country name formats (e.g. 'U.S.A.' → 'USA'), then one-hot or target-encode for modelling, noting the strong US imbalance.
- n
- 2,530
- nulls
- 0 (0.0%)
- unique
- 67
- top_value
- U.S.A.
- top_rate
- 0.449
- cardinality
- 67
- entropy
- 3.675
- entropy_ratio
- 0.6058
review_date
numeric timestampThis column contains review years, stored as numeric integers spanning 2006 to 2021 — a 16-year range with only 16 distinct values, confirming it is a year-granularity timestamp rather than a full date. The distribution is nearly symmetric (skew −0.18, kurtosis −0.77) with a median of 2015 and an IQR of 6 years, suggesting fairly even coverage across the mid-2010s. Notably, 2530 rows collapse into just 16 discrete year values, meaning this field carries no finer temporal resolution and may limit time-series analyses that require month- or day-level precision. Treatment: Cast to integer year; use as a categorical or ordinal time feature, or bin into periods — do not treat as a continuous numeric.
- n
- 2,530
- nulls
- 0 (0.0%)
- unique
- 16
- min
- 2,006
- max
- 2,021
- mean
- 2014
- median
- 2,015
- std
- 3.968
- q1
- 2,012
- q3
- 2,018
- iqr
- 6
- skew
- -0.1833
- kurtosis
- -0.7727
- n_outliers
- 0
- outlier_rate
- 0
- zero_rate
- 0
country_of_bean_origin
categorical featureThis column records the country of origin for cacao beans used in chocolate production, covering 62 distinct origins across 2,530 rows with no nulls. The distribution is fairly broad (entropy ratio 0.79), with Venezuela leading at exactly 10% (253 rows), followed closely by Peru (244) and Dominican Republic (226) — no single origin dominates heavily. Notably, 'Blend' appears as a pseudo-origin with 156 entries, meaning ~6% of records are multi-origin mixtures rather than single-country sourced beans, which may need special handling in origin-based analyses. Treatment: One-hot or target-encode for modelling; isolate or flag 'Blend' records as a separate category before any geographic or single-origin analysis.
- n
- 2,530
- nulls
- 0 (0.0%)
- unique
- 62
- top_value
- Venezuela
- top_rate
- 0.1
- cardinality
- 62
- entropy
- 4.717
- entropy_ratio
- 0.7921
specific_bean_origin
text feature one_word duplicatesThis column captures the specific geographic or farm-level origin of cacao beans used in chocolate production, ranging from country-level names (Madagascar, Ecuador, Peru) to named estates and cooperatives (Kokoa Kamili, Chuao, Sambirano). The duplicate rate of 36.6% is expected for a categorical-like origin field with 1,605 unique values out of 2,530 rows, but the top word 'batch' appearing 356 times is surprising — nearly 14% of entries reference a batch identifier, suggesting some values encode both origin and batch metadata in a single field. One-word entries account for 33.8% of values (country-level origins), while multi-word entries average ~2.7 words, reflecting finer geographic or supplier granularity. Treatment: Normalize by extracting country-level tokens separately; flag 'batch'-containing entries for parsing or exclusion before grouping or encoding.
- n
- 2,530
- nulls
- 0 (0.0%)
- unique
- 1,605
- len_min
- 3
- len_max
- 51
- len_mean
- 17.12
- len_median
- 14
- len_p95
- 39
- word_mean
- 2.681
- word_median
- 2
- n_empty
- 0
- n_duplicates
- 925
- duplicate_rate
- 0.3656
- vocab_size
- 2,079
- readability_flesch_mean
- 28.41
- emoji_rate
- 0
- url_rate
- 0
- one_word_rate
- 0.3375
- allcaps_rate
- 0.001581
- boilerplate_rate
- 0
cocoa_percent
numeric feature outliersThis column records cocoa percentage for chocolate products, ranging from 42% to 100% across 2,530 rows with no nulls and only 46 distinct values. The distribution is tightly clustered — Q1 and median both sit at 70%, Q3 at 74%, giving an IQR of just 4 — but is right-skewed (skew 1.20) with high kurtosis (6.54), driven by 235 outliers (9.3%) that stretch toward extreme values like 100%. The narrow IQR relative to the full range (42–100) suggests most chocolates fall in a standard dark-chocolate band, with a long tail of unusually high-cocoa products pulling the mean (71.64) above the median. Treatment: Use as-is or apply mild Winsorization at the upper tail to dampen the 9.3% outlier influence before modelling.
- n
- 2,530
- nulls
- 0 (0.0%)
- unique
- 46
- min
- 42
- max
- 100
- mean
- 71.64
- median
- 70
- std
- 5.617
- q1
- 70
- q3
- 74
- iqr
- 4
- skew
- 1.198
- kurtosis
- 6.541
- n_outliers
- 235
- outlier_rate
- 0.09289
- zero_rate
- 0
ingredients
categorical featureThis column encodes a structured ingredient combination label for each record, consisting of a count prefix (e.g., '3-') followed by abbreviated ingredient codes (B, S, C, L, V, Sa). With only 22 distinct values across 2,530 rows it functions as a categorical feature rather than free text. Notably, 87 rows carry an empty string despite a reported null_rate of 0.0, which is a hidden missingness issue that needs handling. The top value '3- B,S,C' dominates at ~39.5% of rows, and starred variants (e.g., 'B,S*') suggest a meaningful sub-type modifier that distinguishes at least some categories. Treatment: Treat empty-string entries as missing; one-hot encode or ordinal-encode the 22 categories, or decompose into numeric ingredient count and individual binary ingredient flags.
- n
- 2,530
- nulls
- 0 (0.0%)
- unique
- 22
- top_value
- 3- B,S,C
- top_rate
- 0.3949
- cardinality
- 22
- entropy
- 2.43
- entropy_ratio
- 0.545
most_memorable_characteristics
text free_text near_uniqueThis column contains short, comma-separated flavor/texture descriptor phrases for what appears to be a chocolate or confectionery dataset — top words include 'cocoa', 'sweet', 'nutty', 'creamy', 'sandy', and 'fatty'. With 2487 unique values out of 2530 rows and a mean of ~3.4 words per entry (median 23 characters), entries are brief multi-attribute tags rather than free prose, yet near-uniqueness is triggered by the combinatorial variety of descriptors. Only 43 duplicates exist across 2530 rows (1.7% duplicate rate), and the vocabulary of 868 words suggests a constrained but richly combined descriptor lexicon. Treatment: Split on commas to explode into multi-hot flavor tags, then use as categorical features or embed for similarity modelling.
- n
- 2,530
- nulls
- 0 (0.0%)
- unique
- 2,487
- len_min
- 3
- len_max
- 37
- len_mean
- 23.06
- len_median
- 23
- len_p95
- 30
- word_mean
- 3.376
- word_median
- 3
- n_empty
- 0
- n_duplicates
- 43
- duplicate_rate
- 0.017
- vocab_size
- 868
- readability_flesch_mean
- 49.71
- emoji_rate
- 0
- url_rate
- 0
- one_word_rate
- 0.007115
- allcaps_rate
- 0
- boilerplate_rate
- 0
rating
numeric featureThis column is a discrete rating scale, almost certainly a user or product rating, with only 12 distinct values across 2,530 records and no nulls. The range is 1.0–4.0 (notably not the common 1–5 or 1–10 scale), suggesting a 4-point Likert or star-rating system. The distribution is left-skewed (skew = -0.608) and tightly clustered — IQR of just 0.5, with Q1=3.0 and Q3=3.5 — indicating a strong ceiling effect where most responses pile up near the top. Only 50 outliers (1.98%) exist, likely low ratings near 1.0. Treatment: Treat as ordinal categorical or keep numeric; consider ceiling-effect bias before using as a target or feature in regression.
- n
- 2,530
- nulls
- 0 (0.0%)
- unique
- 12
- min
- 1
- max
- 4
- mean
- 3.196
- median
- 3.25
- std
- 0.4453
- q1
- 3
- q3
- 3.5
- iqr
- 0.5
- skew
- -0.6084
- kurtosis
- 1.053
- n_outliers
- 50
- outlier_rate
- 0.01976
- zero_rate
- 0