数据分析练手项目(一)

⭐⭐ ⭐ 个人笔记用来记录一下练习使用Python数据分析的情况

数据导入

data1 = pd.read_excel("meal_order_detail.xlsx",sheet_name="meal_order_detail1")
data2 = pd.read_excel("meal_order_detail.xlsx",sheet_name="meal_order_detail2")
data3 = pd.read_excel("meal_order_detail.xlsx",sheet_name="meal_order_detail3")

数据预处理(shell表格的拼接+缺失值删除)

data = pd.concat([data1,data2,data3],axis=0)#数据拼接
data.dropna(axis=1,inplace=True)#缺失值在原data上删除
data.info

统计出一些特征,比如(餐厅哪个菜卖的好,哪个菜贵,餐厅每道菜平均价格,每道菜的销量等等)

1.统计卖出菜品的平均价格

round(data['amounts'].mean(),2)#方法一,使用pandas库的mean
round(np.mean(data["amounts"]),2)#方法二,使用numpy库的mean(更高效)
#44.82

2.菜品销量前8

思路:直接用value_counts()即可

dishes_count = data["dishes_name"].value_counts()[:8]
print(dishes_count)

用柱状图可视化出销量前8的结果

dishes_count.plot(kind="bar")
for x,y in enumerate(dishes_count):
    plt.text(x,y+2,y,ha="center")
    

3.每个订单菜的种类数

order_s = data["order_id"].value_counts()[:10]
order_s.plot(kind="bar")
plt.title("每个订单菜的种类数Top10")
plt.xlabel("订单ID")
plt.ylabel("点菜种类数")

4.哪10个订单点菜数最多(X轴为订单,Y轴为点菜数)

思路:

订单为:order_id;点菜数为:counts

按order_id 分组,分组之后sum()["count"]即可

#先按照order_id分组,求和
dataGroup=data[["order_id","counts"]].groupby("order_id").sum()

#按counts大小排序
sort_data = dataGroup.sort_values(by="counts",ascending=False)

sort_data["counts"][:10].plot(kind = "bar")
plt.title("订单ID点菜数量Top10")
plt.xlabel("订单ID")
plt.ylabel("点菜数量")

5. 一天中哪个时间点菜数最多

思路:

单独抽出place_order_time中的solo_hour,之后加一列全为1的数据,之后groupby("solo_hour")并求和sum(),绘制出即可

#先查看日期那一列是不是datatime类型
print(data.dtypes)
#发现是datatime类型,进行之后的工作:
data["num_counts"] = 1
data["solo_hour"] = data["place_order_time"].map(lambda x:x.hour)
gp_by_hour = data.groupby["solo_hour"].sum()["num_counts"]
gp_by_hour.plot(kind = "bar")

发现报错了:'method' object is not subscriptable

将  gp_by_hour = data.groupby["solo_hour"].sum()["num_counts"]  改为  gp_by_hour = data.groupby("solo_hour").sum()["num_counts"]即可,就是本来要使用()结果使用了[]。

6. 可视化出点菜数量最大的前5天

data["num_counts"] = 1
data["solo_day"] = data["place_order_time"].map(lambda x:x.day)
gp_by_day = data.groupby("solo_day").sum()
a=gp_by_day.sort_values(by = "num_counts",ascending=False)
a["num_counts"][:5].plot(kind = 'bar')

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值