pandas实例-Visualization-Online Re
继续前面的练习,之前的文章参考:
- pandas实例-了解你的数据-Chipotle
- pandas实例-筛选与排序-Chipotle
- pandas实例-数据可视化-Chipotle
- pandas实例-了解你的数据-Occupation
- pandas实例-筛选与过滤-Euro 12
- pandas实例-筛选与过滤-Fictional Army
- pandas实例-聚合-Alcohol Consumption
- pandas实例-聚合-Occupation
- pandas实例-聚合-Regiment
- pandas实例-Apply-Student Alcohol Consumption
- pandas实例-Apply-Crime Rates
- pandas实例-Merge-MPG Cars
- pandas实例-Merge-Fictitious Names
- pandas实例-merge-House Market
- pandas实例-Stats-US_Baby_Names
- pandas实例-Stats-Wind Statistics
- pandas实例-Visualization-Titanic_Desaster
- pandas实例-Visualization-Scores
先来加载我们的数据集,这次有点儿问题
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的关系
搞不懂,算了,这一篇就这样吧