「食品番号」を作成してBeef = 1、Chicken = 2、Pasta = 3を割り当てた場合、相関係数によって増加したチーズと相関するかどうかがわかります。CORR
"食べ物番号"しかし、「食べ物の数」が高いか低いかは、あなたがそれを作ってから何も意味しません。したがって、あなたの食べ物が何らかの形で実際に注文されていない限り、数字は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"をこれに追加しました。これは、食事のパーセンテージのように動作しようとしますが、原料のインスタンスが非常に少ない場合、強いスコアを与えません。
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()のような関数を使用したかった理由は、1つの要素ではなく、データ全体に適用できることだと思います。 –
@James Oh;それは実際にはとても良い点です。私の「チーズ」テーブルを一般化して、必ずしも「チーズ」とは言わないようにするのは興味深い練習ですが、私はOPから聞くのを待っています。 –
はい、私はこのことをデータセット全体で実行する予定です。 – owook