数据分析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
这里的rec
是records
中的元素:字典这里就是遍历
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