В этом примере показано, как искать и получить все доступные Твиты за прошлые 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 Ретвиты.