(("plosViews", ()), (2009, 9), "PLOS views"), 
    (("pmcViews", ()), (2011, 6), "PMC views"), 
    (("maxCitations", ()), (2009, 3), "Citations")
]

attributeNames = map(lambda x: x[0][0], attributeList)
attributePrintNames = map(lambda x: x[2], attributeList)
calls = map(lambda x: x[0], attributeList)
stats = []

for ind, attr in zip(range(0, len(attributeList)), attributeList):
    call = attr[0]
    lowerBound = attr[1]
    attName = attr[0][0]

    valuesForMetric = filter(lambda x: x != None, map(lambda doc: applyCall(doc, call),
        SimpleDoc.getallBetween(lowerBound, None)
    ))

    minV, maxV, meanV, std = min(valuesForMetric), max(valuesForMetric), np.mean(valuesForMetric), np.std(valuesForMetric)
    stats.append((attName, call, meanV, std, len(valuesForMetric)))
    print attName + "\t" + "\t".join(map(lambda x: str(x), [minV, maxV, meanV, std]))


statValues = []
for stat in stats:
    name = stat[0]
    call = stat[1]
    mean = stat[2]
    std = stat[3]
    numValues = stat[4]
def getAttributeValueMatrix(docs, callList):
    return map(lambda doc: map(lambda call: applyCall(doc, call), callList), docs)