「スーパーフード」を分析,可視化,比較する
スーパーフードとは,ある栄養素(複数可)の含有量が非常に高い食物のことである.この例では,スーパーフードの集合を定義し,Wolfram Knowledgebaseの食品データを使ってより「典型的」な食品と比較する.最後に,「スーパー」という名前に値する食品にふさわしい徽章を作成する.
まず,スーパーフードとそれが含んでいることで有名な栄養素のリストを定義する.
In[1]:=
![Click for copyable input](assets.ja/analyze-visualize-and-compare-superfoods/In_297.png)
superfoodsRawData = {{"greek yogurt", {"TotalProtein"}}, {"quinoa", \
{"TotalProtein"}}, {"blueberries", {"TotalFiber",
"VitaminC"}}, {"kale", {"TotalFiber", "Calcium",
"Iron"}}, {"chia", {"Magnesium", "Iron", "Calcium",
"Potassium"}}, {"oatmeal", {"TotalFiber"}}, {"broccoli", \
{"TotalFiber", "VitaminC",
"TotalFolate"}}, {"strawberries", {"VitaminC"}}, {"salmon", \
{"TotalProtein"}}, {"watermelon", {"TotalSugar", "VitaminA",
"VitaminC", "TotalCalories"}}, {"lima beans", {"TotalFiber"}},
{"edamame", {"TotalFiber"}}, {"spinach", {"Calcium",
"VitaminK"}}, {"pistachios", {"TotalProtein", "TotalFiber",
"Potassium"}}, {"eggs", {"TotalProtein"}}, {"almonds", \
{"TotalFiber", "Potassium", "Calcium", "VitaminE", "Magnesium",
"Iron"}}, {"pumpkin", {"BetaCarotene"}}, {"apples", \
{"TotalFiber", "TotalCalories"}}, {"lentils", {"TotalProtein",
"Iron"}}};
計算に便利なようにDatasetに変換する.
In[2]:=
![Click for copyable input](assets.ja/analyze-visualize-and-compare-superfoods/In_298.png)
superfoodsDatset =
Dataset[<|"Food" -> #1, "Nutrients" -> #2|> & @@@ superfoodsRawData]
Out[2]=
![](assets.ja/analyze-visualize-and-compare-superfoods/O_199.png)
Interpreterを使ってこのスーパーフードに対応するWolfram言語の実体を取り出す.
In[3]:=
![Click for copyable input](assets.ja/analyze-visualize-and-compare-superfoods/In_299.png)
superfoodsDatset1 =
superfoodsDatset[All,
KeySort[Prepend[#, <|
"FoodEntity" -> Interpreter["Food"][#Food]|>]] &];
栄養素をリストにする.
In[4]:=
![Click for copyable input](assets.ja/analyze-visualize-and-compare-superfoods/In_300.png)
Union @@ Normal[superfoodsDatset1[[All, "Nutrients"]]]
Out[4]=
![](assets.ja/analyze-visualize-and-compare-superfoods/O_200.png)
指定された栄養素を適切な特性に変換する規則を作る.
In[5]:=
![Click for copyable input](assets.ja/analyze-visualize-and-compare-superfoods/In_301.png)
superfoodsDatset2 =
superfoodsDatset1 /.
AssociationMap[
EntityProperty["Food", "Relative" <> # <> "Content"] &,
Union @@ Normal[superfoodsDatset1[[All, "Nutrients"]]]]
Out[5]=
![](assets.ja/analyze-visualize-and-compare-superfoods/O_201.png)
Datasetで最も頻度の高い栄養素を求める.
In[6]:=
![Click for copyable input](assets.ja/analyze-visualize-and-compare-superfoods/In_302.png)
mostCommonProperties =
superfoodsDatset2[Counts[Flatten[#]] &, "Nutrients"][TakeLargest[5]]
Out[6]=
![](assets.ja/analyze-visualize-and-compare-superfoods/O_202.png)
食物繊維に富むことで有名なスーパーフードを求め,およそ9000種類の他の食品と比較し,平滑化ヒストグラムとして可視化する.灰色の曲線はほとんどの食品の食物繊維の確率密度関数を表している.
In[7]:=
![Click for copyable input](assets.ja/analyze-visualize-and-compare-superfoods/In_303.png)
fiberDataset =
superfoodsDatset2[
Select[ContainsAny[#Nutrients, {EntityProperty["Food",
"RelativeTotalFiberContent"]}] &], KeyDrop["Nutrients"]];
完全なWolfram言語入力を表示する
Out[13]=
![](assets.ja/analyze-visualize-and-compare-superfoods/O_203.png)
タンパク質に富むスーパーフードについても同様のことを行う.
In[14]:=
![Click for copyable input](assets.ja/analyze-visualize-and-compare-superfoods/In_310.png)
proteinDataset =
superfoodsDatset2[
Select[ContainsAny[#Nutrients, {EntityProperty["Food",
"RelativeTotalProteinContent"]}] &], KeyDrop["Nutrients"]];
完全なWolfram言語入力を表示する
Out[21]=
![](assets.ja/analyze-visualize-and-compare-superfoods/O_204.png)
スーパーフードの徽章を作る.まず,スーパーフードの画像集合から始める.
In[22]:=
![Click for copyable input](assets.ja/analyze-visualize-and-compare-superfoods/In_318.png)
GraphicsGrid[
Partition[
ims = EntityValue[
Cases[superfoodsDatset2[All, "FoodEntity"] // Normal,
Entity["FoodType", _], Infinity], "Image"], UpTo[5]]]
Out[22]=
![](assets.ja/analyze-visualize-and-compare-superfoods/O_205.png)
背景として,よく知られているスーパーマンの形を使う.
In[23]:=
![Click for copyable input](assets.ja/analyze-visualize-and-compare-superfoods/In_319.png)
Entity["Lamina", "SupermanInsigniaLamina"]["Image"] // ImageCrop
Out[23]=
![](assets.ja/analyze-visualize-and-compare-superfoods/O_206.png)
簡単な画像処理を使ってこれを背景に変換する.
In[24]:=
![Click for copyable input](assets.ja/analyze-visualize-and-compare-superfoods/In_320.png)
background =
ColorNegate[
Binarize[Entity["Lamina", "SupermanInsigniaLamina"]["Image"], .99]]
Out[24]=
![](assets.ja/analyze-visualize-and-compare-superfoods/O_207.png)
スーパーフードの「ワードクラウド」を作る.
In[25]:=
![Click for copyable input](assets.ja/analyze-visualize-and-compare-superfoods/In_321.png)
wc = WordCloud[(RandomReal[{0.6, 1.2}] -> #) & /@ ims, background]
Out[25]=
![](assets.ja/analyze-visualize-and-compare-superfoods/O_208.png)
このワードクラウドを背景と組み合せる.
In[26]:=
![Click for copyable input](assets.ja/analyze-visualize-and-compare-superfoods/In_322.png)
ImageMultiply[{ColorReplace[background, Black -> LightGray], wc}]
Out[26]=
![](assets.ja/analyze-visualize-and-compare-superfoods/O_209.png)