本章节以及后续章节的源码,当然也可以从我的github下载,在源码中我自己加了一些中文注释。
来自Bitly的USA.gov数据 ,文件中各行的格式为JSON(即JavaScript Object Notation,这是一种常用的Web数据格式)。例如,如果我们只读取某个文件中的第一行,那么所看到的结果应该是下面这样:
Python有内置或第三方模块可以将JSON字符串转换成Python字典对象。这里,我将使用json模块及其loads函数逐行加载已经下载好的数据文件,records对象就成为一组Python字典了:
一、用纯Python代码对时区进行计数
假设我们想要知道该数据集中最常出现的是哪个时区(即tz字段)
计数的办法是在遍历时区的过程中将计数值保存在字典中:
这样写会使get_counts函数更简洁得到前10位的时区及其计数值:
另一种更快捷的方法:
二、用pandas对时区进行计数
1、把数据建成表
下图是DataFrame格式的frame表:
2、计算时区数量
frame['tz']所返回的Series对象有一个value_counts方法,计算每个时区出现的数量,从大到小排列:
3、填充缺失值
fillna函数可以替换缺失值NA,而未知值(空字符串)可以通过布尔型数组索引加以替换
4、常出现的10个时区进行绘图
usa.gov示例数据中最常出现的时区 usa.gov示例数据中最常出现的时区5、分离出浏览器
a字段含有执行URL短缩操作的浏览器、设备、应用程序的相关信息:
6、统计各个浏览器出现的数量
7、按照Windows和非Windows用户对时区统计信息进行分解
(1)由于有的agent缺失,所以首先将他们从数据中移除,其次根据a值计算出各行是否是Windows
(2)根据时区和新得到的操作系统列表对数据进行分组
(3)分组计数,通过size()对分组结果进行计数,并利用unstack对计数结果进行重塑
(4)我们来选取最常出现的时区。为了达到这个目的,我根据agg_counts中的行数构造了一个间接索引数组:
(5)通过take按照这个顺序截取了最后10行最大值:
(6)做柱状图
最常出现时区的Windows和非Windows用户(7)上图不太容易看清楚较小分组中Windows用户的相对比例,因此标准化分组百分比之和为1:
快速学习:
网友评论