一、项目背景介绍
Adventure Works Cycles是基于微软AdventureWorks示例数据库的虚拟公司,是一家大型跨国制造公司。该公司向北美,欧洲和亚洲商业市场生产和销售金属和复合材料自行车。
2019年12月业务部门需要向上级汇报11月份的自行车销售情况,为精细化运营提供数据支持,精准定位目标客户群体。
二、分析目的
1、如何制定销售策略,调整产品结构,才能保持高速增长,获取更多的收益,占领更多市场份额,是公司最关心的问题。
2、报告通过对整个公司的自行车销量持续监测和分析,掌握公司自行车销售状况、走势的变化,为客户制订、调整和检查销售策略,完善产品结构提供依据。
三、分析思路
分析思路四、分析结果展示 Power BI & PPT
Power BI成果展示 分析报告展示五、分析过程
5.1 从整体的角度:分析2019.1—2019.11自行车整体销售表现
分析思路5.1.1 观察数据,选择合适的数据处理方式
源数据 数据字典观察数据,这个问题只需要用到销量订单表,该表数据量超过10万条,且需要对数据进行较为复杂的转化,所以这里选择了Python处理数据。
5.1.2 导入数据,做数据清洗——增加月份信息和只保留自行车的销售信息
#增加create_year_month月份字段。按月维度分析时使用
gather_customer_order['create_year_month']=gather_customer_order['create_date'].apply(lambda x:x.strftime('%Y-%m'))
#筛选产品类别为自行车的数据
gather_customer_order = gather_customer_order.loc[gather_customer_order['cplb_zw'] == '自行车']
5.1.3 按照月份分组求和,求出每月销量和销售额,并进行环比计算
#每月订单数量和销售金额,用groupby创建一个新的对象,需要将order_num、sum_amount求和
overall_sales_performance = gather_customer_order.groupby('create_year_month').agg({'order_num':sum,'sum_amount':sum}).sort_index(ascending = False).reset_index()
#求每月自行车销售订单量环比,观察最近一年数据变化趋势
#环比是本月与上月的对比,例如本期2019-02月销售额与上一期2019-01月销售额做对比
order_num_diff = list((overall_sales_performance.order_num.diff()/overall_sales_performance.order_num)/-1)
order_num_diff.pop(0) #删除列表中第一个元素
order_num_diff.append(0) #将0新增到列表末尾
#将环比转化为DataFrame
overall_sales_performance = pd.concat([overall_sales_performance,pd.DataFrame({'order_num_diff':order_num_diff})],axis = 1)
# 保存处理后的新表
5.1.4 制作Power BI图表
整体销量表现5.1.5 分析报告展示
PPT展示通过观察图表数据,得到2个结论:
①近11个月,11月自行车销售量最多,为3316辆;较10月增长7.1% ;
②近11个月,11月自行车销售金额最高,为6190万元,较10月增长8.7%;自行车销售金额与销售数量 趋势一致;
5.2 其他几个方向的分析过程,暂不一一展开
六、总结:对知识点的考察
6.1 python连接mysql的方法
import pymysql
pymysql.install_as_MySQLdb()
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://用户名:密码@ip地址/数据库名称?charset=gbk')
sql ='select * from tb_1'
df = pd.read_sql(sql,engine)
6.2 将数据存储到mysql的方法
engine = create_engine('mysql+pymysql://用户名:密码@ip地址/数据库名称?charset=gbk')
dataframe.to_sql ( 表名, engine, if_exists = , index = False )
如果表格已经存在的情况下,有三种处理方法:
if_exists = {'fail', 'replace', 'append'}, default 'fail'
fail:引发ValueError。
replace:在插入新值之前删除表。
append:将新值插入现有表。
6.3 匿名函数lambda和字符串转时间函数strptime() 使用
lambda x:x.strftime('%Y-%m')
6.4函数agg的用法及适用范围
一般跟groupby联合使用,与apply的最大区别是,agg可以对同一列进行多个聚合函数操作,也可以对不同列使用不同的聚合函数操作
6.5 diff() 函数的使用
diff() 函数,两行之间做差
shift() 函数,相邻两行进行加减乘除
6.6 DataFrame中的loc,iloc,at,iat的用法和区别
① loc和iloc函数都是用来选择某行的,iloc与loc的不同是:iloc是按照行索引所在的位置来选取数据,参数只能是整数。而loc是按照索引名称来选取数据,参数类型依索引类型而定;
② at和iat函数是只能选择某个位置的值,iat是按照行索引和列索引的位置来选取数据的。而at是按照行索引和列索引来选取数据;
③ loc和iloc函数的功能包含at和iat函数的功能。
网友评论