数据分析实例测试
案例背景:MuscleHub 是一家新开业的健身房,为了更好地经营业务,店主向顾客提供一次免费的体能测试,但是体能测试会增加人力成本,是否真的有必要向所有顾客提供体能测试呢?请给出你的预判,看看最后的分析结果是否一致呢?
于是,进行AB Test 进行测试,经营模式如下图所示:
准备数据
1.案例数据有四个csv文件,分别是visits.csv(来客信息)、fitness_tests.csv(体能测试信息)、applications.csv(申请信息)、purchases.csv(付费信息)
数据来源于网络,导入三剑客模块加卡方检验:
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
from scipy.stats import chi2_contingency
用read_csv()方法导入数据源,观察各表的数据结构:
visits = pd.read_csv('visits.csv')
visits.head()
fitness_tests = pd.read_csv('fitness_tests.csv')
fitness_tests.head()
applications = pd.read_csv('applications.csv')
applications.head()
purchases = pd.read_csv('purchases.csv')
purchases.head()
可以看出,每个表之间有大量的重复客户信息,进行多表关联,把客户的行为(来访-测试-申请-付费)放在一张表中,由于业务需要,只选取近期在7-1-17之后的数据,并且认为Email是主键(即认为Email是不可重复的),这里直接在数据库中进行了操作:
SELECT visits.first_name,visits.last_name,visits.gender,visits.email,visits.visit_date,
fitness_tests.fitness_test_date,
applications.application_date,
purchases.purchase_date
FROM visits LEFT JOIN fitness_tests
ON visits.email = fitness_tests.email
LEFT JOIN applications
ON visits.email = applications.email
LEFT JOIN purchases
ON visits.email = purchases.email
WHERE visits.visit_date >= '7-1-17'
将查询结果导入python命名为df数据框,先查看df的大致信息:
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5006 entries, 0 to 5005
Data columns (total 8 columns):
first_name 5006 non-null object
last_name 5006 non-null object
gender 5006 non-null object