目录
一:全文思路整理
前面写了如何用excel、SQL、Tableau去分析这个数据源,本文主要描述python怎么去实现,目的是总结一整套案例分析的思路,以便日后分析参考。本文的思路为:
二:数据处理流程
可视化部分做了一个可视化库选择的参考。(各有千秋,个人比较喜欢pyecharts和seaborn,主要是视觉上还过得去。)
数据导入
#导入包
import pandas as pd
import numpy as np
#可视化包
import matplotlib.pyplot as plt
import seaborn as sns
#设置seaborn的格式
sns.set(style='darkgrid')
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
数据导入,并作出一些便于之后分析的处理(选择列、重命名列等)。
#导入数据 因为第一行有'数据查询表(2019-11-01 00:00:00 - 2019-11-30 23:59:59)',影响操作,所以选择添加参数header=1
# usecols 选择需要分析的列
df=pd.read_csv('./某油站订单流水.csv',header=1,usecols=[4,7,16,21,22,23,24,25],dtype={
'油枪':'str'})
#重命名部分列
df=df.rename(columns={
'打印完成':'paytime','主用户标识Openid':'id'})
数据清洗
1、空值
df.info() #查看数据类型、是否有空值 id列只有54546 说明含有空值
# df.head()
#对于做删除空值的操作
df.dropna(how='any',inplace=True)
df.notnull.count()
->
2、重复值
#看一下有没有重复值 可以是某列,某几列,全部
df[df.duplicated()]
#没有不做处理 如果有
# df.drop_duplicates(inplace=True)
3、异常值(基于业务场景)
我们这里认为实付金额<10是不符合业务逻辑的,做删除处理。
小插曲:遇见表头空格
#表头存在异常 我们先去掉空格
#处理数据时发现表头有些字段含有“ ”(空格)做替换处理
df.keys()
#运用列表生成式修改表头
df.columns = [i.strip() for i in df.keys()]
df.columns
-》
#删除实付金额小于10的
df.drop(df[df['实付金额']<10].index,inplace=True)
df.describe()
#分组看一下状态的分布
staus_g = df.groupby('状态',as_index=False).count()[['状态','paytime']] #count不会计数null值
staus_g = staus_g.rename(columns={
"paytime":'value'})
staus_g['rate'] = (staus_g['value']/staus_g['value'].sum())
staus_g
下文将只对成功的订单进行分析,所以我们对退款的进行删除.
#删除不为成功的订单
df.drop(df[df['状态'] !='成功'].index,inplace=True)
df.describe()
->>
# 查看各列格式
df.dtypes
进行时间的处理
#时间的处理
#导入模块
from pandas import to_datetime
#格式转化
df_dt=