几个概念:
json:是一种常用的web数据格式,其中《利用python进行数据分析》用到的一个usa.gov数据集就是这种格式。
{ "a": "Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/535.11 (KHTML, like Gecko) Chrome\/17.0.963.78 Safari\/535.11", "c": "US", "nk": 1, "tz": "America\/New_York", "gr": "MA", "g": "A6qOVH", "h": "wfLQtf", "l": "orofrog", "al": "en-US,en;q=0.8", "hh": "1.usa.gov", "r": "http:\/\/www.facebook.com\/l\/7AQEFzjSi\/1.usa.gov\/wfLQtf", "u": "http:\/\/www.ncbi.nlm.nih.gov\/pubmed\/22415991", "t": 1331923247, "hc": 1331822918, "cy": "Danvers", "ll": [ 42.576698, -70.954903 ] }
这是数据中的一行。
列表推到式:这是在一组字符串或其他对象上执行相同的指令的方式,例如:num = [a for a in open(filename)]
字典:字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(
:)分割,每个对之间用逗号(
,)分割,整个字典包括在花括号(
{})中 ,格式如下所示:d = {key1 : value1, key2 : value2 }
本部分的代码可见下:
#encoding:utf8
'''
Created on 2016年9月28日
@author: 8888
'''
import json
sourcepath = r"D:\workspace\pydata-book-master\ch02\usagov_bitly_data2012-03-16-1331923249.txt"
#print(open(sourcepath).readline())
record = [json.loads(line) for line in open(sourcepath)]
print(record[0])
#字典的话可以用键值对来搜索如下:
print(record[0]['u'])
--------
输出为
{u'a': u'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.78 Safari/535.11', u'c': u'US', u'nk': 1, u'tz': u'America/New_York', u'gr': u'MA', u'g': u'A6qOVH', u'h': u'wfLQtf', u'cy': u'Danvers', u'l': u'orofrog', u'al': u'en-US,en;q=0.8', u'hh': u'1.usa.gov', u'r': u'http://www.facebook.com/l/7AQEFzjSi/1.usa.gov/wfLQtf'
, u'u':u'http://www.ncbi.nlm.nih.gov/pubmed/22415991', u't': 1331923247, u'hc': 1331822918, u'll': [42.576698, -70.954903]}
http://www.ncbi.nlm.nih.gov/pubmed/22415991
统计一个序列中单词的个数:两种写法:
def get_count(sequence):
count = {}
for x in sequence:
if x in count:
count[x]+=1
else:
count[x] = 1
return count
---------------------
from collections import defaultdict
def get_count2(sequence):
count = defaultdict(int)
for x in count:
count [x]+=1
return count
这个是采用了标准库中的collection包的方法,defaultdict的意思是:
这里的defaultdict(function_factory)构建的是一个类似dictionary的对象,其中keys的值,自行确定赋值,但是values的类型,是function_factory的类实例,而且具有默认值。比如default(int)则创建一个类似dictionary对象,里面任何的values都是int的实例,而且就算是一个不存在的key, d[key] 也有一个默认值,这个默认值是int()的默认值0.
英文解释为:dict subclass that calls a factory function to supply missing values。
提取键值对中前10个数:
def top_count(countsequence,n=10):
value_key = [(key , value ) for value,key in countsequence.items() ]
value_key.sort()
return value_key[-n:]
上述采用标准库中的collection.Counter可以更简单:
counts = Counter(get_count2(timezone)) #排序
print counts.most_common(10)#使用most_common方法提取前多少组
---------------------
python搭建环境可参考其他博文,本人使用win10系统,eclipse开发