1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【Python数据分析与处理 实训01】 ---- 菜品订单信息分析(数据了解及简单统计)

【Python数据分析与处理 实训01】 ---- 菜品订单信息分析(数据了解及简单统计)

时间:2021-03-06 01:25:01

相关推荐

【Python数据分析与处理 实训01】 ---- 菜品订单信息分析(数据了解及简单统计)

【Python数据分析与处理 实训01】 ---- 菜品订单信息分析(数据了解及简单统计)

探索Chipotle快餐数据

对于下面的数据集进行简单的一些数据的分析训练:

若需要源数据请私信~

1. 将数据集存入一个名为chipo的数据框内

chipo = pd.read_csv("G:\Projects\pycharmeProject\大数据比赛\泰迪智能科技\data\chipotle.tsv",sep="\t")

这里就是最基本的数据集读取,并且指定分割符为 \t

2. 查看10行内容

print(chipo.head(10)) # 前10行print(chipo.tail(10)) # 后10行

检阅读取的数据集,基本方法就是head、tail,主要查看获取的数据集,默认为5行,具体行数可以传入具体的数字来实现。当然还有info、description也可以用来查看数据的基本信息,小伙伴们可以尝试一下。

3 . 数据集中有多少个列(columns)?

print(chipo.shape) # 数据的维度print(chipo.shape[0]) # 数据的列个数

基于pandas读取的数据格式特殊性,类似于一张二维表格,有行名–index 以及 列名–column,所以在最初查看读取数据时,也可以通过其进行简单的判断与数据了解。二维可以用(行,列)来表示,同时行的标识为0,列的标识为1,可以借此来获取行数或列数。

4. 打印出全部的列名称

print(chipo.columns) # 全部列名称

5. 数据集的索引是怎样的?

print(chipo.index)

6. 被下单数最多商品(item)是什么?

# 查看数据结构信息,看是否要进行数据类型转换print(chipo.info())

count = chipo.groupby(by="item_name").agg({"quantity":"sum"})print(count)print(count.max()) # 最大值print(count.idxmax()) # 最大值对应index

通过groupby方法可以进行按字段分组,通常分了组后一般会有聚合操作,这里使用agg()方法。(稍后会有补充说明)

这里还要介绍一个重要的方法就是idxmax(),可以直接得到最大数所对应的索引—行,max()不用多说,返回的就是最大值。

7.在item_name这一列中,一共有多少种商品被下单?

# 方法一uniqu = chipo["item_name"].unique()print(uniqu)print(uniqu.size)print("***************************************************")#方法二a = chipo.groupby(by='item_name').agg({'item_name':'count'}).shape[0]print(a)

在这里,一共有多少中商品被下单,种字表明需要进行分组,按照方法二,我们可以对商品名称分组,统计每种菜品的订单数,此时的菜品是唯一的,只需要统计该结果的行数就可以得到商品的总数。按照菜品种数,唯一性提示我们可以对菜品列去重,所以按照方法一,我们先进行去重,输出发现结果集是关于菜名的一个数组对象,最后只要得到其size即可。

8. 一共有多少个商品被下单?

sum = chipo["quantity"].sum()print(sum)

这里主要计算的就是商品订购的总数,直接统计quantity的总数即可。

9. 将item_price转换为浮点数

print(chipo["item_price"].str[1:])print(chipo["item_price"].str[1:].astype(float))chipo["item_price"] = chipo["item_price"].str[1:].astype(float)

原始数据中的价格为$10.0格式,而我们需要的仅是后半部分数字,可以利用将其转为字符串提取有效部分实现,代码中的1表示转为字符串后10.0中的1在字符串的下标索引,从下标为1出开始往后截取,并不代表截取开始处的字符,就比如:$ 20.0,截取的时候还是str[1:],注意这里有个下标的概念。

10. 在该数据集对应的时期内,收入(revenue)是多少?

# 收入 = 销售量 * 单价chipo["revenue"] = chipo["quantity"]*chipo["item_price"]print(chipo["revenue"].sum())

这里和计算总订购数一样,都是对某一列的计算,直接同过列.统计方法就行了。注意:此处有一个创建新列的操作,具体操作的就是

读取数据存储名['新列名'] = 。。。。,为新的一列进行赋值。

11. 在该数据集对应的时期内,一共有多少订单?

print(chipo["order_id"].unique().size)

在这里理解订单很重要,一开始我也理解错了。数据集中含有order_id一列,表示不同的订单数,只需要对其进行去重操作即可,订单出现了重复表明,该订单标号的人不仅仅定了一种商品,可以同时订购多个商品。

补充1:dataframe数据类型的数据访问

对于切片这部分可以参考本人博客:Python----数据分析-pandas.DataFrame基础

chipo.iloc[2, 0] # 按行列顺序进行数据访问chipo.iloc[2:5, 0:2] # 按行列顺序进行数据切片时,是左闭右开的区间chipo.iloc[:, 0] # 访问单列数据(返回一个Series)

chipo.loc[2, 'order_id']# 按行列名称进行数据访问chipo.loc[2:4, 'order_id':'quantity'] # 按行列名称进行数据切片时,是闭区间chipo.loc[:, 'order_id']chipo.loc[:, ['order_id', 'item_name']]

chipo['order_id'] # 访问单列数据chipo[['order_id', 'item_name']] # 访问多列数据

补充2:agg聚合操作

关于agg()聚合操作可以参见本人博客:Python----数据分析-pandas.数据的分组、聚合

print(chipo.groupby('order_id').agg('count'))print(chipo.groupby('order_id').agg({'revenue':'sum','quantity':'sum','item_price':'count'}))print(chipo.groupby('order_id').agg({'quantity':['sum','count']}))

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。