Duygu Analizi(Sentiment Analysis) Nedir ? Python ile uygulamalı Duygu Analizi ve Fikir Madenciliğine Giriş(Sentiment Analysis & Opinion Mining)
- Duygu Analizi ve Kullanım Alanları’na Giriş(Sentiment Analysis)
Günümüzde gittikçe artan sosyal medya kullanımı ve veri madenciliğinin temel ilkelerinden birisi olan “yenilenebilir ve kullanabilir veriden anlamlı ifadeler çıkarma” düşüncesi son günlerde önemli araştırma konularından birisi olan ‘Duygu Analizi’(Sentiment Analysis)’a olan popülerliği arttırmış ve beraberinde kullanım alanlarını genişletmiştir.
Duygu Analizi veya diğer bir adı ile ‘Fikir Madenciliği’(Opinion Mining) tam anlamıyla birlikte; bir yazarın veya bir yazının belirli bir konuya yönelik tutumunun olumlu(positive),olumsuz(negative),tarafsız(neutral) olarak değerlendirilmesi için bir metin parçasıyla belirtilen görüşleri/ifadeleri çeşitli algoritmalar aracılığı ile hesaplayıp tanımlama ve sınıflandırma süreçlerine verilen genel bir tanımdır.
Herhangi bir metne bakarak, olumlu veya olumsuz olarak tek başına değerlendirmek yeterince bir anlam ifade edemedği dijital bir çağ yaşıyoruz aslına bakarsanız…Özellikle bir konuyla alakalı tweet atarken kullandığımız içerikten ziyade, klavyelerimizde bulunan emojiler ve kullandığımız #hastag’ler ifade biçimin tamamen değişmesine yol açabilmektedir.
Biraz eskiye dönmek gerekirse İnternet kavramının henüz trend olmadığı bir dönemde medya takibi yapabilmek oldukça kolaydı…Sayısal olarak basılı veya görsel medyanın tümünü takip edebilmek, bir kişi ya da kurumla alakalı çıkan tüm haberleri toparlanabilmekte ve incelenebilmekteydi…Bu durum şimdilerde gelişen teknoloji ve sosyal medyanın artan gücü ile aynı kalmamakta; İnternet medyası dışında, oluşturulan bloglar,sözlükler,Twitter üzerinden paylaşılan tweetler, Facebook ve Instagram gibi oldukça popüler olan kanallarda her saniye paylaşılan post’lar milyonlarca belki de milyarlarca yeni kaynaklar üretmektedir.
İletişim ve beraberinde etkileşimin artması ile birlikte; en hızlı haberlerin ve gelişmelerin sosyal medya aracılığı ile yapıldığının hepimiz farkındayız…
Bu noktada Duygu Analizi, kişilerin ve olayların üretilen ürünlerin ve sunulan hizmetlerin hakkında duygu ve düşünce tespitini yapmayı mümkün kılabilmektedir.(en azından bir ön görüsel bir tahmin yaratabilmekte..)
2)Duygu Analizi Kullanım Alanları
Duygu Analizi veya Fikir Madenciliği kullanım alanları; pazarlama ve müşteri hizmetleri ekiplerinin ,müşterilerinin duygularını/fikirlerini belirlemelerine yardımcı olmak amacıyla sosyal medya platformlarını oldukça sık kullanmaktadır. İş ilanlarına bir göz atmak istediğinizde, ‘Sosyal Medya Uzmanı’ veya ‘Sosyal Medya İçerik Uzmanı’ başlıklı ilanları görebilmek oldukça mümkün…
Finans,tıp,borsacılık,medya,politika gibi bir çok alanda kullanılmaktadır. Ürün incelemelerinde, tüketicilerin bir ürün ile alakalı memnuniyet ölçümü yapılabilmesi adına yaygın olarak kullanılan bir tekniktir. Aynı şekilde, bir şirket, yeni çıkaracağı bir ürünün reklam kampanyasının müşterilerinin sosyal medyadaki verdiği yanıtın etkisini ölçmek için oldukça popüler olan ve yaygın olarak kullanılan bir yol haritasına sahiptir. Politikacılar seçim zamanlarında kampanyalarına halkın nasıl bir tepki vereceğini de ilgili ölçütleri kullanarak geri bildirim alabilmektedir.
Twitter API & Python programlama dilini kullanarak Bitcoin Analizi(Demo)
Bu bölümde Twitter’ın API’sini kullanarak python programlama dili üzerinde küçük bir demo analiz yapamaya çalışacağız…
Kullandığım Python sürümü: Python 2.7.15 — Anaconda
Python üzerinde kullanacağımız kütüphaneler:
import reimport tweepyfrom tweepy import OAuthHandlerfrom textblob import TextBlob
TextBlob Nedir ?
TextBlob, metin verilerini işlemek için kullanılan bir Python kütüphanesidir.Duygu analizi,sınıflandırma ve çeviri gibi doğal dil işleme’de(NLP-Natural Language Processing) görevlerine dağıtmak için kullanılan basit bir API sağlar.
Twitter’dan API almadıysanız şu linke basarak ve adımları takip ederek Twitter’dan API erişimine olanak sağlayabilirsiniz, fakat Twitter eskisi gibi kolay bir şekilde erişim izni vermemekte, kullanmak istediğiniz API araçlarını ve erişim izniyle ilgili uzun uzadıya giden bir açıklama yapabilmeniz beklenmekte…
Aşağıda Duygu Analizi ile alakalı demo bir kod parçası paylaşmaya çalıştım…Rastgele seçilen bitcoin ile alakalı 300 tweeti analiz edip pozitif ,negatif ya da nötr durumları ortaya koymakta…Output’a baktığımızda da 5 pozitif ve 5 negatif olmak üzere toplamda 10 tweet’in sonucunu görebiliriz…
#!/usr/bin/env python
# -*- coding: utf-8 -*-import re
import tweepy
from tweepy import OAuthHandler
from textblob import TextBlobclass TwitterClient(object):
‘’’
Generic Twitter Class for sentiment analysis.
‘’’
def __init__(self):
‘’’
Twitter ile ilgili bölüm burada yer alıyor…
‘’’
#developer.twitter.com’dan başvuru yaptık ve gerekli tokenları aldık
consumer_key = ‘XXXXXXXXXXXXXXXXXXXXX’
consumer_secret = ‘XXXXXXXXXXXXXXXXXX’
access_token = ‘XXXXXXXXXXXXXXXXXXXXXXX’
access_token_secret = ‘XXXXXXXXXXXXXXXXXXXXXXXX’#eğer bunlar doğruysa authtehntification sağlayacak
try:
# create OAuthHandler object
self.auth = OAuthHandler(consumer_key, consumer_secret)
# set access token and secret
self.auth.set_access_token(access_token, access_token_secret)
# create tweepy API object to fetch tweets
self.api = tweepy.API(self.auth)
except:
print(“Error: Authentication Failed”)def clean_tweet(self, tweet):
return ‘ ‘.join(re.sub(“(@[A-Za-z0–9]+)|([⁰-9A-Za-z \t])|(\w+:\/\/\S+)”, “ “, tweet).split())def get_tweet_sentiment(self, tweet):
‘’’
TextBlob kütüphaneleri vs…
‘’’
analysis = TextBlob(self.clean_tweet(tweet))
if analysis.sentiment.polarity > 0:
return ‘positive’
elif analysis.sentiment.polarity == 0:
return ‘neutral’
else:
return ‘negative’def get_tweets(self, query, count = 10):
tweets = []try:
fetched_tweets = self.api.search(q = query, count = count)
for tweet in fetched_tweets:
parsed_tweet = {}
parsed_tweet[‘text’] = tweet.text
parsed_tweet[‘sentiment’] = self.get_tweet_sentiment(tweet.text)
if tweet.retweet_count > 0:
if parsed_tweet not in tweets:
tweets.append(parsed_tweet)
else:
tweets.append(parsed_tweet)
return tweetsexcept tweepy.TweepError as e:
print(“Error : “ + str(e))def main():
# TwitterClient Class'ı yaratma
api = TwitterClient()
tweets = api.get_tweets(query = ‘Bitcoin’, count = 300)# pozitif tweetleri toplama
ptweets = [tweet for tweet in tweets if tweet[‘sentiment’] == ‘positive’]
# pozitif tweetlerin yüzdesi
print(“Positive tweets percentage: {} %”.format(100*len(ptweets)/len(tweets)))
# picking negative tweets from tweets
ntweets = [tweet for tweet in tweets if tweet[‘sentiment’] == ‘negative’]
# Negatif tweetlerin yüzdesi
print(“Negative tweets percentage: {} %”.format(100*len(ntweets)/len(tweets)))
# Nötr tweetlerin yüzdesi
print(“Neutral tweets percentage: {} % “.format(100*(len(tweets) — len(ntweets) — len(ptweets))/len(tweets)))# İlk 5 pozitif tweet
print(“\n\nPositive tweets:”)
for tweet in ptweets[:10]:
print(tweet[‘text’])# İlk 5 negatif tweet
print(“\n\nNegative tweets:”)
for tweet in ntweets[:10]:
print(tweet[‘text’])if __name__ == “__main__”:
main()
Yazdığımız demo kod bloğunun çalışması sonucunda beklenen sonuç şu şekilde olmalıdır :