## 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]
```