def Stats(self, patns, nQuarters): '''Collect all the statistics needed''' for patn in patns.itervalues(): if patn.pno % 100000 == 0: print '\r', patn.pno, isq = patn.isq self.nPatns[isq] += 1 self.nRawCitesMade[isq] += len(patn.rawcites) self.nCitesMade[isq] += len(patn.cites) self.nCitesRecd[isq] += len(patn.citedby) # activity stuff self.totAct[isq] = [a+b for a,b in zip(self.totAct[isq],patn.Activity(patns))] self.totActApd[isq] = [a+b for a,b in zip(self.totActApd[isq],patn.ActivityApd(patns))] print for isq in range(nQuarters): nPatns = self.nPatns[isq] if nPatns < 1: # mostly for testing continue self.avgRawCitesMade[isq] = 1.0 * self.nRawCitesMade[isq] / nPatns self.avgCitesMade[isq] = 1.0 * self.nCitesMade[isq] / nPatns self.avgCitesRecd[isq] = 1.0 * self.nCitesRecd[isq] / nPatns for i in range(nQuarters): self.avgAct[isq][i] = 1.0 * self.totAct[isq][i] / nPatns self.avgActApd[isq][i] = 1.0 * self.totActApd[isq][i] / nPatns self.cumIsd = Patent.Cumulate(self.nPatns) self.cumCitesMade = Patent.Cumulate(self.nCitesMade) self.cumCitesPerPatn = [1.0 * c / n for c,n in zip(self.cumCitesMade,self.cumIsd)]
def Activity(patn, f): '''Returns the patent's cumulative hits, weighted via f(patn, citingPatn)''' act = [0] * nQuarters for citingPatnNo in patn.citedby: act[patns[citingPatnNo].isq] += f(patns[citingPatnNo], patn) return Patent.Cumulate(act)