赞
踩
因工作需求经常会面试一些数据分析师,一些 coding 能力很强的小伙伴,当被问及数据分析方法论时一脸懵逼的,或者理所当然的认为就是写代码啊,在文章开头先来解释一下数据分析。
数据分析是通过明确分析目的,梳理并确定分析逻辑,针对性的收集、整理数据,并采用统计、挖掘技术分析,提取有用信息和展示结论的过程,是数据科学领域的核心技能。
今天在本文中,我将从数据分析常用逻辑框架及技术方法出发,结合 Python 项目实战全面解读数据分析,可以系统掌握数据分析的框架套路,快速上手数据分析。
【注】资料、技术交流学习,文末获取
PEST分析是指宏观环境的分析,宏观环境是指影响一切行业或企业的各种宏观力量。P是政治(Politics),E是经济(Economy),S是社会(Society),T是技术(Technology)。通常是战略咨询顾问用来帮助企业检阅其外部宏观环境的一种方法,以吉利收购沃尔沃为例:
5W2H分析法又称七何分析法,包括:Why、What、Where、When、Who、How、How much 。主要用于用户行为分析、业务问题专题分析、营销活动等,是一个方便又实用的工具。
逻辑树是分析问题最常用的工具之一,它是将问题的所有子问题分层罗列,从最高层开始,并逐步向下扩展。使用逻辑树分析的主要优点是保证解决问题的过程的完整性,且方便将工作细分为便于操作的任务,确定各部分的优先顺序,明确地把责任落实到个人。
4P即产品(Product)、价格(Price)、渠道(Place)、促销(Promotion),在营销领域,这种以市场为导向的营销组合理论,被企业应用最普遍。通过将四者的结合、协调发展,从而提高企业的市场份额,达到最终获利的目的。
4P营销理论适用于分析企业的经营状况,可视为企业内部环境,PEST分析的是企业在外部面对的环境。
SCQA分析是一个“结构化表达”工具,即S(Situation)情景、C(Complication)冲突、Q(Question)疑问、A(Answer)回答。
整个结构是通过描述当事者的现实状态,然后带出冲突和核心问题,通过结构化分析以提供更为明智的解决方案。以校园招聘SCQA分析为例:
SMART法是一种目标管理方法,即对目标的S(Specific)明确性,M(Measurable)可衡量性,A(Attainable)可实现性,R(Relevant)相关性,T(Time-based)时限性。
SWOT分析法也叫态势分析法,S (Strengths)是优势、W (Weaknesses)是劣势,O (Opportunities)是机会、T (Threats)是威胁或风险。常用来确定企业自身的内部优势、劣势和外部的机会和威胁等,从而将公司的战略与公司内部与外部环境有机地结合起来。以HUAWEI 的SWOT分析为例:
数据分析的技术方法是指提取出关键指标信息的具体方法,如对比分析、交叉分析、回归预测分析等方法。
对比分析法是将两个或两个以上的数据进行比较,分析差异,揭示发展变化情况和规律。
举例:各车企销售表现
举例:新书在各销售渠道的销量
举例:市场占有率是典型的结构分析。
举例:季节性分析和价格分析时常会用到index指标
举例:常见的气泡图数据表格
举例:商品流转率表现图
图表展示可以帮助我们更好、更直观地看懂数据信息。
图表的选择,不只是关注图表的样式,而关键在于关注数据情况及图表展示的功能。可以通过数据展示的功能(构成、比较、趋势、分布及联系)进行图表选择,如下所示:
数据来源于kesci天猫真实成交订单,主要是行为类数据。
a. 订单编号:订单编号
b. 总金额:订单总金额
c. 买家实际支付金额:总金额 - 退款金额(在已付款的情况下);未付款的支付金额为0
d. 收货地址:全国各个省份
e. 订单创建时间:下单时间
f. 订单付款时间:付款时间(如果未付款,显示NaN)
g. 退款金额:付款后申请退款的金额。未付款的退款金额为0
以天猫一个月内的订单数据,观察这个月的订单量以及销售额, 分析下单日期、收货地址等因素对订单量的影响以及订单转换情况,旨在提升用户下单量和订单转换率,进而提高用户实际支付额。
本文结合订单流程以逻辑树方法分析订单数目的影响因素,从以下几个维度展开:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
import warnings
warnings.filterwarnings('ignore')
# 读取数据
df = pd.read_csv('tmall_order_report.csv')
df.head()
# 利用pandas_profiling一健生成数据情况(EDA)报告:数据描述、缺失、相关性等情况
import pandas_profiling as pp
report = pp.ProfileReport(df)
report
#规范字段名称
df.columns
df=df.rename(columns={'收货地址 ':'收货地址','订单付款时间 ':'订单付款时间'})
df.columns
#查看数据基本信息
df.info()
# 数据类型转换
df['订单创建时间']=pd.to_datetime(df.订单创建时间)
df['订单付款时间']=pd.to_datetime(df.订单付款时间)
df.info()
# 数据重复值
df.duplicated().sum()
无
#数据缺失值
df.isnull().sum()
#数据集描述性信息
df.describe()
#筛选数据集
df_payed=df[df['订单付款时间'].notnull()]#支付订单数据集
df_trans=df_payed[df_payed['买家实际支付金额']!=0]#到款订单数据集
df_trans_full=df_payed[df_payed['退款金额']==0]#全额到款订单数据集
分析2月份成交订单数的变化趋势
import pyecharts.options as opts #将订单创建时间设为index df_trans=df_trans.set_index('订单创建时间') #按天重新采样 se_trans_month = df_trans.resample('D')['订单编号'].count() from pyecharts.charts import Line #做出标有具体数值的变化图 name = '成交订单数' ( Line() .add_xaxis(xaxis_data = list(se_trans_month.index.day.map(str))) .add_yaxis( series_name= name, y_axis= se_trans_month, ) .set_global_opts( yaxis_opts = opts.AxisOpts( splitline_opts = opts.SplitLineOpts(is_show = True) ) ) .render_notebook() )
小结 1 :2月上半月,多数企业未复工,快递也停运,暂时无法发货,订单数很少;2月下半月,随着企业复工逐渐增多,订单数开始上涨。
se_trans_map=df_trans.groupby('收货地址')['收货地址'].count().sort_values(ascending=False) # 为了保持收货地址和下面的地理分布图使用的省份名称一致,定义一个处理自治区的函数 def strip_region(iterable): result = [] for i in iterable: if i.endswith('自治区'): if i == '内蒙古自治区': i = i[:3] result.append(i) else: result.append(i[:2]) else: result.append(i) return result # 处理自治区 se_trans_map.index = strip_region(se_trans_map.index) # 去掉末位‘省’字 se_trans_map.index = se_trans_map.index.str.strip('省') import pyecharts.options as opts from pyecharts.charts import Map # 展示地理分布图 name = '订单数' ( Map() .add( series_name = name, data_pair= [list(i) for i in se_trans_map.items()]) .set_global_opts(visualmap_opts=opts.VisualMapOpts( max_=max(se_trans_map)*0.6 ) ) .render_notebook() )
用直观的地图来观察成交订单数的分布情况
小结 2 :地区对订单数量影响较大,一般较发达地区订单数较大,边远地区较小。这里可能需要具体分析每个地区的商品种类、消费群体以及优惠政策,快递等原因。可以根据原因进一步提高其他地区的订单数量和销售金额。
订单数以及订单转化率的呈现
dict_convs=dict() #字典 dict_convs['总订单数']=len(df) df_payed dict_convs['订单付款数']=len(df_payed.notnull()) df_trans=df[df['买家实际支付金额']!=0] dict_convs['到款订单数']=len(df_trans) dict_convs['全额到款订单数']=len(df_trans_full) #字典转为dataframe df_convs = pd.Series(dict_convs,name = '订单数').to_frame() df_convs #求总体转换率,依次比上总订单数 total_convs=df_convs['订单数']/df_convs.loc['总订单数','订单数']*100 df_convs['总体转化率']=total_convs.apply(lambda x:round(x,0)) df_convs #求单一转换率 single_convs=df_convs.订单数/(df_convs.订单数.shift())*100 single_convs=single_convs.fillna(100) df_convs['单一转化率']=single_convs.apply(lambda x:round(x,0)) df_convs
画转换率漏斗图,直观呈现订单转化情况
from pyecharts.charts import Funnel from pyecharts import options as opts name = '总体转化率' funnel = Funnel().add( series_name = name, data_pair = [ list(z) for z in zip(df_convs.index,df_convs[name]) ], is_selected = True, label_opts = opts.LabelOpts(position = 'inside') ) funnel.set_series_opts(tooltip_opts = opts.TooltipOpts(formatter = '{a}<br/>{b}:{c}%')) funnel.set_global_opts( title_opts = opts.TitleOpts(title = name), # tooltip_opts = opts.TooltipOpts(formatter = '{a}<br\>{b}:{c}%'), ) funnel.render_notebook()
name = '单一转化率'
funnel = Funnel().add(
series_name = name,
data_pair = [ list(z) for z in zip(df_convs.index,df_convs[name]) ],
is_selected = True,
label_opts = opts.LabelOpts(position = 'inside')
)
funnel.set_series_opts(tooltip_opts = opts.TooltipOpts(formatter = '{a}<br/>{b}:{c}%'))
funnel.set_global_opts( title_opts = opts.TitleOpts(title = name),
# tooltip_opts = opts.TooltipOpts(formatter = '{a}<br\>{b}:{c}%'),
)
funnel.render_notebook()
小结 3:从单一转化率来看,支付订单数-到款订单数转换率为79%,后续可以从退款率着手分析退款原因,提高转换率。
数据分析在当今信息时代中扮演着至关重要的角色。无论是企业决策还是学术研究,Python已经成为最受欢迎的数据分析工具之一。但要学会 Python 还是要有一个学习规划,最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等学习教程。带你从零基础系统性的学好Python!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。