code: def _extract(self, source, extract_tweets=True, *args, **kwargs):
          
          # Check that the proper API keywords were provided.
          for cred in ['access_token', 'access_secret', 'consumer_key', 'consumer_secret']:
              if cred not in kwargs:
                  raise ValueError('API credentials missing from keyword arguments: {}'.format(cred))
  
          # Set up API access
          self._auth = OAuthHandler(kwargs['consumer_key'], kwargs['consumer_secret'])
          self._auth.set_access_token(kwargs['access_token'],kwargs['access_secret'])
          self._api = tweepy.API(self._auth)
  
          # Make row dictionaries and count tweets
          rows = []
          num_tweets = 0
          pbar1 = tqdm.tqdm(range(0,len(source)))
          pbar1.set_description('Extracting user data...')
          for u in source:
              r = self._make_user_dict(u)
              num_tweets = num_tweets + min(r['statuses_count'], 3200)
              rows.append(r)
              pbar1.update(1)
  
          if extract_tweets is True:
              # Extract tweets
              pbar2 = tqdm.tqdm(range(0,num_tweets))
              for r in rows:
                  if r['statuses_count'] > 0:
                      r['tweets'] = self._get_user_tweets(r['screen_name'])
                  else:
                      r['tweets'] = []
                  pbar2.set_description('Extracted tweets by {}'.format(r['screen_name']))
                  pbar2.update(r['statuses_count'])
  
          self._data = pd.DataFrame.from_records(rows)
docs: Extracts user data Using the twitter API. Mutates _data.
          NOTE: TwitterExtractor requires a complete set of Twitter API credentials
          to initialize: 'access_token', 'access_secret', 'consumer_key', and 'consumer_secret'.
  
          :param list source: A list of user screen name strings.
          :param args: Arbitrary arguments for extensibility.
          :param kwargs: Arbitrary keyword arguments for extensibility.
          :return: None