数据分析-Tableua6.07

本内容涵盖了Tableau的基础操作,如数据链接、图形展示、地图分析和计算等,以及作业讲解,包括筛选、日期计算等。还介绍了电商数据分析案例,涉及国家销量、客单价和RFM模型等,通过数据清洗、建模和可视化揭示用户行为。
摘要由CSDN通过智能技术生成

今日课程内容

  • 内容回顾

  • 作业讲解

  • Tableua的参数

    • 动态参考线
    • 图表数据切换
    • 日期切换
    • 图表切换
  • 电商的数据分析案例

    • 筛选月份较佳数据
    • 客单价
    • 客户行为分析-RFM

今日内容详细

内容回顾

1.Tableua的基本操作
	a.链接数据源
    b.文件栏的使用(左边)
    c.中间:	标识 (颜色、大小、标签、详细信息、工具提示)
    			筛选框的使用
    d.基本图形展示
    	条形图
     e.地图分析
    	地理角色
        地图层
        中国领土不可分割
2.Tableua的构建图形
	a.表格
    	修改标签文本为指定列名
        多个数据的展示:度量名称、度量值
    b.条形图
    c.折线图
    d.饼图
    e.空心饼图
    f.树状图
    g.热图
    h.直方图-(数据桶)
    i.靶心图
    j.气泡图
    k.文字云
    l.盒须图
    ...
3.Tableua的计算
	聚合函数
    if...else
    case...when
    ifnull
    字符串
    日期

作业讲解

1.利用contains函数,筛选出包含'白'的名字
2.计算出生的天数
	定义新的字段:出生日期
3.计算城市发货的天数
	DATEDIFF 计算发货日期与订单日期之间的差值
4.给定时间,计算所在季度的天数
	step1.获得该日期所在的季度(DATETRUNC)
    step2.用下一季度的时间,减去这个季度的时间(DATEDIFF)

Tableua的参数

1、动态参考线
	step1:创建参数,作为参考线的值(浮点)
	step2:将参考线与参数结合
    step3:颜色分层
    
2、图表数据切换
	step1:字符串-列表类型
    step2:
    	划分成指定的数据
        1	利润
        2	销售额
        3 	数量
        ...
    step3:
    	设置
3、日期数据切换
	将日期以年、月、日的形式进行筛选
    step1:创建年、月、日
    step2:创建参数:
    	123	日
    step3:设置为精确日期
 
4、图表切换
	step1:创建参数
        1	地图分析
        2	产品分析
        3	地区分析
    step2:
    	通过筛选器,进行操作

电商数据案例


'''
    数据的来源:
        某英国的kaggle电商公司的数据,主要产品是零售批发

    数据的字段
    InvoiceNo:      订单号
    StockCode:      商品编号
    Description:    商品描述
    Quantity:       数量
    InvoiceDate      日期
    UnitPrice        单价
    CustomerID       客户id
    Country          国家

    分析的需求?
    1.购买商品数前十的国家是?
    2.交易额前十的国家是?
    3.哪些月份销量较佳?
    4.客单价多少?
    5.用户消费行为分析
'''
'''
    数据分析的基本步骤
    1、加载数据
    2、观察数据
    3、数据处理:数据清洗
    4、建模(完成KPI)
    5、可视化
    6、总结报告
'''
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['FangSong']
print('----------------step1:加载数据----------------')
df = pd.read_csv('data.csv', dtype=object)

print('----------------step2:观察数据----------------')
print('列名:\n', df.columns)
print()
print('数据类型:\n',df.dtypes)
print()
print('形状:\n',df.shape)
print()
print('索引:\n', df.index)
print()
print('非空统计-计数:\n', df.count())
print()
# 一般无效,数据的类型没有做转换,所以一般先对数据进行清洗
# print('描述性统计:\n', df.describe())
# print()
print('前5条数据:\n', df.head())
print()
print('数据的基本信息:\n',df.info())
'''
通过数据观察,初步了解以下问题
    问题:
    1、数据类型有问题
    2、数据存在缺失值
    3、数据有异常(有负数的数据,退货数据,不需要去分析)
    4、缺少金额一列
'''

print('----------------step3:数据处理-数据清洗----------------')
'''
    一般在做数据分析前,需要对数据进行处理操作,保证数据的准确性
    数据清洗主要包括:
    1、缺失值处理
    2、异常值处理
    3、重复值处理
    4、子集的选择
    5、类型的转换
    6、重命名
    7、数据排序
    8、字段统一化
'''
'''
    1、缺失值处理
'''
df.dropna(inplace=True)

