微前端架构如何改变企业的开发模式与效率提升
1289
2022-10-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']}))
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~