docs: def shannon_entropy(data, iterator):
      """
      Borrowed from http://blog.dkbza.org/2007/05/scanning-data-for-entropy-anomalies.html
      """
      if not data:
          return 0
      entropy = 0
      for x in iterator:
          p_x = float(data.count(x))/len(data)
          if p_x > 0:
              entropy += - p_x*math.log(p_x, 2)
      return entropy