你不會想要使用CORR
- 如果你創建一個「食物編號」,並指定牛肉= 1,雞= 2,和麪食= 3,那麼相關係數會告訴你奶酪增加是否與增加相關「食物編號」。但是,「食物數量」越高或越低,並不意味着任何事情,因爲你做到了。所以,不要使用CORR
,除非你的食物實際上是以某種方式訂購的,就像數字一樣。
統計學家對此的討論方式是levels of measurement。在鏈接文章的語言中,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
警告:如果您在任何一餐中包含成分兩次,則返回錯誤的結果。
編輯:事實證明,你並不特別對奶酪感興趣。你真的想要所有的「關聯」。所以,我們可以將「奶酪」抽象出來,並稱之爲第一和第二成分。我爲這個嘗試表現爲百分比膳食的「PossibleScore」添加了一個「PossibleScore」,但如果該配料的實例很少,則不會給出強大的分數。
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
這是非常好的信息。我認爲OP想要使用像corr()這樣的函數的原因是,他可以將它應用於整個數據集,而不僅僅是一種成分。 –
@James Oh;實際上這是一個很好的觀點。這是一個有趣的練習來概括我的「奶酪」表,以便它不一定稱爲「奶酪」,但我會等待聽到OP。 –
是的,我打算讓這個東西在整個數據集上運行。 – owook