zoukankan      html  css  js  c++  java
  • 炼数成金数据分析课程---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']
     
  • 相关阅读:
    Redis主从复制及主从复制的注意事项
    Redis哨兵(Sentinel)
    Redis慢查询日志(slowlog)
    Memcached缓存雪崩现象
    PHP添加Memcached扩展
    Redis节省空间
    Memcached遇到的问题及解决办法
    C++ explicit关键字学习
    力扣:排序之topK||Kth元素的问题
    软聚类
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/10989831.html
Copyright © 2011-2022 走看看