Осы мақалада мен Twitter-дегі үш мәліметті үш кілт сөз + хэштегтермен бөліп-бөліп шығару үшін жасаған қадамдарым бойынша нұсқау беремін.
Түйінді сөздер: Twitter, файлдар, эмодзи, препроцессор
В этой статье я дам вам инструкции о шагах, которые я предпринял для разделения трех частей информации в Twitter с тремя ключевыми словами + хэштегами.
Ключевые слова: Twitter, файлы, эмодзи, препроцессор
Twitter — бұл мәліметтердің алтын кеніші. Twitter басқа әлеуметтік платформалардан айырмашылығы, барлық қолданушылардың твиттері жалпыға қол жетімді. Егер сіз үлкен көлемді деректерді аналитиканы іске қосу үшін алуға тырыссаңыз, бұл үлкен мүмкіндік. Twitter деректері ерекше. Твиттердегі соңғы жиырма минут ішінде белгілі бір тақырып бойынша әр твитті немесе белгілі бір пайдаланушының қайталанбайтын твиттерін тарту сияқты күрделі сұраулар жасауға мүмкіндік береді.
1.Кітапханаларды импорттау
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import json
import pandas as pd
import csv
import re #regular expressionfrom textblob import TextBlob
import string
import preprocessor as p
2. Twitter есептік деректері
#Twitter credentials for the app
consumer_key = 'xxxxx'
consumer_secret = 'xxxx'
access_key= 'xxxx'
access_secret = 'xxxx'
3. Есептік деректер
Тіркелгі деректерін Twipty-тің 'auth' деп аталатын OAuthHandler данасына жіберіңіз, содан кейін жоғарыда жасалған access_key және, access_secret арқылы set_access_token әдісін қолданыңыз.
#pass twitter credentials to tweepyauth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)
4. CSV файлдары үшін файл жолдарын жасаңыз
#declare file paths as follows for three filestelemedicine_tweets = «data/telemedicine_data_extraction/telemedicine_data.csv»epilepsy_tweets = «data/telemedicine_data_extraction/epilepsy_data.csv»heart_stroke_tweets = «data/telemedicine_data_extraction/heart_stroke_tweets_data.csv»
5. Нені алу керек?Бағандар.
#columns of the csv fileCOLS = ['id', 'created_at', 'source', 'original_text','clean_text', 'sentiment','polarity','subjectivity', 'lang',
'favorite_count', 'retweet_count', 'original_author', 'possibly_sensitive', 'hashtags',
'user_mentions', 'place', 'place_coord_boundaries']
6. Эмоциялар мен эмодзилерді басқарыңыз. Эмодзи тану.
Смайлики: Көңіл-күйімізді талдауға кедергі келтіретін сөйлемнің ортасында ескі мектеп смайликтарының қажеті жоқ болғандықтан (Happy (бақытты) & Sad (қайғылы)) бірнеше эмотикондар жариялайық.
#HappyEmoticons
emoticons_happy = set([
':-)', ':)', ';)', ':o)', ':]', ':3', ':c)', ':>', '=]', '8)', '=)', ':}',
':^)', ':-D', ':D', '8-D', '8D', 'x-D', 'xD', 'X-D', 'XD', '=-D', '=D',
'=-3', '=3', ':-))', ":'-)", ":')", ':*', ':^*', '>:P', ':-P', ':P', 'X-P',
'x-p', 'xp', 'XP', ':-p', ':p', '=p', ':-b', ':b', '>:)', '>;)', '>:-)',
'<3'
])
# Sad Emoticons
emoticons_sad = set([
':L', ':-/', '>:/', ':S', '>: [', ':@', ':-(', ': [', ':-||', '=L', ':<',
':- [', ':-<', '=\\', '=/', '>:(', ':(', '>.<', ":'-(", ":'(", ':\\', ':-c',
':c', ':{', '>:\\', ';('
])
6.2 Эмодзиді тану
Бұл қажет болғандықтан, қазіргі уақытта адамдар твиттерде смайликтерсіз жарияламайды, өйткені іс жүзінде бұл басқа тілге айналды, әсіресе жасөспірімдер арасында, сондықтан сіз бұл үшін жоспар құрып алуыңыз керек.
#Emoji patterns
emoji_pattern = re.compile(" ["
u«\U0001F600-\U0001F64F» # emoticons
u«\U0001F300-\U0001F5FF» # symbols & pictographs
u«\U0001F680-\U0001F6FF» # transport & map symbols
u«\U0001F1E0-\U0001F1FF» # flags (iOS)
u«\U00002702-\U000027B0"
u«\U000024C2-\U0001F251"
"]+", flags=re.UNICODE)
Содан кейін біз алдымен бақытты да, қайғылы эмотикондық массив тізімдерін біріктіреміз:
#combine sad and happy emoticonsemoticons = emoticons_happy.union(emoticons_sad)
7. Тазалау әдісі (Препроцессор)
Мұнда өңдеу екі әдіспен жүзеге асырылады:
1-әдіс: твитті алдын-ала процессорды пайдалану. Препроцессор дегеніміз — Python-да жазылған твит деректерін алдын-ала өңдейтін кітапхана. Осы твиттер негізінде машиналық оқыту жүйелерін құру кезінде алдын-ала өңдеу қажет. Бұл кітапхана твиттерді тазалауды, талдауды немесе таңбалауды жеңілдетеді.
2-әдіс: Мен қосарланған тексеру функциясын және твитті қайта өңдеу функциясын қолмен анықтадым және біздің деректер 100 % тазартылғанына сенімді болу әрқашан жақсы.
7.1 1-әдіс
import preprocessor as p
PS: Мен бұны 1-қадамда импорттағанмын (Кітапханаларды импорттау бөлімі)
Мысалы:
clean_text = p.clean(twitter_text)
7.2 2-әдіс
Clean_tweets (твит) деп аталатын әдісті жариялаңыз және бұл әдіс твиттер-алдын-ала процессордан жойылған твиттердегі кейбір мәліметтерді және қос тексерістен тұратын смайликтер мен эмодзилерді тазартады, өйткені мобильді эмотикондардың кейбір ескі нұсқалары твиттер алдындағы процессордың таза әдісінде қолданылмайды (1-әдіс).
def clean_tweets(tweet):
stop_words = set(stopwords.words('english'))
word_tokens = word_tokenize(tweet)#after tweepy preprocessing the colon symbol left remain after #removing mentions
tweet = re.sub(r':', '', tweet)
tweet = re.sub(r'…', '', tweet)
#replace consecutive non-ASCII characters with a space
tweet = re.sub(r' [^\x00-\x7F]+',' ', tweet)#remove emojis from tweet
tweet = emoji_pattern.sub(r'', tweet)#filter using NLTK library append it to a string
filtered_tweet = [w for w in word_tokens if not w in stop_words]
filtered_tweet = []#looping through conditions
for w in word_tokens:
#check tokens against stop words, emoticons and punctuations
if w not in stop_words and w not in emoticons and w not in string.punctuation:
filtered_tweet.append(w)
return ' '.join(filtered_tweet)
#print(word_tokens)
#print(filtered_sentence)return tweet
8. Твиттерді шығарыңыз
Twitter-дің API-не қосылу үшін біз Twitter API-ге кіру үшін өте жақсы қолдау көрсетілетін Tweepy деп аталатын Python кітапханасын қолданамыз. Ол Python 2.6, 2.7, 3.3, 3.4, 3.5 және 3.6 қолдайды. Твиттердің басқа API-лары де бар, бірақ мен Tweepy-ді ұсынамын, өйткені ол ешқашан қиындық тудырмады.
Мен төменде толық кодты орналастырып, маңызды бөліктерді бөліп, сол бөлік не үшін екенін сипаттаймын:
8.1 Әдістің басы
def write_tweets(keyword, file):
#If the file exists, then read the existing data from the CSV file.
if os.path.exists(file):
df = pd.read_csv(file, header=0)
else:
df = pd.DataFrame(columns=COLS)
#page attribute in tweepy.cursor and iteration
for page in tweepy.Cursor(api.search, q=keyword,
count=200, include_rts=False,
Бұл әдіспен мен екі параметр жасадым; біреуі файл атауына арналған, сонымен қатар үш түрлі файл бар, және де файлға толтырылатын үш кілт сөз бар, бұл екінші параметрді түсіндіреді.
8.2 JSON
Twitter API-ден алған нәтижеңіз JSON форматында болады және ақпараттың жеткілікті мөлшері бар.
for status in page:
new_entry = []
status = status._jsonif status ['lang']!= 'en':
continue
JSON талданған барлық мәліметтерді әр итерацияға сақтау үшін біз жаңа жол = [] жол атауын жасаймыз. Біз тек деректерді шығаруды жалғастырамыз, егер бұл тіл ағылшын тілі болса, маған осы кезеңде твиттер тілін тілге аударуда қиындық туғызбайды.
8.3 RT және FAV ауыстырыңыз
* кодты іске қосқан кезде, төменде берілген код соңғы жүктеуден кейін өзгертілген санын ауыстырады.
if status [‘created_at’] in df [‘created_at’].values:
i = df.loc [df [‘created_at’] == status [‘created_at’]].index [0]
if status [‘favorite_count’]!= df.at [i, ‘favorite_count’] or \
status [‘retweet_count’]!= df.at [i, ‘retweet_count’]:
df.at [i, ‘favorite_count’] = status [‘favorite_count’]
df.at [i, ‘retweet_count’] = status [‘retweet_count’]
continue
8.4 Алдын ала өңдеу уақыты
Енді твиттерді өңдеудің № 1 әдісін қолданатын кез келді.
clean_text = p.clean(status ['text'])
Қосымша өңдеу үшін clean_tweet-2 әдісін шақырыңыз.
filtered_tweet=clean_tweets(clean_text)
8.5 Сезім
Сезім сипаты Sentiment (полярлық, субъективтілік) пішінінің аталған жиынын қайтарады. Полярлық есеп — бұл [-1.0, 1.0] ауқымындағы өзгермелі. Ол субъективтілік — бұл [0.0, 1.0] ауқымындағы құбылыс, мұнда 0.0 өте объективті және 1.0 өте субъективті.
filtered_tweet түрлі айнымалыдағы сезім(sentiment), полярлық (polarity) және субъективтілікті(subjectivity) бөлек сақтадым.
blob = TextBlob(filtered_tweet)
Sentiment = blob.sentiment
polarity = Sentiment.polarity
subjectivity = Sentiment.subjectivity
8.6 All қосымшаны қосыңыз
JSON талданған деректерін біз жасаған жол массивіне қосыңыз:
new_entry += [status ['id'], status ['created_at'],
status ['source'], status ['text'],filtered_tweet, Sentiment,polarity,subjectivity, status ['lang'],
status ['favorite_count'], status ['retweet_count']]
Бұл қосымшалар — біз Tweepy-ті пайдаланып twitter-ден алынған деректер. Бірізділікті сақтау үшін біз автордың түпнұсқалық атын (твиттің твиттер профилі) жинаймыз.
new_entry.append(status ['user'] ['screen_name'])
8.7 NSFW мазмұны бар твиттер
Possible_sensitive твиттер мәліметтерінің бағаны Twitter-де NSFW мазмұнына арналған.
try:
is_sensitive = status ['possibly_sensitive']
except KeyError:
is_sensitive = None
new_entry.append(is_sensitive)
8.8 Хэштегтер және твиттің басқа пайдаланушылары
hashtags = ", ".join([hashtag_item ['text'] for hashtag_item in status ['entities'] ['hashtags']])new_entry.append(hashtags) #append the hashtagsmentions = ", ".join([mention ['screen_name'] for mention in status ['entities'] ['user_mentions']])new_entry.append(mentions) #append the user mentions
8.9 Твиттердің орналасқан жерін анықтаңыз
Мен твиттің орналасқан жерін бақылауға тырысамын, бірақ бұл оңай емес және мүмкін емес, өйткені қолданушылардың көпшілігі Twitter-ге әрқашан өз орындарына кіруге мүмкіндік бермейді. Бірақ мен бәрібір осылай жүрдім:
try:
coordinates = [coord for loc in status ['place'] ['bounding_box'] ['coordinates'] for coord in loc]
except TypeError:
coordinates = None
new_entry.append(coordinates)
«Твиттер-орналасуды» алу кезінде бізде кездесетін қиындыққа байланысты, мен твиттің орналасқан жерінің орнына пайдаланушының профилін біле алдым, өйткені ол негізінен пайдаланушы орналасқан аймақ пен ел туралы түсінік береді.
try:
location = status ['user'] ['location']
except TypeError:
location = ''
new_entry.append(location)
8.10 Деректер жинауды аяқтаңыз
Бітуге сәл қалды. Бізде қазір барлық қажетті мәліметтер бар, оны дерек қорына жақсылап орап алайық.
single_tweet_df = pd.DataFrame([new_entry], columns=COLS)
df_final = df.append(single_tweet_df, ignore_index=True)
9. CSV файлына жазыңыз
csvFile = open(file, 'a',encoding='utf-8')df.to_csv(csvFile, mode='a', columns=COLS, index=False, encoding=«utf-8")
10. Кілт сөздерді айтыңыз
telemedicine_keywords = '#telemedicine OR #telehealth OR #digitalhealth OR #ehealth OR #digitalpatient OR #digitaltransformation'Epilepsy_keywords = '#Epilepsy OR #epilepsyawareness OR #epilepsyaction OR #epilepsyalerts OR #epilepsybed OR #epilepsycongres OR #epilepsysurgery OR #epilepsysurgery OR #Epilepsytreatment OR #seizures OR #seizurefree'HeartDisease_keywords = '#HeartDisease OR #stroke OR #Stroking OR #strokepatient OR #StrokeSurvivor OR #hearthealth OR #Stroke OR #HeartFailure'
11. Біздің әдістерді қосу.
write_tweets(telemedicine_keywords, telemedicine_tweets)
write_tweets(Epilepsy_keywords, epilepsy_tweets)
write_tweets(HeartDisease_keywords, heart_stroke_tweets)
12. Біз жасаған CSV файлдарымен танысыңыз.