数据分析day1:json数据处理

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

《数据分析day1:json数据处理》 读取一行数据

很乱,很难看懂

《数据分析day1:json数据处理》 利用第三方转换为易读模式

每一行都是一个json格式数据,里面有不少数据,目前我能看出来几个:时区,国家,浏览器,URL啥的

《数据分析day1:json数据处理》

从第二行开始解释一下:

列表推导式是经常使用的,后半句
for line in open(path)一行一行读取这个文件每一行为一个元素,最后输出为一个列表


json.loads(line)又对每一行的json数据进行了处理转换为了dict(字典)

所以最终的输出是一个列表(当然这是毋庸置疑的列表推导式肯定返回列表),里面的每一个元素都是字典。

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

《数据分析day1:json数据处理》 报错keyerror

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

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

《数据分析day1:json数据处理》

可以看到这次可以了,下面再来解释下这个列表推导式:

首先明确
records是一个列表,
for rec in records这里的
rec
records中的元素:字典

这里就是遍历
records中的每一个字典

原先是直接将每一个字典中的时区字段取出来组成一个新的列表

但是并不是每一个字典中都有时区字段,所有加了个判断
if 'tz' in rec如果这个字典存在这个key
'tz'再将它取出来

综上希望能完全理解这个列表推导式,会对我们后面的学习有很大帮助

最后输出为一个列表可以切片操作取出前十个看一下

先用笨方法进行计数:

《数据分析day1:json数据处理》 两种方法

两种方法都能实现,第二种可以记一下,生成了一个字典,但是其中的所有value存在切默认为0

《数据分析day1:json数据处理》 美国纽约

第二个函数生成的字典很神奇,一个没有设置的key,依然存在,且value为0

美国纽约的记录数为1251

《数据分析day1:json数据处理》 前十位时区及其计数值

count_dict.items()返回一个可以遍历的元组数组,然后计数和时区换下位置,最后输出一个列表

sort()方法对列表进行升序排序(默认升序,可自己设定)

当然有简单的方法

《数据分析day1:json数据处理》 简单方法

标准库
collections.Counter

使用
Counter类直接对这个列表进行了计数

使用
most_common(int)函数直接进行排序与取值

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

首先了解一下DataFrame

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

《数据分析day1:json数据处理》 DataFrame

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

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

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

《数据分析day1:json数据处理》 计数完成

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

《数据分析day1:json数据处理》 替换操作

fillna这里将值为NA的替换为missing,下面执行了一个相当于查找赋值语句(这一行想深究什么意思建议查资料),将值为空的赋值Unknow,

《数据分析day1:json数据处理》 绘图

这样就绘制出了常见时区的条形图,这里利用的是matplotlib库,可能你没有看到我导入这个库,这是因为我启动Ipython的时候使用了
--pylab指令,或者你也可以用
--matplotlib指令

《数据分析day1:json数据处理》 获取浏览器数据

可以看出来索引为a的是浏览器相关信息,下面解释下第56行的列表推导式是如何拿到浏览器数据的

首先
frame.a.dropna()取到了所有的浏览器相关数据并删除了为空的数据,之后遍历这些数据并利用空格切割字符串拿到索引为0的也就是浏览器字段

《数据分析day1:json数据处理》 排序

《数据分析day1:json数据处理》

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

转载请注明出处

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

    原文作者:james_chang
    原文地址: https://www.jianshu.com/p/bb9531079204
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