/
simulator.py
91 lines (83 loc) · 4.1 KB
/
simulator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/usr/bin/python
import os
from archive import Archive
from article import Article, Average, MainPage, TotalPage
from analyser import Analyser
from plotter import plot_cycles
class Simulator:
'''Loading/extracting needed page-view data'''
def __init__(self,start,end,pattern,overall,boolplot):
self.pattern = pattern
self.articles = []
self.average = Average(self.pattern)
self.mp = MainPage(pattern.lang,pattern.mp_title)
self.tp = TotalPage(pattern.lang)
self.pattern.getArchive(start,end)
self.boolplot = boolplot
self.overall = overall
def load_data(self):
self.mp.get_cycles()
self.mp.get_yearly_cycles()
self.mp.get_monthly_cycles()
self.tp.get_cycles()
self.tp.get_yearly_cycles()
self.tp.get_monthly_cycles()
for art in self.pattern.arch.articles:
try:
art = Article(art,self.pattern.arch.articleTitleToURL[art],self.pattern.arch.articles[art],self.pattern)
try:
art.get_views()
if art.views != []:
self.average.add_art(art)
if not len(art.views) > 24*len(self.pattern.relativeDays)-1:
self.articles.append(art)
else:
print "Look at page views for ", art.title
except IndexError:
print art.link_title
except KeyError:
pass
self.average.calc_av_views()
print "Number of articles for "+self.pattern.title+": ", self.average.num_added
def plot_data(self,yearly=False,monthly=False):
plot_cycles(self.tp,"TP_"+self.pattern.lang+"_",yearly,monthly)
plot_cycles(self.mp,"MP_"+self.pattern.lang+"_",yearly,monthly)
def run(self,c_values=[],cycles=[]):
if self.overall:
extra = "_start_"+str(self.pattern.start)+"_overall"
else:
extra = "_start_"+str(self.pattern.start)+"_single"
if c_values == [] and cycles == []:
self.run_analysis(self.mp.hourly,"MP_"+self.pattern.lang+"_opt_c"+extra)
self.run_analysis(self.tp.hourly,"TP_"+self.pattern.lang+"_opt_c"+extra)
self.run_analysis(self.mp.hourly_norm,"MP_norm_"+self.pattern.lang+"_opt_c"+extra)
self.run_analysis(self.tp.hourly_norm,"TP_norm_"+self.pattern.lang+"_opt_c"+extra)
elif c_values == []:
for cycle in cycles:
if type(cycle) == int:
self.run_analysis(self.mp.yearly_cycles[cycle]["hourly"],"MP_"+self.pattern.lang+"_"+str(cycle)+"_opt_c"+extra)
self.run_analysis(self.tp.yearly_cycles[cycle]["hourly"],"TP_"+self.pattern.lang+"_"+str(cycle)+"_opt_c"+extra)
elif type(cycle) == str:
self.run_analysis(self.mp.monthly_cycles[cycle]["hourly"],"MP_"+self.pattern.lang+"_"+cycle+"_opt_c"+extra)
self.run_analysis(self.tp.monthly_cycles[cycle]["hourly"],"TP_"+self.pattern.lang+"_"+cycle+"_opt_c"+extra)
elif cycles == []:
for cval in c_values:
self.run_analysis(self.mp.hourly,"MP_"+self.pattern.lang+"_c_"+str(cval).replace(".","-")+extra,cval)
self.run_analysis(self.tp.hourly,"TP_"+self.pattern.lang+"_c_"+str(cval).replace(".","-")+extra,cval)
self.run_analysis(self.mp.hourly_norm,"MP_norm_"+self.pattern.lang+"_c_"+str(cval).replace(".","-")+extra,cval)
self.run_analysis(self.tp.hourly_norm,"TP_norm_"+self.pattern.lang+"_c_"+str(cval).replace(".","-")+extra,cval)
else:
for cval in c_values:
for cycle in cycles:
if type(cycle) == int:
self.run_analysis(self.mp.yearly_cycles[cycle]["hourly"],"MP_"+self.pattern.lang+"_"+str(cycle)+"_c_"+str(cval).replace(".","-")+extra,cval)
self.run_analysis(self.tp.yearly_cycles[cycle]["hourly"],"TP_"+self.pattern.lang+"_"+str(cycle)+"_c_"+str(cval).replace(".","-")+extra,cval)
elif type(cycle) == str:
self.run_analysis(self.mp.monthly_cycles[cycle]["hourly"],"MP_"+self.pattern.lang+"_"+cycle+"_c_"+str(cval).replace(".","-")+extra,cval)
self.run_analysis(self.tp.monthly_cycles[cycle]["hourly"],"TP_"+self.pattern.lang+"_"+cycle+"_c_"+str(cval).replace(".","-")+extra,cval)
def run_analysis(self,cycle,plotdir,c=None):
an = Analyser(self.articles,self.average,self.average.views,self.pattern,cycle,plotdir,c)
if not os.path.exists(os.path.dirname(os.path.abspath(__file__))+"/plots/"+plotdir):
os.makedirs(os.path.dirname(os.path.abspath(__file__))+"/plots/"+plotdir)
an.run(self.overall,self.boolplot)
print "analysis performed:", plotdir