## 1.1 食物營養數據分析
```python
import pandas as pd
import json
db = json.load(open("food.json"))
len(db)
#db中的每個條目都是一個字典,含有某種食物的全部數據。字段"nutrients"是一個字典列表,其中每個字典對應一種營養成分
db[0].keys()
db[0]["nutrients"][0]
nutrients = pd.DataFrame(db[0]["nutrients"])
nutrients.head(7)
#在將字典列表轉換為DataFrame時,我們可以指定一個需要提取的字段列表。
#這里,我們將提取食物的名稱、分類、ID以及制造商等信息:
info_keys = ["description", "group", "id", "manufacturer"]
info = pd.DataFrame(db, columns=info_keys)
info.head(5)
#通過value_counts,可以查看食物分類的分布情況:
pd.value_counts(info["group"])[:10]
# 將所有食物的營養成分整合到一張大表中。我們分成幾個步驟來實現。
# 首先,將各食物的營養成分列表轉換為DataFrame,并添加食物id的列;
# 然后,將該DataFrame追加到一個列表中;
# 最后,通過concat將這些數據拼接。
nutrients = []
for rec in db:
fnuts = pd.DataFrame(rec["nutrients"])
fnuts["id"] = rec["id"]
nutrients.append(fnuts)
nutrients = pd.concat(nutrients, ignore_index=True)
#DataFrame中存在一些重復項,直接丟棄就可以了
nutrients.duplicated().sum()
nutrients = nutrients.drop_duplicates()
#兩個DataFrame對象中都有"group"和"description",為了更加清晰,我們需要對其進行重命名:
col_mapping = {"description" : "food",
"group" : "fgroup"}
info = info.rename(columns=col_mapping, copy=False)
info.info()
col_mapping = {"description" : "nutrient",
"group" : "nutgroup"}
nutrients = nutrients.rename(columns=col_mapping, copy=False)
nutrients
#將info和nutrients合并起來了
ndata = pd.merge(nutrients, info, on="id")
ndata.info()
ndata.iloc[30001]
```