'''
    2、类型转换
'''
df['Quantity'] = df['Quantity'].astype(float)
df['UnitPrice'] = df['UnitPrice'].astype(float)
df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate'])
'''
    3、异常值处理:去除负数的数据
'''
df = df[ df['Quantity']>=0 ]
print(df.describe())
'''
    4、重命名:不需要
    df.rename(columns={旧名:新名...})
'''
'''
    5、排序
'''
df.sort_values(by='InvoiceDate', inplace=True, ignore_index=True)

'''
    6、子集的选择
'''
df['money'] = df['Quantity']*df['UnitPrice']
print(df.head())

'''
    7、字段统一化
    usa USA 是同一个国家,但是不进行同一化处理,会影响结果
     USA
    USA
    apply(处理函数)
    处理函数:去除前后空格,全部转换成大写
'''
df['Country'] = df['Country'].str.upper()
df['Country'] = df['Country'].str.strip()
print(df['Country'])

# 先拷贝元数据
kpi_df = df.copy()
# print('----------------step4:建模,完成KPI----------------')
# plt.figure('kaggle电商数据分析', figsize=(6.4*1.5,4.8*1.5))
# # 封装代码
# def kpi(column, i, kpi_title):
#     # kpi1:购买商品数前十的国家是?
#     kpi1_data = kpi_df.groupby(by='Country')[[column]].sum()
#     kpi1_data.sort_values(by=column, ascending=False,inplace=True)
#     top_ten_quantity = kpi1_data[:10]
#     print(top_ten_quantity)
#     plt.subplot(2,2,i)
#     plt.title(kpi_title)
#     if i in [1,3]:
#         plt.xlabel('国家', fontsize=10)
#         plt.ylabel('数量', fontsize=10)
#         plt.xticks(rotation=90)
#         plt.bar(top_ten_quantity.index, top_ten_quantity[column])
#     else:
#         plt.xlabel('数量', fontsize=10)
#         plt.ylabel('国家', fontsize=10)
#         plt.barh(top_ten_quantity.index, top_ten_quantity[column])
#
# kpi('Quantity',1,'购买商品数前十的国家是?')
# kpi('Quantity',2,'购买商品数前十的国家是?')
# kpi('money', 3, '交易额前十的国家是?')
# kpi('money', 4, '交易额前十的国家是?')
# plt.show()
# # kpi2:交易额前十的国家是?
# # kpi3:哪些月份销量较佳?
# print('==============================3.哪些月份销量较佳?==================================')
# kpi3_data = kpi_df.groupby(by=df['InvoiceDate'].dt.month)[['Quantity']].sum()
# kpi3_data.sort_values(by='Quantity', ascending=False,inplace=True)
# print(kpi3_data)
#
# # 4.客单价多少?
# # 计算出总的客户
# # 计算出总的金额
# print('==============================4.客单价多少?==================================')
# new_df = kpi_df.drop_duplicates('CustomerID')
# total_ct = new_df['CustomerID'].count()
# print('总的客户量:',total_ct)
# total_money = kpi_df['money'].sum()
# print('总的金额:', total_money)
# print('KPI4 客单价:',(total_money/total_ct))

print('==============================5.用户消费行为分析==================================')
# RFM模型
'''
    R:最近一次消费日期
'''
import datetime

