如何用 Python 转换 Costco 数据?

 
Costco 是全球第一家会员制的仓储批发卖场,中文翻译过来叫「开市客」或「好市多」,始创于 1976 年的美国加州,截止到 2019 年 1 月,有 736 家门店,9270 万会员,年营业额 1310 亿美元,会员续费率 90%,全球拥有 24 万名员工。
 
2019 年 8 月 27 日,中国大陆第一家 Costco 在上海开业,因为人满为患,Costco 实行限流,将卖场人数控制在 2000 人以内,有人早上 4:30 就去排队。
 
Costco 把零售效率做到极致,是零售企业学习的标杆。
 
作为数据分析师,也要学习 Costco 死磕自己、为用户创造价值的精神。
 
下面,我们从网上读取一些 Costco 的股价数据,学习用 Python 对这些数据进行转换,为将来的数据分析做好准备。
 
首先,我们从网页中读取Costco 的历史股价数据。
 
然后,我们对数据进行清洗,得到一个干净整洁的数据表格。
 
 
接下来,我们就可以正式开始对数据进行转换。
 
1. 如何转换为时间?
 
使用 transform() 函数,结合 dateutil 模块中的 parse() 函数,我们可以将字符转换为时间。
 
 
大部分常见的字符形式,都可以使用 parse() 进行转换,例如:
 
 
需要注意的是,要防止出现意外情况,例如:parse('80') 的结果是 1980 年的当前日期,如果这不是你想要的结果,那么在转换之前,建议把相应的字符串写得更具体明确一些。
 
使用 pd.to_datetime() 函数,不仅能将字符转换为时间,而且能将数值转换为时间,还能指定时间单位和起始日期等参数,例如:
 
 
2. 如何转换为数值?
 
使用 pd.to_numeric() 函数,结合自由度比较高的 apply() 函数,我们可以实现将每一列都强制转换为数值,无法转换的元素用 nan 表示。
 
 
 
其中 errors='coerce' 是 pd.to_numeric() 函数的一个参数,如果把 coerce 替换为 ignore,那么将忽略无法转换的元素,让其保持原样。
 
 
3. 如何转换为字符?
 
使用 astype() 函数,我们可以实现数据类型的相互转换。比如说,下面的代码实现把数据框全部转换为字符型。
 
 
对于时间型的数据,我们可以使用 strftime() 函数,转换为指定的字符格式,例如:
 
 
4. 如何转换为区间?
 
使用 pd.cut() 函数,我们可以将数值切割为指定的区间,例如:
 
 
其中 right = True 代表左开右闭,默认为 False,即左闭右开。
 
我们可以使用 labels 参数,为每个区间指定想要显示的内容,例如:
 
 
如果把 bins 参数定义为一个整数,那么数值将被切割为等分的区间。
 
 
 
 
5. 如何做分组转换?
 
结合使用 groupby() 和 transform() 函数,我们可以在行数保持不变的情况下,对某列进行分组求和,例如:
 
 
这样分组转换数据的好处是,能够方便地计算每个数据对应各自分组的占比。比如说,下面代码的计算结果是:每天成交量占当月总成交量的比例。
 
 
 
如果使用 apply() 函数,那么返回结果会聚合成 5 行。
 
 
如何使用 agg() 函数,那么返回的结果也是聚合成 5 行,而且可以同时应用多个函数。
 
 
Pandas 从 0.25 版本开始,agg() 函数得到增强,可以对多个不同的列,应用不同的函数,并对聚合的结果进行自定义命名。
 
比如说,类似于 Excel 中经典的数据透视表功能,我们可以使用下面的代码,实现按月份分组,同时对日期进行计数、对开盘价求平均值和最大值、对成交量求和。
 
 
可以看出,与 Excel 相比,Python 的功能要强大很多,灵活运用相关函数,能够明显提升数据分析的效率。
 
6. 如何标准化转换?
 
为了消除单位量纲的影响,让不同变量之间能够进行对比分析,我们可以对数据进行标准化转换,0-1 标准化是一种常用的标准化转换的方法。比如说,下面的代码实现了 Costco 开盘价的 0-1 标准化。
 
 
经过 0-1 标准化转换之后,原来的最小值变成 0,原来的最大值变成 1,其他的值都变成了介于 0 到 1 之间的值。
 
7. 小结
 
最后,我们还是用一张思维导图,对转换数据的方法做个小结。
 
 
posted @ 2020-07-10 15:10  南鹤-  阅读(153)  评论(0编辑  收藏  举报