pandas实例-Visualization-Online Re

2020-05-20  本文已影响0人  橘猫吃不胖

继续前面的练习,之前的文章参考:


先来加载我们的数据集,这次有点儿问题

df = pd.read_csv(data_path  ,sep=',')

我看了原始数据,就是逗号分隔,而且文件编码也是utf-8,但是加载的时候不行

关于如何查看文件编码:

这个文件有点儿大,所以执行那个编码验证有点儿慢

df = pd.read_csv(data_path  ,sep=',' , encoding='ISO-8859-1')

先来理解下这个数据集,看上去,是线上销售的订单,有商品,有数量,有客户,有国家

1. Create a histogram with the 10 countries that have the most 'Quantity' ordered except UK

从题目看上去是要画一个直方图,按销量排序的,但是答案中是柱形图,也是这个单词也叫做柱形图,先这么来吧

首先,我们要按照国家聚合,对数量求和,然后排个序,最后把图画出来,并且剔除UK

先不剔除,看看结果数据:

df.groupby('Country')['Quantity'].sum().sort_values(ascending=False)

加上剔除:

df2 = df.query('Country != "United Kingdom"').groupby('Country')['Quantity'].sum().sort_values(ascending=False)
df2.head(10).plot.bar(x='Country')

2. Exclude negative Quantity entries

这里要剔除些销量,是负的的意思吧,先看看,估计是退货的

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

而且顺便发现了这个单价还有负的,不知道是不是异常数据,这个应该得剔除掉

3. Create a scatterplot with the Quantity per UnitPrice by CustomerID for the top 3 Countries (except UK)

这里要画个散点图,关于销量和单价的,购买人数前三的国家?

这个题目有点儿乱,我看了答案,也没搞懂到底是什么意思,我先按上面的理解来看看结果

假设就是看每个国家的购买人数,这个还是有点儿坑,感觉算的有点儿麻烦,等我找找简单的方式

我一开始是这么处理的:

df = df.query('UnitPrice > 0')

df3 = df.groupby(['Country' , 'CustomerID']).count().reset_index()

df3.groupby('Country')['CustomerID'].count().sort_values(ascending=False)

在SQL里就是一个count(distinct xx)操作而已,应该可以简化的

先不管过程,就结果来说,和作者给的是不一样,而他自己的代码也没有写怎么得到的那3个城市,所以我很奇怪。

先说说怎么简化上面的代码,实现count(distinct xx)

df.groupby(['Country']).agg({'CustomerID':pd.Series.nunique}).sort_values(by='CustomerID' , ascending=False)

看来这个agg函数,我没有掌握好呀,一会儿研究一下,先继续好了

不管是不是这3个城市,先画图吧:

sns.relplot(x='Quantity' , y='UnitPrice' , col='Country' , data=df.query('Country in ("Germany","France","Spain")') )

使用seaborn画散点图很方便

4. Investigate why the previous results look so uninformative

呃,作者这一题,貌似展开了一下,说明了几个问题,也就是上面我疑问的地方

作者那3个城市,是按照销量来的

哦,这一篇,我要放弃了,感觉原文好乱,或者是我英文理解的不太好,

为什么作者用单价*销量,然后又除以销量,是要算一个件均GMV??

貌似,作者最后是算了一个商品单价越高,收入越低,然后把单价按照1元进行了分桶,看上去是这样,实际上就是散点图啊,单价和收入(单价*销量),这不还是单价和销量的关系吗?

恩,也许是不一样,单价和GMV的关系

搞不懂,算了,这一篇就这样吧

上一篇下一篇

猜你喜欢

热点阅读