python数据分析第三章_《数据分析实战》--第三章 python实现

在商业数据分析流程中主要介绍分析流程以及每个过程的具体含义。这一章主要利用合并汇总来剖析企业销售额下降的原因。主要利用python中的pandas、matplotlib模块完成书中分析。

1、读取数据、合并数据

可以采用如下方式先设置工作路径至数据表放在位置,然后利用 os.getcwd() 来查看当前工作路径。

1 importos2

3 filepath = '数据文件所在路径'

4 os.chdir(filepath) #将工作路径设置至filepath

然后利用pandas来读取数据与合并数据。

1 importpandas as pd2 from pandas importDataFrame, Series3

4 #导入三个csv数据表

5 DAU_data = pd.read_csv("section3-dau.csv")6 DPU_data = pd.read_csv("section3-dpu.csv")7 Install_data = pd.read_csv("section3-install.csv")8

9 #合并数据

10 data_total = DAU_data.merge(Install_data, on="user_id") #on表示键11 data_total = data_total.merge(DPU_data, how='outer', on=['user_id', 'log_date']) #how表示连接方式,这里采用外连接(outer)

合并后的前10行数据。

log_date app_name_x user_id install_date app_name_y app_name payment

02013-06-01 game-01 116 2013-04-17 game-01NaN NaN1 2013-06-02 game-01 116 2013-04-17 game-01NaN NaN2 2013-06-03 game-01 116 2013-04-17 game-01NaN NaN3 2013-06-04 game-01 116 2013-04-17 game-01NaN NaN4 2013-06-05 game-01 116 2013-04-17 game-01NaN NaN5 2013-06-06 game-01 116 2013-04-17 game-01NaN NaN6 2013-06-07 game-01 116 2013-04-17 game-01NaN NaN7 2013-06-08 game-01 116 2013-04-17 game-01NaN NaN8 2013-06-09 game-01 116 2013-04-17 game-01NaN NaN9 2013-06-10 game-01 116 2013-04-17 game-01 NaN NaN

2、数据预处理

先将多余的列删除,然后查看每一列的数据类型与缺失情况。

1 data_total.drop(columns=['app_name_y', 'app_name'], inplace=True)2 data_total.info()3 data_total.head()

返回结果如下所示:

为了后面统计的方便,这里将user_id的数据类型转变为字符型,然后将日期‘2018-01-03’转换成‘2018-01’。

1 #将user_id变为字符型

2 data_total['user_id'] = data_total['user_id'].astype('str')3

4 #日期转换

5 data_total.loc[:, 'log_date'] = pd.to_datetime(data_total.loc[:, 'log_date'], format='%Y/%m/%d', errors='coerce')6 data_total.loc[:, 'log_date_new'] = data_total.loc[:, 'log_date'].dt.strftime('%Y-%m')7 data_total.drop(columns=['log_date'], inplace=True) #删除列

8 data_total.rename(columns={'log_date_new':'log_date'}, inplace=True) #将列名重命名

9

10 data_total.loc[:, 'install_date'] = pd.to_datetime(data_total.loc[:, 'install_date'], format='%Y/%m/%d', errors='coerce')11 data_total.loc[:, 'install_date_new'] = data_total.loc[:, 'install_date'].dt.strftime('%Y-%m')12 data_total.drop(columns=['install_date'], inplace=True) #删除列

13 data_total.rename(columns={'install_date_new':'install_date'}, inplace=True) #将列名重命名

增加一列变量new_user,表示该位客户是否为新用户,0表示老用户,1表示新用户。

1 #判断其是否为新用户

2 data_total['new_user'] =03 data_total['new_user'][data_total['log_date']==data_total['install_date']] = 1

4 data_total.head(10)

将用户消费金额一列中的缺失值用0填充,然后查看最终数据。

1 data_total['payment'].fillna(value=0, inplace=True)2 #查看数据

3 data_total.head()

app_name_x user_id payment log_date install_date new_user

0 game-01 116 0.0 2013-06 2013-0401 game-01 116 0.0 2013-06 2013-0402 game-01 116 0.0 2013-06 2013-0403 game-01 116 0.0 2013-06 2013-0404 game-01 116 0.0 2013-06 2013-04 0

为了查看新老用户在6月、7月的消费总额,对消费金额按照月份以及‘new_user’进行分组加总。

1 result = data_total.pivot_table(values='payment', index='new_user', columns='log_date', aggfunc='sum')2 result.index = ['已有用户', '新用户']3 result

3、数据可视化

利用matplotlib做一个累积分布图。

1 importmatplotlib.pyplot as plt2

3 x =list(result.columns)4 y1 = list(result.loc['已有用户', :])5 y2 = list(result.loc['新用户', :])6

7 plt.figure(dpi=100, facecolor='0.8')8 plt.bar(x, y1, width=0.5, color='r', )9 plt.bar(x, y2, width=0.5, color='b', bottom=y1)10 plt.ylim(0, 280000) #设置y轴范围

11 plt.legend(['已有用户', '新用户'], loc='upper right', fontsize=10) #设置图例名称以及位置

12 plt.xlabel('log_month') #x轴名称

13 plt.ylabel('total.payment(JPY)') #y轴名称

14 plt.grid(color='0.5', alpha=0.5) #设置网格

15 #添加标签

16 for a,b inzip(x, y1):17 plt.text(a, b-100000, '已有用户', ha='center', va='bottom',fontsize=10)18 for a,b inzip(x, y2):19 plt.text(a, b+150000, '新用户', ha='center', va='bottom',fontsize=10)20 #显示

21 plt.show()

由此,由上图可以清晰看出导致本月销售额下降的一个重要原因是由于本月的新用户消费额缩减了近一半。

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页