美文网首页
Kaggle数据集-ecommerce-data 探索

Kaggle数据集-ecommerce-data 探索

作者: 橘猫吃不胖 | 来源:发表于2020-05-24 14:41 被阅读0次

    数据来自kaggle,地址:https://www.kaggle.com/carrie1/ecommerce-data

    数据集可以下载到本地再使用,访问Kaggle的话,还可以看看其他人是如何来分析的


    好了,这个数据集,我们前面其实用过,上一次是为了练习pandas,这一次我们要从数据分析的角度来,看看我们能了解什么。

    了解我们的数据

    data_path = r'C:\Users\A\OneDrive\python\datasets\Online Retail.csv'
    df = pd.read_csv(data_path , encoding='ISO-8859-1')
    
    df.head()
    

    记录数很多,有50万+,一共8个字段

    InvoiceNo:订单号
    StockCode:商品编号
    Description:商品名称/描述
    Quantity:商品数量
    InvoiceDate:订单日期
    UnitPrice:商品单价
    CustomerID:用户ID
    Country:国家
    

    为了更好的了解数据,我们还可以使用info函数和describe函数看看

    df.info()
    df.describe()
    

    这里的QuantityUnitPrice中有负值,可能是退货的记录,我们需要注意下

    df.query('Quantity<0').head()
    df.query('UnitPrice<0').head()
    

    通过现有数据,我们想探索些什么?

    这是很典型的交易型数据,所以还是有很多角度可以去探索的
    我们直接可以发现的维度:

    • 商品维度
    • 时间维度
    • 用户维度
    • 国家维度

    指标的话,就有数量、销售额、用户数这些基本的,再延伸下,就有销往的国家数,单均GMV,人均GMV,每个国家的GMV等等等

    1. 一共有多少笔订单?多少用户?

    df.nunique()
    

    对数据去重之后,我们可以知道:
    ** 订单数是25900,用户数是4372,国家数是38**
    但是这个商品种类数有点问题,我理解的话,这个StockCode应该和Description去重数一样,但是不一样,这说明一个商品编码对应了多个描述?

    我们确认下

    df2 = df.groupby(by=['StockCode'])['Description'].nunique()
    df2[df2>1]
    

    这里还是有很多的不一致的,我们随便找一条看看

    df.query('StockCode == "10080"')['Description'].unique()
    

    这的确是对应了多个描述,但是我们上面去重后的差异也就200多,这里有600多条重复的,还是哪里不太对

    df[df['Description'].isnull()]
    

    居然这里还有好多描述为空的

    然后,我又随便看了看,发现这个单价为0的记录剔除之后,还有一种情况

    df.query('StockCode == "16156L"')['Description']
    

    这种编码一样,但是描述一样,但是格式不一致的情况

    好了,随后还是把Description就当做描述好了,还是以StockCode为主吧

    这个数据质量,哈哈哈

    这里我们需要确认下,这些单价为0,数量为负的记录,我们到底要不要,就这样留着,还是说替换掉?

    恩,先留着吧

    2. 总销量和总GMV

    我们先用单价和数量算一个商品金额

    df['sku_amount'] = df['Quantity']*df['UnitPrice']
    
    df[['Quantity','sku_amount']].sum()/10000
    

    结合上一题,我们这里就可以算出来很多均类指标:
    单均销量、单均GMV
    人均销量、人均GMV
    件均GMV(件单价)

    这里我就不算了,哈哈哈


    单个维度

    3. 商品维度:每种商品的销量、销售额、购买人数

    从商品维度来分析的话,比如看看哪些是畅销品,哪些是滞销品(卖的不好的)
    记得上面我们看过,有销量为负的商品,暂且把他们当做是退货,我们先看看正常订单好了

    df_1 = df.query('Quantity>0')
    df_2 = df_1.groupby('StockCode').agg({'Quantity':'sum' , 'sku_amount':'sum' , 'CustomerID':'nunique'})
    
    df_2.sort_values('Quantity' , ascending=False).head()
    

    这里,我们就根据商品编码,对销量和销售和做了合计,对用户数做了去重统计

    然后,我顺便加了个排名看看,商品再销量、销售额、购买人数上的排列怎么样

    df_2['Quantity_rank'] = df_2['Quantity'].rank(method='min' , ascending=False)
    df_2['sku_amount_rank'] = df_2['sku_amount'].rank(method='min', ascending=False)
    df_2['CustomerID_rank'] = df_2['CustomerID'].rank(method='min', ascending=False)
    
    df_2.sort_values('Quantity' , ascending=False).head()
    

    针对商品,我们再展开一下的话,比如,对商品做个分类,ABC分类,或者根据上面3个指标做一个商品价值总分

    贡献度80%销售额的有哪些商品,都是一些探索的角度

    还有,这里我们其实忽略了商品的价格,商品的价格和商品的笑脸、销售额、购买人数之间是否有关系呢?

    这个价格的我还真想看一下哈

    df_3 = df_1.groupby('UnitPrice').agg({'Quantity':'sum' , 'sku_amount':'sum' , 'CustomerID':'nunique'})
    
    df_3.reset_index(inplace=True)
    

    然后,我们画个散点图瞧一瞧

    df_3.plot.scatter(x='UnitPrice' , y='Quantity')
    

    这单价都很低呦

    顺便来个累计值吧

    df_3['Quantity_累计'] = df_3['Quantity'].cumsum()
    
    df_3.plot.line(x='UnitPrice', y='Quantity_累计')
    

    这个貌似看不出啥,看看累计占比吧,80%的销量集中在什么地方

    df_3['Quantity_累计占比'] = df_3['Quantity_累计']/df_3['Quantity'].sum()
    df_3.query('Quantity_累计占比<=0.8')
    

    4. 时间维度:每天、月、年的销量、销售额、购买人数

    要看时间的话,我们得看看这个日期的字段类型

    df_1.info()
    

    使用to_datetime转换一下

    df_1['InvoiceDate'] = pd.to_datetime(df_1['InvoiceDate'])
    
    

    我这里出来一个警告,不知道有没有影响


    我们先天看一下

    df_1.resample('D' , on='InvoiceDate')['Quantity'].sum().plot.line()
    

    这里可以发现1月多少号是一个峰值哎,1月份西方有什么重大节日吗?

    再按照月看看

    df_1.resample('M' , on='InvoiceDate')['Quantity'].sum().plot.line()
    

    看来,下半年是业绩高峰,尤其是11月份

    时间维度可以拓展很多,比如看看星期,看看小时

    这里遇到个问题,我想把周几和小时拿出来,但是不想要高维度的信息,我研究一下

    df_1.resample('H' , on='InvoiceDate')['Quantity'].sum()
    

    这里的天信息也在,其实我不需要,我咋只把小时拿出来呢?

    df_1.groupby(df_1['InvoiceDate'].dt.hour)['Quantity'].sum().plot.line()
    

    这里按销量看的,基本都集中在中午左右

    5. 国家维度:每个国家的销量、销售额、购买人数

    不行,有点儿搞不动了,思路其实都差不多,看看订单都集中在哪些国家,哪些国家的用户数最多等等,从销售额看看哪些国家贡献的最多,人均贡献额啥的

    6. 用户维度:用户的订单数、销量(购买件数)、销售额、商品种类数

    用户可以看的信息也很多,对用户做一个分类,比如RFM,打一个价值分,复购?复购周期等


    多个维度交叉

    比如看看不同国家购买的商品是否一致,不同国家的购物时间是否一致等等

    好了,这一篇就到这,下次继续

    相关文章

      网友评论

          本文标题:Kaggle数据集-ecommerce-data 探索

          本文链接:https://www.haomeiwen.com/subject/ddulahtx.html