0. 序言


Costco 是全球第一家会员制的仓储批发卖场,中文翻译过来叫「开市客」或「好市多」,始创于 1976 年的美国加州,截止到 2019 年 1 月,有 736 家门店,9270 万会员,年营业额 1310 亿美元,会员续费率 90%,全球拥有 24 万名员工。


2019 年 8 月 27 日,中国大陆第一家 Costco 在上海开业,因为人满为患,Costco 实行限流,将卖场人数控制在 2000 人以内,有人早上 4:30 就去排队。


Costco 把零售效率做到极致,是零售企业学习的标杆。


作为数据分析师,也要学习 Costco 死磕自己、为用户创造价值的精神。


下面,我们从网上读取一些 Costco 的股价数据,学习用 Python 对这些数据进行转换,为将来的数据分析做好准备。


首先,我们从网页中读取Costco 的历史股价数据。

如何用 Python 转换 Costco 数据?_第1张图片


然后,我们对数据进行清洗,得到一个干净整洁的数据表格。


如何用 Python 转换 Costco 数据?_第2张图片


接下来,我们就可以正式开始对数据进行转换。


1. 如何转换为时间?


使用 transform() 函数,结合 dateutil 模块中的 parse() 函数,我们可以将字符转换为时间。


如何用 Python 转换 Costco 数据?_第3张图片


大部分常见的字符形式,都可以使用 parse() 进行转换,例如:


如何用 Python 转换 Costco 数据?_第4张图片


需要注意的是,要防止出现意外情况,例如:parse('80') 的结果是 1980 年的当前日期,如果这不是你想要的结果,那么在转换之前,建议把相应的字符串写得更具体明确一些。


使用 pd.to_datetime() 函数,不仅能将字符转换为时间,而且能将数值转换为时间,还能指定时间单位和起始日期等参数,例如:


如何用 Python 转换 Costco 数据?_第5张图片


2. 如何转换为数值?


使用 pd.to_numeric() 函数,结合自由度比较高的 apply() 函数,我们可以实现将每一列都强制转换为数值,无法转换的元素用 nan 表示。



如何用 Python 转换 Costco 数据?_第6张图片


其中 errors='coerce' 是 pd.to_numeric() 函数的一个参数,如果把 coerce 替换为 ignore,那么将忽略无法转换的元素,让其保持原样。


如何用 Python 转换 Costco 数据?_第7张图片


3. 如何转换为字符?


使用 astype() 函数,我们可以实现数据类型的相互转换。比如说,下面的代码实现把数据框全部转换为字符型。


如何用 Python 转换 Costco 数据?_第8张图片


对于时间型的数据,我们可以使用 strftime() 函数,转换为指定的字符格式,例如:


如何用 Python 转换 Costco 数据?_第9张图片


4. 如何转换为区间?


使用 pd.cut() 函数,我们可以将数值切割为指定的区间,例如:


如何用 Python 转换 Costco 数据?_第10张图片


其中 right = True 代表左开右闭,默认为 False,即左闭右开。


我们可以使用 labels 参数,为每个区间指定想要显示的内容,例如:


如何用 Python 转换 Costco 数据?_第11张图片


如果把 bins 参数定义为一个整数,那么数值将被切割为等分的区间。



如何用 Python 转换 Costco 数据?_第12张图片



5. 如何做分组转换?


结合使用 groupby() 和 transform() 函数,我们可以在行数保持不变的情况下,对某列进行分组求和,例如:


如何用 Python 转换 Costco 数据?_第13张图片


这样分组转换数据的好处是,能够方便地计算每个数据对应各自分组的占比。比如说,下面代码的计算结果是:每天成交量占当月总成交量的比例。


如何用 Python 转换 Costco 数据?_第14张图片



如果使用 apply() 函数,那么返回结果会聚合成 5 行。


如何用 Python 转换 Costco 数据?_第15张图片


如何使用 agg() 函数,那么返回的结果也是聚合成 5 行,而且可以同时应用多个函数。


如何用 Python 转换 Costco 数据?_第16张图片


Pandas 从  0.25 版本开始,agg() 函数得到增强,可以对多个不同的列,应用不同的函数,并对聚合的结果进行自定义命名。


比如说,类似于 Excel 中经典的数据透视表功能,我们可以使用下面的代码,实现按月份分组,同时对日期进行计数、对开盘价求平均值和最大值、对成交量求和。


如何用 Python 转换 Costco 数据?_第17张图片


可以看出,与 Excel 相比,Python 的功能要强大很多,灵活运用相关函数,能够明显提升数据分析的效率。


6. 如何标准化转换?


为了消除单位量纲的影响,让不同变量之间能够进行对比分析,我们可以对数据进行标准化转换,0-1 标准化是一种常用的标准化转换的方法。比如说,下面的代码实现了 Costco 开盘价的 0-1 标准化。


如何用 Python 转换 Costco 数据?_第18张图片


经过 0-1 标准化转换之后,原来的最小值变成 0,原来的最大值变成 1,其他的值都变成了介于 0 到 1 之间的值。


7. 小结


最后,我们还是用一张思维导图,对转换数据的方法做个小结。


如何用 Python 转换 Costco 数据?_第19张图片