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

def _extract(self, source, extract_tweets=True, *args, **kwargs):
        """
        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
        """
        # 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)