Проведите анализ мнений Используя исторические твиты

Этот пример показывает, как искать и получить все доступные Твиты за прошлые 7 дней и импортировать их в MATLAB®. После импортирования данных можно провести анализ мнений. Этот анализ позволяет вам определить субъективную информацию, такую как капризы, мнения или эмоциональные реакции, от текстовых данных. Этот пример ищет положительные и отрицательные капризы относительно индустрии финансовых услуг.

Чтобы запустить этот пример, вам нужны учетные данные Twitter®. Чтобы получить эти учетные данные, необходимо сначала войти в систему аккаунта в Твиттере. Затем заполните форму в, Создают приложение.

Чтобы получить доступ к примеру кода, введите edit TwitterExample.m в командной строке.

Соединитесь с Твиттером

Создайте связь Твиттера с помощью учетных данных. (Значения в этом примере не представляют действительные учетные данные Твиттера.)

consumerkey = 'abcdefghijklmnop123456789';
consumersecret = 'qrstuvwxyz123456789';
accesstoken = '123456789abcdefghijklmnop';
accesstokensecret = '123456789qrstuvwxyz';

c = twitter(consumerkey,consumersecret,accesstoken,accesstokensecret);

Проверяйте связь Твиттера. Если свойство StatusCode имеет значение OK, связь успешна.

c.StatusCode
ans = 

    OK

Получите последние твиты

Ищите последние 100 Твитов об индустрии финансовых услуг с помощью объекта связи Твиттера. Используйте критерий поиска financial services. Импортируйте данные Tweet® в рабочее пространство MATLAB.

tweetquery = 'financial services';
s = search(c,tweetquery,'count',100);
statuses = s.Body.Data.statuses;
pause(2)

statuses содержит данные о Твите как массив ячеек 100 структур. Каждая структура содержит поле для текста Твита, и остающиеся поля содержат другую информацию о Твите.

Ищите и получите следующие 100 Твитов, которые произошли начиная с предыдущего запроса.

sRefresh = search(c,tweetquery,'count',100, ...
    'since_id',s.Body.Data.search_metadata.max_id_str);
statuses = [statuses;sRefresh.Body.Data.statuses];

statuses содержит последние 100 Твитов в дополнение к предыдущим 100 Твитам.

Получите все доступные твиты

Получите все доступные Твиты об индустрии финансовых услуг с помощью цикла while. Проверяйте на доступные данные с помощью функции isfield и поля next_results структуры.

while isfield(s.Body.Data.search_metadata,'next_results')
    % Convert results to string
    nextresults = string(s.Body.Data.search_metadata.next_results); 
    % Extract maximum Tweet identifier  
    max_id = extractBetween(nextresults,"max_id=","&");             
    % Convert maximum Tweet identifier to a character vector
    cmax_id = char(max_id);         
    % Search for Tweets                                
    s = search(c,tweetquery,'count',100,'max_id',cmax_id);        
    % Retrieve Tweet text for each Tweet
    statuses = [statuses;s.Body.Data.statuses];                     
end

Получите время создания и текст каждого Твита. Получите время создания для неструктурированных данных путем доступа к нему в массиве ячеек структур. Для структурированных данных получите доступ ко времени создания путем перемещения поля в массиве структур.

if iscell(statuses)
  % Unstructured data
    numTweets = length(statuses);             % Determine total number of Tweets
    tweetTimes = cell(numTweets,1);           % Allocate space for Tweet times and Tweet text
    tweetTexts = tweetTimes; 
    for i = 1:numTweets
      tweetTimes{i} = statuses{i}.created_at; % Retrieve the time each Tweet was created
      tweetTexts{i} = statuses{i}.text;       % Retrieve the text of each Tweet
    end
else
    % Structured data
    tweetTimes = {statuses.created_at}'; 
    tweetTexts = {statuses.text}'; 
end

tweetTimes содержит время создания для каждого Твита. tweetTexts содержит текст для каждого Твита.

Создайте расписание tweets для всех Твитов при помощи текста и время создания каждого Твита.

tweets = timetable(tweetTexts,'RowTimes', ...
    datetime(tweetTimes,'Format','eee MMM dd HH:mm:ss +SSSS yyyy'));