print('============================R==========================')
R_DATA = kpi_df.groupby(by='CustomerID')[['InvoiceDate']].max()
R_DATA['天数'] = datetime.datetime.today()- R_DATA['InvoiceDate']
# step1:计算组距
max_time = R_DATA['天数'].max()
min_time = R_DATA['天数'].min()
R_ZJ = (max_time-min_time)/5
team1 = (min_time, min_time+R_ZJ)
team2 = (min_time+R_ZJ ,min_time+2*R_ZJ)
team3 = (min_time+2*R_ZJ, min_time+3*R_ZJ)
team4 = (min_time+3*R_ZJ, min_time+4*R_ZJ)
team5 = (min_time+4*R_ZJ, max_time)
R_DATA.loc[(R_DATA['天数']>=team1[0]) & (R_DATA['天数']<team1[1]), 'R'] = 5
R_DATA.loc[(R_DATA['天数']>=team2[0]) & (R_DATA['天数']<team2[1]), 'R'] = 4
R_DATA.loc[(R_DATA['天数']>=team3[0]) & (R_DATA['天数']<team3[1]), 'R'] = 3
R_DATA.loc[(R_DATA['天数']>=team4[0]) & (R_DATA['天数']<team4[1]), 'R'] = 2
R_DATA.loc[(R_DATA['天数']>=team5[0]) & (R_DATA['天数']<=team5[1]), 'R'] = 1
R_DATA['R_S'] = R_DATA['R'].mean()
R_DATA.loc[R_DATA['R']>=R_DATA['R_S'],'R价值评估'] = '高'
R_DATA.loc[R_DATA['R']<R_DATA['R_S'],'R价值评估'] = '低'
R_DATA['客户'] = R_DATA.index
'''
    F:消费频率
'''
print('============================F==========================')
F_DATA = kpi_df.groupby(by='CustomerID')[['CustomerID']].count()
max_ci = F_DATA['CustomerID'].max()
min_ci = F_DATA['CustomerID'].min()
F_ZJ = (max_ci-min_ci)/5
team1 = (min_ci, min_ci+F_ZJ)
team2 = (min_ci+F_ZJ ,min_ci+2*F_ZJ)
team3 = (min_ci+2*F_ZJ, min_ci+3*F_ZJ)
team4 = (min_ci+3*F_ZJ, min_ci+4*F_ZJ)
team5 = (min_ci+4*F_ZJ, max_ci)
F_DATA.loc[(F_DATA['CustomerID']>=team1[0]) & (F_DATA['CustomerID']<team1[1]),'F'] = 1
F_DATA.loc[(F_DATA['CustomerID']>=team2[0]) & (F_DATA['CustomerID']<team2[1]),'F'] = 2
F_DATA.loc[(F_DATA['CustomerID']>=team3[0]) & (F_DATA['CustomerID']<team3[1]),'F'] = 3
F_DATA.loc[(F_DATA['CustomerID']>=team4[0]) & (F_DATA['CustomerID']<team4[1]),'F'] = 4
F_DATA.loc[(F_DATA['CustomerID']>=team5[0]) & (F_DATA['CustomerID']<=team5[1]),'F'] = 5
F_DATA['F_S'] = F_DATA['F'].mean()
F_DATA.loc[F_DATA['F']>=F_DATA['F_S'],'F价值评估'] = '高'
F_DATA.loc[F_DATA['F']<F_DATA['F_S'],'F价值评估'] = '低'
F_DATA['客户'] = F_DATA.index

'''
    M:消费金额
'''
print('============================M==========================')
M_DATA = kpi_df.groupby(by='CustomerID')[['money']].sum()
max_money = M_DATA['money'].max()
min_money = M_DATA['money'].min()
M_ZJ = (max_money-min_money)/5
team1 = (min_money, min_money+M_ZJ)
team2 = (min_money+M_ZJ ,min_money+2*M_ZJ)
team3 = (min_money+2*M_ZJ, min_money+3*M_ZJ)
team4 = (min_money+3*M_ZJ, min_money+4*M_ZJ)
team5 = (min_money+4*M_ZJ, max_money)

M_DATA.loc[(M_DATA['money']>=team1[0]) & (M_DATA['money']<team1[1]),'M'] = 1
M_DATA.loc[(M_DATA['money']>=team2[0]) & (M_DATA['money']<team2[1]),'M'] = 2
M_DATA.loc[(M_DATA['money']>=team3[0]) & (M_DATA['money']<team3[1]),'M'] = 3
M_DATA.loc[(M_DATA['money']>=team4[0]) & (M_DATA['money']<team4[1]),'M'] = 4
M_DATA.loc[(M_DATA['money']>=team5[0]) & (M_DATA['money']<=team5[1]),'M'] = 5
M_DATA['M_S'] = M_DATA['M'].mean()

M_DATA.loc[M_DATA['M']>=M_DATA['M_S'],'M价值评估'] = '高'
M_DATA.loc[M_DATA['M']<M_DATA['M_S'],'M价值评估'] = '低'
M_DATA['客户'] = M_DATA.index

rf_data = pd.merge(R_DATA,F_DATA)
RFM = pd.merge(rf_data, M_DATA)
NB_CUS = RFM[(RFM['R价值评估'] == "高") & (RFM['F价值评估'] == "高") & (RFM['M价值评估'] == "高")]
print('高价值客户')
print(NB_CUS)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值