我正在使用具有以下结构的CSV:
"2012-09-01 20:03:15","http://example.com"
数据是我浏览历史记录的清理转储。我有兴趣计算每一天的前五个独特域名。以下是我到目前为止的情况:
from urlparse import urlparse
import csv
from collections import Counter
domains = Counter()
with open("history.csv") as f:
for row in csv.reader(f):
d = row[0]
dt = d[11:19]
dt = dt.replace(":","")
dd = d[0:10]
if (dt < "090000") and (dt > "060000"):
url = row[1]
p = urlparse(url)
ph = p.hostname
print dd + "," + dt + "," + ph
domains += Counter([ph])
t = str(domains.most_common(20))
使用d,dt和dd,我将日期和时间分开。使用上面的示例行,dt = 20:03:15,dd = 2012-09-01。 “if(dt&lt;”090000“)和(dt&gt;”060000“)”只是说我只对计算在早上6点到9点之间访问过的网站感兴趣。我怎么说“只计算每天早上6点之前访问过的前五个网站”?任何给定日期都有数百行,行按时间顺序排列。
答案 0 :(得分:3)
我有兴趣计算每一天的前五个唯一域名。
import csv
from collections import defaultdict
from datetime import datetime
from urlparse import urlsplit
domains = defaultdict(lambda: defaultdict(int))
with open("history.csv", "rb") as f:
for timestr, url in csv.reader(f):
dt = datetime.strptime(timestr, "%Y-%m-%d %H:%M:%S")
if 6 <= dt.hour < 9: # between 6am and 9am
today_domains = domains[dt.date()] # per given day
domain = urlsplit(url).hostname
if len(today_domains) < 5 or domain in today_domains:
today_domains[domain] += 1 # count the first 5 unique domains
print(domains)
答案 1 :(得分:1)
import csv
from collections import defaultdict, Counter
from datetime import datetime
from urlparse import urlsplit
indiv = Counter()
domains = defaultdict(lambda: defaultdict(int))
with open("history.csv", "rb") as f:
for timestr, url in csv.reader(f):
dt = datetime.strptime(timestr, "%Y-%m-%d %H:%M:%S")
if 6 <= dt.hour < 11: # between 6am and 11am
today_domains = domains[dt.date()]
domain = urlsplit(url).hostname
if len(today_domains) < 5 and domain not in today_domains:
today_domains[domain] += 1
indiv += Counter([domain])
for domain in indiv:
print '%s,%d' % (domain, indiv[domain])