1、先导包
import numpy as np # 导入numpy的包
import pandas as pd # 导入pandas的包
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 支持中文(指定默认字体为SimHei 黑体`
2、读取数据(拿到数据后,了解数据字段信息,看是否有空值,数据是否有异常,比如是否含有:\r \n 等等)
3、处理数据(用一些方法,处理数据异常,比如连接数据,删除空值,替换空格等)
# read_excel(数据名) 用pandas读取数据 此数据里面有三个sheet_name表,所以都要读出来
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')
# data1
# concat()连接数据 axis=0 合并行 因为有三个表,所以要连接起来
data = pd.concat([data1,data2,data3],axis=0) # 连接数据,创建一个新的数据
print(data.info()) # 创建好新数据后,查看数据的信息
# 删除空列 axis=1:合并列 inplace=True:改变数据
data.dropna(axis=1,inplace=True)
data
以上代码知识点整理
1、用pandas中的块【pd.read_文件扩展名(‘文件名.扩展名 ‘)】读取数据
2、如果此数据是excel,并且一张簿里面有多张表,要依次读取出来,后面加【sheet_name=’ 表名’】
3、因为有多张表,所以要用【concat()】方法连接数据。(此例中用该方法把三张表连接起来)
4、【axis=0】合并行(此例需要连接数据,所以合并行);【axis=1】合并列(此例需要删除空列,所以把空列都合并了)
5、【info()】 方法查看数据的信息
6、【dropna()】 方法删除数据信息
7、【inplace=True】方法改变数据,一般用于一些改变数据的操作方法之后
正式开始做题
1、计算菜品价格平均值
# 据我们观察,数据的菜品名称里面有\n \r,所以要先去除它们
# apply()是声明匿名函数 括号里面一般加匿名函数 rstrip()函数去除右边\n,\r
data['dishes_name'] = data['dishes_name'].apply(lambda x:x.rstrip())
# 接着算平均价格会有重复,所以先进行菜品名称去重
# drop_duplicates()函数去重 subset选中某一个字段
data_dishes_name = data.drop_duplicates(subset=['dishes_name'])
# 方法一:直接用pandas里面的mean()函数求平均值
# mean_amounts = data_dishes_name['amounts'].mean() # 对去重后的结果求平均值
# 方法二:用numpy里面的np的mean方法求平均数
mean_amounts = np.mean(data_dishes_name['amounts']) # 对去重后的结果求平均值
mean_amounts
题意分析
我们的目的是统计菜品的平均价格
从这句话中我们得出以下信息:
1)对象:菜品名称;2)干什么:计算平均价格
注意:根据我们观察,数据的菜品名称里面有\n \r,所以要先去除它们;接着算平均价格会有重复,所以先进行菜品名称去重
以上代码知识点整理
1、声明匿名函数:【apply()】方法
2、去除右侧特殊字符:【rstrip()】
3、字段去重:【drop_duplicates()】
4、选中某一个字段:【subset=[’ ']】
5、求平均值:【mean()】(用numpy和pandas都能求平均值)
2、词频统计:统计什么菜最受欢迎(TOP:10)
dishes_count = data['dishes_name'].value_counts()[:10]
dishes_count.plot(kind='bar',legend=True) # legend表示图例
# dishes_count.plot.bar() # bar表示垂直柱状图
# dishes_count.plot.barh() # barh表示水平柱状图
题意分析
我们的目的是统计最受欢迎的10道菜。
从这句话中,我们得出以下信息:
1)对象:菜名;2)干什么:给菜名计数;3)统计方法:柱状图(一般统计数量,用柱状图更直观)
以上代码知识点整理
1、取数据字段:【之前定义的新数据变量名[‘字段名’] 】(此例中我们定义的新数据变量名为data,菜名字段为disher_name)
2、计数:.【value_counts()】;
此例中统计前10道菜,所以加个索引【value_counts()[:10]】
3、画图:【.plot(kind=‘图的类型’,legend=True)】
(此例中,kind代表图的类型,legend=True代表图例)
或【.plot.图的类型()】()里面可加title=’ ‘;legend=’ ‘;label=’ '等
4、垂直柱状图:【bar()】;水平柱状图:【barh()】
3、单个订单中菜品数量最多(TOP 10)
data_order_id = data['order_id'].value_counts()[:10] # value_counts是统计次数
# data_order_id.plot.bar() # bar()是垂直柱状图
data_order_id.plot.barh() # barh()是水平柱状图
题意分析
我们的目的是统计单个订单中菜品数量最多前10名
从这句话中,我们得出以下信息:
1)对象:订单ID;2)干什么:统计次数
以上代码知识点整理
1、【value_counts()】 统计次数,可加索引
2、【plot】绘制图像
3、【bar()】 垂直柱状图
4、【barh()】 水平柱状图
4、计算单一菜品总价;哪个订单ID点菜份数最多(TOP:10)
# 总价 = 单价 * 数量
data['total_amounts'] = data['amounts'] * data['counts'] # 计算单一菜品总价
# data[data['counts']>1] # 条件;大于1
dataGroup = data[['order_id','counts','amounts','total_amounts']] # 确定数据组 订单id 数量 单价 总价
data_sort = dataGroup.groupby(by='order_id').sum() # 给数据组分组并求和
print(data_sort)
# sort_values()表示按by=''里面的字段排序
data_sort.sort_values(by='counts',ascending=False,inplace=True) # ascending=False 表示倒序
print(data_sort['counts'][:10]) # 订单ID点菜数量最多前十
data_sort['counts'][:10].plot.bar() # 绘制柱状图
题意分析
我们的目的是统计通过计算单一菜品总价,确定哪个订单点菜最多
从这句话中,我们得到以下信息:
1)对象:订单ID;2)干什么:计算总价,确定份数
以上代码知识点整理
1、计算总价:【总价=单价*数量】
2、确定数据组:【两个[[ ]]嵌套】
3、确定数据组之后分组:【groupby(by=‘字段名’)】 其中,groupby是分组 by=是选定按什么字段分组
4.求和:【.sum()】
5、排序:【sort_values(by=‘字段名’,ascending=False,inplace=True)】
其中,sort_values是按by选定的字段排序,ascending表示倒序,inplace=True表示改变数据