数据分析day1:json数据处理

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

数据分析day1:json数据处理_第1张图片
读取一行数据

很乱,很难看懂

数据分析day1:json数据处理_第2张图片
利用第三方转换为易读模式

每一行都是一个json格式数据,里面有不少数据,目前我能看出来几个:时区,国家,浏览器,URL啥的
数据分析day1:json数据处理_第3张图片

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

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


数据分析day1:json数据处理_第4张图片
报错keyerror

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

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

数据分析day1:json数据处理_第5张图片

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

先用笨方法进行计数:

数据分析day1:json数据处理_第6张图片
两种方法

两种方法都能实现,第二种可以记一下,生成了一个字典,但是其中的所有value存在切默认为0
数据分析day1:json数据处理_第7张图片
美国纽约

第二个函数生成的字典很神奇,一个没有设置的key,依然存在,且value为0
美国纽约的记录数为1251
数据分析day1:json数据处理_第8张图片
前十位时区及其计数值

count_dict.items()返回一个可以遍历的元组数组,然后计数和时区换下位置,最后输出一个列表
sort()方法对列表进行升序排序(默认升序,可自己设定)

当然有简单的方法

数据分析day1:json数据处理_第9张图片
简单方法

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

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

首先了解一下DataFrame

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


数据分析day1:json数据处理_第10张图片
DataFrame

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

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

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


数据分析day1:json数据处理_第11张图片
计数完成

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

数据分析day1:json数据处理_第12张图片
替换操作

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

数据分析day1:json数据处理_第13张图片
绘图

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

数据分析day1:json数据处理_第14张图片
获取浏览器数据

可以看出来索引为a的是浏览器相关信息,下面解释下第56行的列表推导式是如何拿到浏览器数据的
首先 frame.a.dropna()取到了所有的浏览器相关数据并删除了为空的数据,之后遍历这些数据并利用空格切割字符串拿到索引为0的也就是浏览器字段

数据分析day1:json数据处理_第15张图片
排序

数据分析day1:json数据处理_第16张图片

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

转载请注明出处

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

你可能感兴趣的:(数据分析day1:json数据处理)