30DayChartChallenge 2022: Food Pairing

Exploring cuisine ingredient patterns using a food pairing dataset — finding the most popular ingredients per cuisine and scoring recipes by how ‘typical’ their ingredient combinations are.
R
dataviz
30DayChartChallenge
Published

April 20, 2022

This entry explores a food pairing dataset that lists recipes by cuisine alongside their ingredient lists. The data comes from the supplementary material of a Nature Scientific Reports paper on flavour networks.

Loading the data

recipes_raw <- read_table(
  quarto_here(
    "srep00196-s3.csv"
  ),
  skip = 4,
  col_names = c("raw_recipe", "other")
)
Warning: 56498 parsing failures.
row col  expected    actual                                                                                      file
  1  -- 2 columns 1 columns '/Users/charliejhadley/Github/charliejhadley-website/posts/2022-04-20_2/srep00196-s3.csv'
  2  -- 2 columns 1 columns '/Users/charliejhadley/Github/charliejhadley-website/posts/2022-04-20_2/srep00196-s3.csv'
  3  -- 2 columns 1 columns '/Users/charliejhadley/Github/charliejhadley-website/posts/2022-04-20_2/srep00196-s3.csv'
  4  -- 2 columns 1 columns '/Users/charliejhadley/Github/charliejhadley-website/posts/2022-04-20_2/srep00196-s3.csv'
  5  -- 2 columns 1 columns '/Users/charliejhadley/Github/charliejhadley-website/posts/2022-04-20_2/srep00196-s3.csv'
... ... ......... ......... .........................................................................................
See problems(...) for more details.
recipes_data <- recipes_raw |>
  mutate(cuisine = str_extract(raw_recipe, "[A-z]{1,}(?=,)")) |>
  mutate(
    ingredients_list = str_remove(raw_recipe, "[A-z]{1,},"),
    ingredients_list = str_split(ingredients_list, ",")
  ) |>
  select(cuisine, ingredients_list) |>
  mutate(recipe_id = row_number()) |>
  relocate(recipe_id)

Scoring recipes by typicality

A recipe’s “typicality” score is the average popularity rank of its ingredients within its cuisine. Higher scores mean the recipe leans on the most-used ingredients for that style.

highest_scoring_recipes <- recipes_data |>
  unnest(ingredients_list) |>
  add_count(cuisine, ingredients_list, name = "n_ingredient_by_cuisine") |>
  group_by(recipe_id) |>
  mutate(score_ingredient_list = sum(n_ingredient_by_cuisine) / n()) |>
  ungroup() |>
  group_by(cuisine) |>
  slice_max(score_ingredient_list, n = 5) |>
  mutate(ingr = paste(ingredients_list, collapse = ", ")) |>
  ungroup() |>
  select(cuisine, score_ingredient_list, ingr)

highest_scoring_recipes |>
  knitr::kable(
    digits = 1,
    col.names = c("Cuisine", "Typicality score", "Ingredients")
  )
