生活不易 我用python我爱编程

数据分析day1:json数据处理

2018-05-25  本文已影响60人  james_chang

数据来自《利用python进行数据分析》附加数据文件,本篇使用采集的用户匿名数据

读取一行数据

很乱,很难看懂

利用第三方转换为易读模式
每一行都是一个json格式数据,里面有不少数据,目前我能看出来几个:时区,国家,浏览器,URL啥的

从第二行开始解释一下:
列表推导式是经常使用的,后半句for line in open(path)一行一行读取这个文件每一行为一个元素,最后输出为一个列表
json.loads(line)又对每一行的json数据进行了处理转换为了dict(字典)
所以最终的输出是一个列表(当然这是毋庸置疑的列表推导式肯定返回列表),里面的每一个元素都是字典。

可以看到输出的第一个元素:一个字典


报错keyerror

这里抛出了一个错误,咋一看语句没啥错误,但是为什么抛出这个错误呢,这里我直接说了:这个列表中的每一个字典并不是都有(时区)tz字段,所以有的就会找不到key啊,所以会抛出keyerror

如何解决:列表推导式加判断


可以看到这次可以了,下面再来解释下这个列表推导式:
首先明确records是一个列表,for rec in records这里的recrecords中的元素:字典
这里就是遍历records中的每一个字典
原先是直接将每一个字典中的时区字段取出来组成一个新的列表
但是并不是每一个字典中都有时区字段,所有加了个判断if 'tz' in rec如果这个字典存在这个key'tz'再将它取出来
综上希望能完全理解这个列表推导式,会对我们后面的学习有很大帮助
最后输出为一个列表可以切片操作取出前十个看一下

先用笨方法进行计数:

两种方法
两种方法都能实现,第二种可以记一下,生成了一个字典,但是其中的所有value存在切默认为0
美国纽约
第二个函数生成的字典很神奇,一个没有设置的key,依然存在,且value为0
美国纽约的记录数为1251
前十位时区及其计数值
count_dict.items()返回一个可以遍历的元组数组,然后计数和时区换下位置,最后输出一个列表
sort()方法对列表进行升序排序(默认升序,可自己设定)

当然有简单的方法

简单方法
标准库collections.Counter
使用Counter类直接对这个列表进行了计数
使用most_common(int)函数直接进行排序与取值

下面要学的是今天的重头戏,利用科学计算库pandas来对时区进行计数

首先了解一下DataFrame

DataFrame是pandas中最重要的数据结构,它用于将数据表示为一个表格先看一个简单的例子


DataFrame

内容太多,最好自己尝试一下,这里的参数紧接上文,是上文中的参数

这里输出的是摘要视图,主要用于比较大的DataFrame对象

这个时候就已经快要完工了,直接取时区就可以了


计数完成

这种通过字段查找返回的是一个Series对象,又一个自带的value_counts函数可以自动计数排序,返回的依然是Series对象,并且可以进行切片操作

替换操作
fillna这里将值为NA的替换为missing,下面执行了一个相当于查找赋值语句(这一行想深究什么意思建议查资料),将值为空的赋值Unknow, 绘图
这样就绘制出了常见时区的条形图,这里利用的是matplotlib库,可能你没有看到我导入这个库,这是因为我启动Ipython的时候使用了--pylab指令,或者你也可以用--matplotlib指令 获取浏览器数据
可以看出来索引为a的是浏览器相关信息,下面解释下第56行的列表推导式是如何拿到浏览器数据的
首先frame.a.dropna()取到了所有的浏览器相关数据并删除了为空的数据,之后遍历这些数据并利用空格切割字符串拿到索引为0的也就是浏览器字段 排序

这里解释一下where的用法,where接收三个参数,第一个是条件,第二个是满足条件后的输出,第三个是不满足条件的输出,也就是查找a字段并区分为两种,一种为windows一种为not windows,最后并利用时区和操作系统排序生成一个新的DataFrame

转载请注明出处

python自学技术互助扣扣群:670402334

上一篇下一篇

猜你喜欢

热点阅读