炼数成金数据分析课程---9、食物数据分析实例

炼数成金数据分析课程---9、食物数据分析实例

一、总结

一句话总结:

大纲+实例学习法:重大纲,细节先略,主实例
好东西是大部分人都会觉得好的:比如那些博客,比如教学视频,比如我,比如生活中的方方面面
完全不必纠结任何事;不同时刻的心境真的不一样,你要知道,下一个心境和这个区别很大,所以完全没必要纠结什么

1、对食物数据分析一般可以分析什么?

比如食物中哪种食物的某样成分含量最高
比如每组食物的Zn元素的含量是多少

2、如何查看食物中哪种食物的某样成分含量最高?

1、ndata = pd.merge(nutrients, info, on='id', how='outer') #连接 食物描述 和 营养成分
2、by_nutrient = ndata.groupby(['nutgroup', 'nutrient'])
3、get_maximum = lambda x: x.xs(x.value.idxmax())
4、max_foods = by_nutrient.apply(get_maximum)[['value', 'food']] #获取值最大的食物

3、如何查看每组食物的Zn元素的含量是多少?

1、ndata = pd.merge(nutrients, info, on='id', how='outer')
2、result = ndata.groupby(['nutrient', 'fgroup'])['value'].quantile(0.5) #求中位数
3、result['Zinc, Zn']
#连接 食物描述 和 营养成分:能够获取不同食物里面所含的营养成分
ndata = pd.merge(nutrients, info, on='id', how='outer')
result = ndata.groupby(['nutrient', 'fgroup'])['value'].quantile(0.5) #求中位数
result['Zinc, Zn'] 

4、打开比较大的txt文件用什么?

直接用chrome:效果比notepad++和sublim速度快很多,而且,文件还很好的被格式化了

5、打开比较大的json文件用什么?

直接用chrome:又快格式也规整

6、python中json访问数据库的方式?

db=json.load(open('data/foods-2011-10-03.json'))
只访问db[0]的键:db[0].keys() #key()方法访问key()
访问键和值:db[0]['nutrients'][0] #python中的json数据如何访问-数组方式

7、如何取营养物质的前7种?

1、db=json.load(open('data/foods-2011-10-03.json'))
2、nutrients=DataFrame(db[0]['nutrients'])
3、nutrients[:7] #取营养物质的前7种

8、如何构建食物的营养成分数据?

1、db=json.load(open('data/foods-2011-10-03.json'))
2、for rec in db:
3、    fnuts = DataFrame(rec['nutrients']) #rec是循环变量,表示db数据集中的每一条数据
4、    nutrients.append(fnuts)
db=json.load(open('data/foods-2011-10-03.json'))
for rec in db:
    fnuts = DataFrame(rec['nutrients']) #rec是循环变量,表示db数据集中的每一条数据
    fnuts['id'] = rec['id'] #给fnuts增加id字段,这个id字段是食品的id
    nutrients.append(fnuts)

9、如何构建食物信息数据?

1、db=json.load(open('data/foods-2011-10-03.json'))
2、info_keys=['description','group','id','manufacturer']
3、info=DataFrame(db,columns=info_keys)

10、如何对食物信息重命名?

1、col_mapping = {'description' : 'food','group' : 'fgroup'}
2、info = info.rename(columns=col_mapping, copy=False) #重命名
col_mapping = {'description' : 'food',
               'group'       : 'fgroup'}
info = info.rename(columns=col_mapping, copy=False) #重命名
info

11、如何连接食物信息和营养成分信息?

ndata = pd.merge(nutrients, info, on='id', how='outer')

12、如何求 食物信息和营养成分联合数据的 中位数?

1、ndata = pd.merge(nutrients, info, on='id', how='outer')
2、result = ndata.groupby(['nutrient', 'fgroup'])['value'].quantile(0.5) #求中位数