Проведите анализ мнений на твитах

Создайте глоссарий слов, которые сопоставлены с положительным чувством.

poskeywords = {'happy','great','good', ...
    'fast','optimized','nice','interesting','amazing','top','award', ...
    'winner','wins','cool','thanks','useful'};

poskeywords является массивом ячеек из символьных векторов. Каждый вектор символов является словом, которое представляет экземпляр положительного чувства.

Ищите каждый Твит слова в положительном глоссарии чувства. Определите общее количество Твитов, которые содержат положительное чувство. Из общего количества положительных Твитов определите общее количество Ретвитов.

% Determine the total number of Tweets
numTweets = height(tweets);            

% Determine the positive Tweets
numPosTweets = 0;
numPosRTs = 0;
for i = 1:numTweets
    % Compare Tweet to positive sentiment glossary
    dJobs = contains(tweets.tweetTexts{i},poskeywords,'IgnoreCase',true); 
    if dJobs
        % Increase total count of Tweets with positive sentiment by one
        numPosTweets = numPosTweets + 1; 
        % Determine if positive Tweet is a Retweet
        RTs = strncmp('RT @',tweets.tweetTexts{i},4);
        if RTs
            % Increase total count of positive Retweets by one
            numPosRTs = numPosRTs + 1;
        end
    end
end

numPosTweets содержит общее количество Твитов с положительным чувством.

numPosRTs содержит общее количество Ретвитов с положительным чувством.

Создайте глоссарий слов, которые сопоставлены с отрицательным чувством.

negkeywords = {'sad','poor','bad','slow','weaken','mean','boring', ...
    'ordinary','bottom','loss','loser','loses','uncool', ...
    'criticism','useless'};

negkeywords является массивом ячеек из символьных векторов. Каждый вектор символов является словом, которое представляет экземпляр отрицательного чувства.

Ищите каждый Твит слова в отрицательном глоссарии чувства. Определите общее количество Твитов, которые содержат отрицательное чувство. Из общего количества отрицательных Твитов определите общее количество Ретвитов.

% Determine the negative Tweets
numNegTweets = 0;
numNegRTs = 0;
for i = 1:numTweets
    % Compare Tweet to negative sentiment glossary
    dJobs = contains(tweets.tweetTexts{i},negkeywords,'IgnoreCase',true); 
    if dJobs
        % Increase total count of Tweets with negative sentiment by one
        numNegTweets = numNegTweets + 1; 
        % Determine if negative Tweet is a Retweet
        RTs = strncmp('RT @',tweets.tweetTexts{i},4);
        if RTs
            numNegRTs = numNegRTs + 1;
        end
    end
end

numNegTweets содержит общее количество Твитов с отрицательным чувством.

numNegRTs содержит общее количество Ретвитов с отрицательным чувством.

Отобразите результаты анализа мнений

Составьте таблицу со столбцами, которые содержат:

  • Количество твитов

  • Количество Твитов с положительным чувством

  • Количество положительных Ретвитов

  • Количество Твитов с отрицательным чувством

  • Количество отрицательных Ретвитов

matlabTweetTable = table(numTweets,numPosTweets,numPosRTs,numNegTweets,numNegRTs, ...
    'VariableNames',{'Number_of_Tweets','Positive_Tweets','Positive_Retweets', ...
    'Negative_Tweets','Negative_Retweets'});

Отобразите таблицу данных о Твите.

matlabTweetTable
matlabTweetTable =

  1×5 table

    Number_of_Tweets    Positive_Tweets    Positive_Retweets    Negative_Tweets    Negative_Retweets
    ________________    _______________    _________________    _______________    _________________

    11465               688                238                  201                96               

Из 11 465 общих Твитов об индустрии финансовых услуг за прошлые 7 дней 688 Твитов имеют положительное чувство, и 201 Твит имеет отрицательное чувство. Из положительных Твитов 238 Твитов являются Ретвитами. Из отрицательных Твитов, 96 Ретвиты.

Смотрите также

Функции

Объекты

Похожие темы

Внешние веб-сайты