# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# # 餐厅用餐数据分析（过滤与排序）
#
#

# 这一次我们直接从网上拉取数据，特别感谢：https://github.com/justmarkham 提供数据
#
# ### Step 1. 导入必须的Python库

import pandas as pd

# ### Step 2. 从这里 [下载地址](https://raw.githubusercontent.com/justmarkham/DAT8/master/data/chipotle.tsv)  导入数据. 

# ### Step 3. 将这文件中的数据放到变量 chipo.

# +
# 这是一个餐厅点餐记录的的 csv 文件，因为它是用 tab('\t') 来分隔字段，所以叫 tsv
# tsv 文件在国外比较常见
# pd.read_csv 可以直接读网上的数据
url = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/chipotle.tsv'

# 使用 read_csv 函数，由于用 '\t' 来分隔字段，所以增加了 sep='\t' 的参数
# read_csv 返回的是一个 DataFrame 对象，约等于 Excel 里的一个sheet
chipo = pd.read_csv(url, sep = '\t')
# -

# ### Step 4. 有多少产品价格超过10美元?

# +
# 因为价格('item_price') 是以 $ 开头的字符串，所以要先把 $去掉
# 译者补充：
# value[1:-1] 是取除第1个字符以外的字符串
# 这个表达式将 for 写成了一行, 等价于：
#   prices = []
#   for value in chipo.item_price:
#     prices.append(float(value[1 : -1])
# 大写熟后就会觉得一行的方式简单
prices = [float(value[1 : -1]) for value in chipo.item_price]

# 用清理后的价格覆盖老的价格
chipo.item_price = prices

# 删除重复的产品名("item_name") 数量 ("quantity") 组合
chipo_filtered = chipo.drop_duplicates(['item_name','quantity'])

# 选择数量("quantity") 值为 1 的行
# 译者补充：这个地方不大严谨，如果客户的点单数量都大于1，就会不准确
chipo_one_prod = chipo_filtered[chipo_filtered.quantity == 1]

# 统计价格("item_price")大于10，且产品名("item_name") 不重复的数量
chipo_one_prod[chipo_one_prod['item_price']>10].item_name.nunique()
# -

# ### Step 5. 每一项商品的价格是多少? 
# ###### print a data frame with only two columns item_name and item_price

# +
# delete the duplicates in item_name and quantity
# chipo_filtered = chipo.drop_duplicates(['item_name','quantity'])
chipo[(chipo['item_name'] == 'Chicken Bowl') & (chipo['quantity'] == 1)]

# select only the products with quantity equals to 1
# chipo_one_prod = chipo_filtered[chipo_filtered.quantity == 1]

# select only the item_name and item_price columns
# price_per_item = chipo_one_prod[['item_name', 'item_price']]

# sort the values from the most to less expensive
# price_per_item.sort_values(by = "item_price", ascending = False).head(20)
# -

# ### Step 6. 按商品名(item_name)对 chipo 进行排序

# +
chipo.item_name.sort_values()

# OR

chipo.sort_values(by = "item_name")
# -

# ### Step 7. chipo中价格(item_price)最贵的一项?

chipo.sort_values(by = "item_price", ascending = False).head(1)

# ### Step 8.  Veggie Salad Bowl 被点了多少次?

# +
chipo_salad = chipo[chipo.item_name == "Veggie Salad Bowl"]

len(chipo_salad)
# -

# ### Step 9. Canned Soda 被客户买1份以上的次数有多少?

chipo_drink_steak_bowl = chipo[(chipo.item_name == "Canned Soda") & (chipo.quantity > 1)]
len(chipo_drink_steak_bowl)

StarcoderdataJupyterScriptsDedupFiltered