利用Python进行数据分析——笔记2

用纯Python代码对时区进行计数

(注:原来使用pylab输入代码,不太方便,就换成了Pycharm编辑器)

假设我们想要知道该数据集中最常出现的是哪个时区(即tz字段),得到答案的办法有很多。

import json
path ='G:/python/pydata-book-master/ch02/1.txt'
records=[json.loads(line) for line in open(path)]
time_zones=[rec['tz'] for rec in records if 'tz' in rec]
time_zones[:10]

首先,我们用列表推导式取出一组时区:

 

出现错误,这是因为不是所有记录都有时区字段。

这种情况,只需在列表推导式末尾加上一个if ’tz’ in rec判断即可

 

只看前10个时区,我们发现有些是未知的,也就是空的。虽然可以将它们过滤掉,但现在暂时保留。接下来,为了对时区进行计数,书中提到了两种方法:

1 只使用标准Python

2 使用pandas

计数的方法之一是在遍历时区的过程中将计数值保存在字典中:

def get_counts(sequence):
    counts={}
    for x in sequence:
        if x in counts:
            counts[x]+=1
        else:
            counts[x]=1
    return counts

将代码写到函数中是为了获得更高的可重用性。要用它对时区进行处理,只需将time_zones传入即可:

counts=get_counts(time_zones)
counts['America/New_York']
len(time_zones)

 

如果想要得到前10位的时区及其计数,我们需要用到一些有关字典的处理技巧:

def top_counts(count_dict,n=10):
    value_key_pairs=[(count,tz) for tz,count in count_dict.items()]
    value_key_pairs.sort()
    return value_key_pairs[-n:]
引用
line=top_counts(counts)
print line

得到结果:

[(33, u'America/Sao_Paulo'),

(35, u'Europe/Madrid'),

(36, u'Pacific/Honolulu'),

(37, u'Asia/Tokyo'),

(74, u'Europe/London'),

(191, u'America/Denver'),

(382, u'America/Los_Angeles'),

(400, u'America/Chicago'),

(521, u''), (1251, u'America/New_York')]

当然,也可以在Python标准库中找到collections.Counter类,它能使这个任务简化:

from  collections import Counter
counts = Counter(time_zones)
print counts.most_common(10)

得到结果:

[(u'America/New_York', 1251),

(u'', 521), (u'America/Chicago', 400),

(u'America/Los_Angeles', 382),

(u'America/Denver', 191),

(u'Europe/London', 74),

(u'Asia/Tokyo', 37),

(u'Pacific/Honolulu', 36),

 (u'Europe/Madrid', 35),

(u'America/Sao_Paulo', 33)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值