quantile
英 ['kwɒntaɪl]  美
n. [计] 分位数;分位点

二、食物数据分析实例

1、数据介绍

 每一条数据分为portions,description,tags,nutrients,group,id,manufacturer 这些东西

db[0].keys()
[u'portions',
 u'description',
 u'tags',
 u'nutrients',
 u'group',
 u'id',
 u'manufacturer']


每一个物品的营养nutrients要检测很多中,比如第一件食品就是162种(比如要检测什么蛋白质,钙,镁等)
每件食品所包含的营养成分是不一样的,所以要检测的种数也是不一样的
                            description        group    units     value
0                               Protein  Composition        g    25.180
1                     Total lipid (fat)  Composition        g    29.200
2           Carbohydrate, by difference  Composition        g     3.060
3                                   Ash        Other        g     3.280
4                                Energy       Energy     kcal   376.000
5                                 Water  Composition        g    39.280
6                                Energy       Energy       kJ  1573.000
7                  Fiber, total dietary  Composition        g     0.000
8                           Calcium, Ca     Elements       mg   673.000
9                              Iron, Fe     Elements       mg     0.640
10                        Magnesium, Mg     Elements       mg    22.000


这是其中营养物质中蛋白质Protein的一条数据
db[0]['nutrients'][0]
{u'description': u'Protein',
 u'group': u'Composition',
 u'units': u'g',
 u'value': 25.18}


2、代码

 1 # -*- coding: utf-8 -*-
 2 from pandas import Series, DataFrame
 3 import matplotlib.pyplot as plt
 4 plt.rc('figure', figsize=(10, 6))
 5 import pandas as pd
 6 import json
 7 #6000+数据
 8 db=json.load(open('data/foods-2011-10-03.json'))
 9 #2条数据
10 #db=json.load(open('data/food_small.json'))
11 len(db)
12 #print(db)
13 
14 db[0].keys() #key()方法访问key()
15 db[0]['nutrients'][0] #python中的json数据如何访问-数组方式
16 
17 nutrients=DataFrame(db[0]['nutrients'])
18 nutrients
19 nutrients[:7] #取营养物质的前7种
20 
21 #只提取数据中的'description','group','id','manufacturer'这几样
22 info_keys=['description','group','id','manufacturer']
23 info=DataFrame(db,columns=info_keys)
24 
25 #info
26 info[:5] #取前五条
27 
28 pd.value_counts(info.group)[:10] #pandas包统计物品数据
29 #pd.value_counts(info.group)
30 
31 nutrients = []
32 
33 #将 营养成分 记录下来
34 for rec in db:
35     fnuts = DataFrame(rec['nutrients']) #rec是循环变量,表示db数据集中的每一条数据
36     fnuts['id'] = rec['id'] #给fnuts增加id字段,这个id字段是食品的id
37     nutrients.append(fnuts)
38 
39 fnuts
40 #nutrients #单纯的各个营养成分拼接的表
41 
42 
43 nutrients = pd.concat(nutrients, ignore_index=True) #将营养成分连接起来
44 
45 nutrients
46 
47 nutrients.duplicated().sum() #重复项的数目
48 nutrients = nutrients.drop_duplicates() #去掉重复项
49 nutrients
50 
51 #重命名:方便观测数据
52 col_mapping = {'description' : 'food',
53                'group'       : 'fgroup'}
54 info = info.rename(columns=col_mapping, copy=False) #重命名
55 info
56 
57 col_mapping = {'description' : 'nutrient',
58                'group' : 'nutgroup'}
59 nutrients = nutrients.rename(columns=col_mapping, copy=False)
60 nutrients
61 
62 #连接 食物描述 和 营养成分:能够获取不同食物里面所含的营养成分
63 ndata = pd.merge(nutrients, info, on='id', how='outer')
64 
65 ndata
66 
67 
68 #ndata.ix[30000] #.ix is deprecated.
69 ndata.loc[30000] #查找第30000行的信息的情况
70 
71 #根据营养成分和分组,画出中位数的表
72 result = ndata.groupby(['nutrient', 'fgroup'])['value'].quantile(0.5) #求中位数
73 result
74 result['Zinc, Zn'] #取 Zinc, Zn 这一行的数据
75 result['Zinc, Zn'].order().plot(kind='barh')
76 
77 # 找营养成分最丰富的或最不丰富的
78 by_nutrient = ndata.groupby(['nutgroup', 'nutrient'])
79 
80 get_maximum = lambda x: x.xs(x.value.idxmax())
81 get_minimum = lambda x: x.xs(x.value.idxmin())
82 
83 max_foods = by_nutrient.apply(get_maximum)[['value', 'food']] #获取值最大的食物
84 max_foods
85 
86 # make the food a little smaller
87 max_foods.food = max_foods.food.str[:50]
88 max_foods.food
89 
90 max_foods.loc['Amino Acids']['food']
 
原文地址:https://www.cnblogs.com/Renyi-Fan/p/10989831.html