Cuisine Typicality score Ingredients
African 131.5 tomato, olive_oil, wheat, bell_pepper, garlic, cayenne
African 131.5 tomato, olive_oil, wheat, bell_pepper, garlic, cayenne
African 131.5 tomato, olive_oil, wheat, bell_pepper, garlic, cayenne
African 131.5 tomato, olive_oil, wheat, bell_pepper, garlic, cayenne
African 131.5 tomato, olive_oil, wheat, bell_pepper, garlic, cayenne
African 131.5 tomato, olive_oil, wheat, bell_pepper, garlic, cayenne
EastAsian 1067.7 vinegar, soy_sauce, garlic, vinegar, soy_sauce, garlic
EastAsian 1067.7 vinegar, soy_sauce, garlic, vinegar, soy_sauce, garlic
EastAsian 1067.7 vinegar, soy_sauce, garlic, vinegar, soy_sauce, garlic
EastAsian 1067.7 vinegar, soy_sauce, garlic, vinegar, soy_sauce, garlic
EastAsian 1067.7 vinegar, soy_sauce, garlic, vinegar, soy_sauce, garlic
EastAsian 1067.7 vinegar, soy_sauce, garlic, vinegar, soy_sauce, garlic
EasternEuropean 197.0 egg, wheat, butter, egg, wheat, cream
EasternEuropean 197.0 egg, wheat, butter, egg, wheat, cream
EasternEuropean 176.5 egg, wheat, butter, egg, wheat, cream
EasternEuropean 176.5 egg, wheat, butter, egg, wheat, cream
EasternEuropean 176.5 egg, wheat, butter, egg, wheat, cream
EasternEuropean 176.5 egg, wheat, butter, egg, wheat, cream
LatinAmerican 1762.5 tomato, cayenne, tomato, cayenne, garlic, cayenne, cumin, onion
LatinAmerican 1762.5 tomato, cayenne, tomato, cayenne, garlic, cayenne, cumin, onion
LatinAmerican 1762.5 tomato, cayenne, tomato, cayenne, garlic, cayenne, cumin, onion
LatinAmerican 1762.5 tomato, cayenne, tomato, cayenne, garlic, cayenne, cumin, onion
LatinAmerican 1609.2 tomato, cayenne, tomato, cayenne, garlic, cayenne, cumin, onion
LatinAmerican 1609.2 tomato, cayenne, tomato, cayenne, garlic, cayenne, cumin, onion
LatinAmerican 1609.2 tomato, cayenne, tomato, cayenne, garlic, cayenne, cumin, onion
LatinAmerican 1609.2 tomato, cayenne, tomato, cayenne, garlic, cayenne, cumin, onion
MiddleEastern 237.0 olive_oil, garlic, butter, egg, wheat, butter, egg, wheat, butter, egg, wheat
MiddleEastern 237.0 olive_oil, garlic, butter, egg, wheat, butter, egg, wheat, butter, egg, wheat
MiddleEastern 225.3 olive_oil, garlic, butter, egg, wheat, butter, egg, wheat, butter, egg, wheat
MiddleEastern 225.3 olive_oil, garlic, butter, egg, wheat, butter, egg, wheat, butter, egg, wheat
MiddleEastern 225.3 olive_oil, garlic, butter, egg, wheat, butter, egg, wheat, butter, egg, wheat
MiddleEastern 225.3 olive_oil, garlic, butter, egg, wheat, butter, egg, wheat, butter, egg, wheat
MiddleEastern 225.3 olive_oil, garlic, butter, egg, wheat, butter, egg, wheat, butter, egg, wheat
MiddleEastern 225.3 olive_oil, garlic, butter, egg, wheat, butter, egg, wheat, butter, egg, wheat
MiddleEastern 225.3 olive_oil, garlic, butter, egg, wheat, butter, egg, wheat, butter, egg, wheat
MiddleEastern 225.3 olive_oil, garlic, butter, egg, wheat, butter, egg, wheat, butter, egg, wheat
MiddleEastern 225.3 olive_oil, garlic, butter, egg, wheat, butter, egg, wheat, butter, egg, wheat
NorthAmerican 17088.0 butter, butter, butter, butter, butter
NorthAmerican 17088.0 butter, butter, butter, butter, butter
NorthAmerican 17088.0 butter, butter, butter, butter, butter
NorthAmerican 17088.0 butter, butter, butter, butter, butter
NorthAmerican 17088.0 butter, butter, butter, butter, butter
NorthernEuropean 145.7 butter, wheat, egg, butter, wheat, egg
NorthernEuropean 145.7 butter, wheat, egg, butter, wheat, egg
NorthernEuropean 145.7 butter, wheat, egg, butter, wheat, egg
NorthernEuropean 145.7 butter, wheat, egg, butter, wheat, egg
NorthernEuropean 145.7 butter, wheat, egg, butter, wheat, egg
NorthernEuropean 145.7 butter, wheat, egg, butter, wheat, egg
SouthAsian 290.5 vegetable_oil, onion, vegetable_oil, cayenne, garlic
SouthAsian 290.5 vegetable_oil, onion, vegetable_oil, cayenne, garlic
SouthAsian 286.7 vegetable_oil, onion, vegetable_oil, cayenne, garlic
SouthAsian 286.7 vegetable_oil, onion, vegetable_oil, cayenne, garlic
SouthAsian 286.7 vegetable_oil, onion, vegetable_oil, cayenne, garlic
SoutheastAsian 214.0 garlic, fish, lime_juice, garlic, fish, lime_juice
SoutheastAsian 214.0 garlic, fish, lime_juice, garlic, fish, lime_juice
SoutheastAsian 214.0 garlic, fish, lime_juice, garlic, fish, lime_juice
SoutheastAsian 214.0 garlic, fish, lime_juice, garlic, fish, lime_juice
SoutheastAsian 214.0 garlic, fish, lime_juice, garlic, fish, lime_juice
SoutheastAsian 214.0 garlic, fish, lime_juice, garlic, fish, lime_juice
SouthernEuropean 2396.5 olive_oil, garlic, tomato, olive_oil, tomato, olive_oil, onion
SouthernEuropean 2396.5 olive_oil, garlic, tomato, olive_oil, tomato, olive_oil, onion
SouthernEuropean 2102.5 olive_oil, garlic, tomato, olive_oil, tomato, olive_oil, onion
SouthernEuropean 2102.5 olive_oil, garlic, tomato, olive_oil, tomato, olive_oil, onion
SouthernEuropean 1885.3 olive_oil, garlic, tomato, olive_oil, tomato, olive_oil, onion
SouthernEuropean 1885.3 olive_oil, garlic, tomato, olive_oil, tomato, olive_oil, onion
SouthernEuropean 1885.3 olive_oil, garlic, tomato, olive_oil, tomato, olive_oil, onion
WesternEuropean 1395.0 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat
WesternEuropean 1336.5 butter, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat, butter, wheat