code: def pc_correlation(self, covariates, num_pc=5):
          
          from scipy.stats import spearmanr
          if (covariates.shape[0] == self.u.shape[0] and 
              len(set(covariates.index) & set(self.u.index)) == self.u.shape[0]):
              mat = self.u
          elif (covariates.shape[0] == self.v.shape[0] and 
              len(set(covariates.index) & set(self.v.index)) == self.v.shape[0]):
              mat = self.v
          else:
              import sys
              sys.stderr.write('Covariates differ in size from input data.\n')
              sys.exit(1)
          corr = pd.Panel(items=['rho', 'pvalue'],
                          major_axis=covariates.columns,
                          minor_axis=mat.columns[0:num_pc])
          for i in corr.major_axis:
              for j in corr.minor_axis:
                  rho, p = spearmanr(covariates[i], mat[j])
                  corr.ix['rho', i, j] = rho
                  corr.ix['pvalue', i, j] = p
          return corr
docs: Calculate the correlation between the first num_pc prinicipal components
          and known covariates. The size and index of covariates determines
          whether u or v is used.
  
          Parameters
          ----------
          covariates : pandas.DataFrame
              Dataframe of covariates whose index corresponds to the index of
              either u or v. 
          
          num_pc : int
              Number of principal components to correlate with.
  
          Returns
          -------
          corr : pandas.Panel
              Panel with correlation values and p-values.