Günümüzün dijital çağında, Twitter gibi sosyal medya platformları paha biçilmez bilgi kaynakları ve kullanıcı etkileşimi için bir merkez haline gelmiştir. Her gün milyonlarca tweet paylaşıldığından, hem işletmeler hem de bireyler için Twitter etkileşiminin dinamiklerini anlamak çok önemlidir. İşte bu noktada Doğal Dil İşleme (NLP) devreye giriyor. Bu blog yazısında, Twitter etkileşimini analiz etmek ve değerli içgörüler elde etmek için NLP tekniklerinden yararlanan bir projeyi inceleyeceğiz.
Kaggle’da bulunan bir veriseti dikkatimi çekti ve incelemeye başladım. Ardından bir notebook açtım ve şimdi paylaşacağım adımlarla birlikte yeni bir projeye başlamış oldum. Bu sebeple yapmış olduğum işlemleri ve analizleri bu blog yazısında sizinle paylaşmak istedim. Çok vakit kaybetmeden kodlara geçelim.
NLP ile Twitter (X) Duygu Analizi: Projeye Giriş
Keşfetmek üzere olduğumuz proje, NLP kullanarak Twitter etkileşimini ve duygularını analiz etmeye odaklanıyor. Amaç, dil, duyarlılık ve konum gibi farklı faktörlerin Twitter’da kullanıcı katılımına nasıl katkıda bulunduğunu daha iyi anlamaktır. NLP tekniklerinden yararlanarak, mevcut çok sayıda tweetten anlamlı bilgiler çıkarabilir ve işletmelerin sosyal medya stratejilerini optimize etmelerine yardımcı olabilecek kalıpları ve eğilimleri ortaya çıkarabiliriz.
Veri Kümesini İçe Aktarma
Analizimize başlamak için Twitter verilerini içeren veri kümesini içe aktararak başlıyoruz. Bu veri kümesi bize tweet kimliği, hafta içi gün, saat, dil, retweet sayısı, beğeniler ve duyarlılık gibi bilgiler sağlar. Bu veri kümesini analiz ortamımıza yükleyerek verileri keşfetmeye ve analiz etmeye başlayabiliriz.
İlk olarak veri kümesini içe aktaralım:
df = pd.read_csv('/kaggle/input/tweets-and-user-engagement/Twitterdatainsheets.csv')
Şimdi verisetini biraz inceleyelim ve bizi neler beklediğine bakalım:
206295 satır ve 15 sütundan oluşan verisetinin sütun isimleri şu şekilde:
df.columns
Index([‘index’, ‘TweetID’, ‘ Weekday’, ‘ Hour’, ‘ Day’, ‘ Lang’, ‘ IsReshare’, ‘ Reach’, ‘ RetweetCount’, ‘ Likes’, ‘ Klout’, ‘ Sentiment’, ‘ text’, ‘ LocationID’, ‘ UserID’], dtype=’object’)
Verilerin Düzenlenmesi
Yolculuk, manzarayı inceleyerek başlar. Eksik değerleri kontrol ederek araştırmamız için temiz bir temel oluşturuyoruz. Pandas kullanarak, eksik temel değerlere sahip satırları atıyor ve veri setimizi daha temiz bir hale dönüştürüyoruz.
# Define numeric_columns based on the numeric columns in your DataFrame
numeric_columns = ['Hour', 'Day', 'IsReshare', 'Reach', 'RetweetCount', 'Likes', 'Klout', 'Sentiment', 'LocationID']
# Convert numeric columns to appropriate data types using .loc
df_cleaned.loc[:, numeric_columns] = df_cleaned[numeric_columns].apply(pd.to_numeric, errors='coerce')
# Display the data types after conversion
print("\nData Types after conversion:")
print(df_cleaned.dtypes)
# Check for missing values again
missing_values_cleaned = df_cleaned.isnull().sum()
print("\nMissing Values after cleaning:")
print(missing_values_cleaned)
Keşifsel Veri Analizi (EDA)
NLP analizine geçmeden önce, veri kümesinin özelliklerini anlamak için keşifsel veri analizi yapmak çok önemlidir. Erişim, retweet sayısı ve duyarlılık gibi değişkenlerin dağılımını inceleyerek analizimizi etkileyebilecek aykırı değerleri veya anormallikleri tespit edebiliriz. Görselleştirmeler ve istatistiksel özetler aracılığıyla veri kümesinin genel yapısı hakkında fikir edinebilir ve herhangi bir örüntü veya korelasyonu belirleyebiliriz.
İlk hedefimiz: kullanıcıların tweet’lerle nasıl etkileşim kurduğunu anlamak. Erişim, retweet sayısı ve beğeniler gibi etkileşim metriklerini araştırıyoruz. Seaborn ve matplotlib, korelasyonları, çift grafikleri ve hatta saatlik ve günlük analizleri görselleştirmek için güçlerini birleştiriyor.
import matplotlib.pyplot as plt
import seaborn as sns
# Basic statistics for numeric columns
numeric_stats = df_cleaned[numeric_columns].describe()
print("Basic Statistics for Numeric Columns:")
print(numeric_stats)
# Subsample the data (adjust n as needed)
df_subsample = df_cleaned.sample(n=5000)
# Correlation heatmap for numeric columns
plt.figure(figsize=(12, 8))
sns.heatmap(df_subsample[numeric_columns].corr(), annot=True, cmap='coolwarm', linewidths=.5)
plt.title('Correlation Heatmap for Numeric Columns (Subsample)')
plt.show()
# Pairplot for numeric columns
sns.pairplot(df_subsample[numeric_columns])
plt.suptitle('Pairplot for Numeric Columns (Subsample)', y=1.02)
plt.show()
Görselleştirmelerimiz ilgi çekici bağlantıları ortaya çıkarıyor. Belirli tweetlerin viral olma olasılığı daha mı yüksek? Etkili kullanıcılar belirli etkileşim kalıpları sergiliyor mu? Cevaplar ortaya çıkardığımız kalıplarda yatıyor.
NLP Sentiment Analysis (Duygu Analizi)
Duygu analizi, Twitter etkileşim analizinin bir diğer önemli bileşenidir. Tweetlerin duyarlılığını analiz ederek, Twitter kullanıcılarının belirli bir konu, ürün veya etkinliğe yönelik genel duyarlılığını ölçebiliriz. NLP teknikleri, tweetleri olumlu, olumsuz veya nötr olarak sınıflandırmamıza olanak tanıyarak kullanıcı duyarlılığı ve algısı hakkında değerli bilgiler sağlar.
Tweetlerin ardındaki duyguyu anlamadan hiçbir keşif tamamlanmış sayılmaz. Duygu analizi için NLTK ve VADER’in gücünden yararlanarak metni duygu puanlarına dönüştürüyoruz.
İlk önce ‘nltk’ kütüphanesini indirelim ve modelimizi kuralım:
pip install nltk
import nltk
from nltk.sentiment.vader import SentimentIntensityAnalyzer
# Download the VADER lexicon for sentiment analysis
nltk.download('vader_lexicon')
# Initialize the SentimentIntensityAnalyzer
sia = SentimentIntensityAnalyzer()
# Analyze sentiment for each tweet
df_cleaned['SentimentScore'] = df_cleaned['text'].dropna().apply(lambda x: sia.polarity_scores(x)['compound'])
# Visualize sentiment distribution
plt.figure(figsize=(10, 6))
sns.histplot(df_cleaned['SentimentScore'], bins=30, kde=True)
plt.title('Distribution of Sentiment Scores in Tweets')
plt.xlabel('Sentiment Score')
plt.ylabel('Frequency')
plt.show()
Bu kod hücresi, VADER (Valence Aware Dictionary and sEntiment Reasoner) duygu analizi aracını kullanarak tweetlerin duygu analizine odaklanmaktadır. Kodun her bir bölümünü inceleyelim:
VADER Sözlüğünü indirin:
nltk.download(‘vader_lexicon’) satırı, NLTK kütüphanesi tarafından kullanılan önceden oluşturulmuş bir duygu analizi sözlüğü olan VADER sözlüğünü indirir.
SentimentIntensityAnalyzer’ı başlatın:
NLTK’nın VADER modülünden SentimentIntensityAnalyzer başlatılır. Bu analizör, belirli bir metin için bileşik bir duyarlılık puanı sağlar.
Duygu Analizi:
Her tweet’in duyarlılığı VADER duyarlılık analizörü kullanılarak analiz edilir. Bileşik duyarlılık puanı, sia.polarity_scores(x)[‘compound’] uygulanarak her bir tweet metni için elde edilir.
Duygu Dağılımını Görselleştirin:
Tweetlerdeki NLP duyarlılık puanlarının dağılımını görselleştirmek için Seaborn (sns.histplot) kullanılarak bir histogram oluşturulur. X ekseni duyarlılık puanlarını, y ekseni ise belirli bir duyarlılık puanına sahip tweetlerin sıklığını temsil eder. Başlık, xlabel ve ylabel, grafiğin daha iyi yorumlanması için ayarlanmıştır.
Test Zamanı
Şimdi yapmış olduğumuz duygu analizini test etme zamanı. Bunun için belirli bir index vererek o indesx’teki tweet’in negatif, pozitif ve nötr olup olmadığını göreceğiz. Bunun için kodumuzu yazalım:
Belirli Bir Tweet Seçin:
specific_tweet_index değişkeni belirli bir dizin değerine ayarlanmıştır. Bu değeri analiz etmek istediğiniz tweetin indeksi olarak değiştirebilirsiniz.
Belirli Tweetin Metnini Alın: Ben 302. İndex tweet’i aldım.
Hadi birkaç test daha yapalım:
32.index tweet’imizi aldım ve şimdi analiz edelim. Bu kodda yazmış olduğum farklılık ise duygu skorunun yanında pozitif, negatif veya nötr olduğunu kelime ile ifade etmesidir.
Son deneme 😊
22588.index’e sahip tweet seçildi. Şimdi bakalım bu tweet’in duygu skoru ne imiş?
Ekstra! Konu Modelleme:
Şimdi de Gensim ile birlikte hangi kelimelerin ya da konu başlıklarının topic olduklarını bulalım.
İlk olarak kütüphanemizi indiriyoruz
Ardından modelimizi kuralım:
Bu kod hücresi, Latent Dirichlet Allocation (LDA) kullanarak tweet metinleri üzerinde Konu Modellemesi yapmaktan sorumludur.
Konuları ve Anahtar Kelimeleri Görüntüleyin:
topics = lda_model.print_topics(num_words=5): Konuları ve bunlarla ilişkili anahtar kelimeleri alır. Her konuyu en iyi 5 anahtar kelimeyle birlikte yazdırır.
Sonuç olarak: NLP projesi ve devamı için takipte kalın!
Bu bölüme kadar yazımı okuduğunuz için teşekkürler. Günden güne daha kapsamlı ve büyük projeler yapacağım. Bazılarını buradan sizlerle paylaşacak, görüşlerinizi ve önerilerinizi alacağım. Yeni yıla doğru yaklaşırken veri alanında yeni çalışmalar, kitaplar, podcastler ve yayınları inceleyecek ve hoşuma giden bölümleriz sizlerle buradan paylaşacağım. Bu sebeple Forty Two websitesini takip etmeyi lütfen unutmayın. Kaynak bölümünde projemin kaggle linkini bulabilirsiniz. Teşekkürler, sağlıklı günler dilerim!
Bir yanıt yazın