Вы не захотите использовать CORR
- если вы создадите «номер еды» и назначите Beef = 1, Chicken = 2 и Pasta = 3, тогда коэффициент корреляции скажет, коррелирует ли увеличенный сыр сувеличено «количество еды».Но «число пищи», которое выше или ниже, ничего не значит, так как вы его придумали.Так что не используйте CORR
, если ваши продукты на самом деле не заказаны, как цифры.
Статистика говорит об этом с уровнями измерения .На языке связанной статьи, MEAL_NUM
является номинальной мерой - или, возможно, порядковой мерой, если питание происходило по порядку, но в любом случае, это действительно плохая идея использовать коэффициенты корреляции для него.
Вы, вероятно, вместо этого захотите найти что-то вроде «какой процент говяжьих блюд тоже имеет сыр?»Далее для каждого ингредиента будет указано количество блюд, содержащих его, а также количество блюд, содержащих его, и сыр.Хитрость в том, что COUNT
учитывает только ненулевые значения.
SELECT Other.Ingredient,
COUNT(*) AS TotalMeals,
COUNT(Cheese.Ingredient) AS CheesyMeals
FROM table Other
LEFT JOIN table Cheese
ON (Cheese.Ingredient = 'Cheese'
AND Cheese.Meal_Num = Other.Meal_Num)
GROUP BY Other.Ingredient
Предупреждение: возвращает неверные результаты, если вы включили ингредиент дважды в любой прием пищи.
Редактировать: Оказывается, вы не заинтересованы в сыре конкретно.Вы действительно хотите все пары "корреляций".Таким образом, мы можем абстрагировать «сыр» и назвать их только первым и вторым ингредиентами.Я добавил "возможный результат" к этому, который пытается вести себя как процентное соотношение еды, но не дает сильного результата, если ингредиентов очень мало.
SELECT First.Ingredient,
Second.Ingredient,
COUNT(*) AS MealsWithFirst,
COUNT(First.Ingredient) AS MealsWithBoth,
COUNT(First.Ingredient) / (COUNT(*) + 3) AS PossibleScore,
FROM table First
LEFT JOIN table Second
ON (First.Meal_Num = Second.Meal_Num)
GROUP BY First.Ingredient, Second.Ingredient
Когдаотсортировано по результату, должно получиться
PASTA CHEESE 2 2 0.400
CHEESE PASTA 3 2 0.333
BEEF CHEESE 1 1 0.250
BEEF PASTA 1 1 0.250
FISH CHEESE 1 1 0.250
FISH PASTA 1 1 0.250
CHICKEN CHEESE 1 1 0.250
PASTA BEEF 2 1 0.200
PASTA FISH 2 1 0.200
CHEESE BEEF 3 1 0.167
CHEESE FISH 3 1 0.167
CHEESE CHICKEN 3 1 0.167