پیش بینی انتخابات ریاست جمهوری ایالات متحده آمریکا با پایتون

در این مقاله با نحوه پیش بینی انتخابات ریاست جمهوری ایالات متحده آمریکا آشنا میشیم. در این پست آموزشی، هیچ مدل یادگیری ماشینی آموزش داده نمیشه. تحلیل احساسات مردم در مورد کاندیدها و نتیجه گیری بر اساس بیشترین تعداد از توئیت های مثبت و منفی برای هر کدام از کاندیدها، اهداف اصلی این آموزش هست.

در این تسک پیش بینی انتخابات ایالات متحده از این دیتاست استفاده شده. این دیتاست از توئیتر جمع آوری شده و شامل توئیت های مربوط به دونالد ترامپ و جو بایدن در دوره انتخابات هست.

پیش بینی انتخابات ایالات متحده آمریکا با پایتون

حالا بدون صرف وقت مستقیم وارد مرحله شروع پیاده سازی تسک پیش بینی انتخابات با پایتون می شیم. اول باید کتابخانه های لازم و دیتاست موردنظر رو ایمپورت کنیم:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from textblob import TextBlob
from wordcloud import WordCloud
import plotly.graph_objects as go
import plotly.express as px

trump_reviews = pd.read_csv("Trumpall2.csv")
biden_reviews = pd.read_csv("Bidenall2.csv")

خب حالا نوبت اینه که یه نگاهی داشته باشیم به ۵ ردیف اول هر کدوم از دیتاست ها:

print(trump_reviews.head())
print(biden_reviews.head())



خروجی:

تحلیل احساسات

خب الآن، وارد مرحله تحلیل احساسات می شیم. این کار با استفاده از پکیج Textblob مربوط به پایتون انجام میشه. این پکیج برای طبقه بندی متن استفاده میشه که در کل دو دسته مثبت  و منفی برای این تحلیل احساسات درنظر گرفته شده.

textblob1 = TextBlob(trump_reviews["text"][10])
print("Trump :",textblob1.sentiment)
textblob2 = TextBlob(biden_reviews["text"][500])
print("Biden :",textblob2.sentiment)

خروجی:

Trump : Sentiment(polarity=0.15, subjectivity=0.3125)
Biden : Sentiment(polarity=0.6, subjectivity=0.9)


تابع  sentiment مربوط به textblob دو ویژگی رو برمی گردونه: polarity و subjectivity

مقدار polarity در بازه  [1,1-] قرار داره که ۱ به معنای مثبت بودن و -۱ به معنای منفی بودن هست. در خروجی بالا مقدار polarity برای ترامپ ۰.۱۵  و برای بایدن ۰.۶ هست. که نشان می دهد توئیت موردنظر ( با ایندکس مشخص) دارای محتوای مثبت هست یا منفی.

مقدار subjectivity در بازه [۰,۱] قرار دارد که نشان می دهد این توئیت بیشتر یک نظر مطابق با افکار عمومی است یا واقعیت داره.

کد زیر مقدار polarity ( میزان مثبت یا منفی بودن) مربوط به برخی از کاربران رو نشان میده که حاوی اطلاعات واقعی هست:

def find_pol(review):
    return TextBlob(review).sentiment.polarity
trump_reviews["Sentiment Polarity"] = trump_reviews["text"].apply(find_pol)
print(trump_reviews.tail())

biden_reviews["Sentiment Polarity"] = biden_reviews["text"].apply(find_pol)
print(biden_reviews.tail())

خروجی:

Sentiment Polarity در مورد هر دو کاندید:

در این بخش، یک ویژگی جدید با نام “Expression Label” به هر کدوم از دیتاست ها اضافه میشه:

trump_reviews["Expression Label"] = np.where(trump_reviews["Sentiment Polarity"]>0, "positive", "negative")
trump_reviews["Expression Label"][trump_reviews["Sentiment Polarity"]==0]="Neutral"
print(trump_reviews.tail())

biden_reviews["Expression Label"] = np.where(biden_reviews["Sentiment Polarity"]>0, "positive", "negative")
biden_reviews["Expression Label"][trump_reviews["Sentiment Polarity"]==0]="Neutral"
print(biden_reviews.tail())

به این صورت که با بررسی Sentiment Polarity مربوط به هر کدوم از ردیف ها، مقدار positive، negative و Neutral اختصاص داده میشه.

اگر مقدار Polarity ردیف موردنظر بزرگتر از ۰ باشه: positive

اگر مقدار Polarity ردیف موردنظر کوچکتر از ۰ باشه: negative

و اگر مقدار Polarity برابر صفر باشه: Neutral

حالا ردیف هایی که مقدار Polarity آنها برابر صفر هست (“Expression Label” آنها دارای مقدار Neutral هست)، از هر دو دیتاست حذف می شن تا داده ها به طور مساوی متعادل شوند. در این بخش، برخی از عملیات پاکسازی داده ها هم با هدف پیشبینی راحت تر انتخابات ایالات متحده انجام میشن:

reviews1 = trump_reviews[trump_reviews['Sentiment Polarity'] == 0.0000]
print(reviews1.shape)

cond1=trump_reviews['Sentiment Polarity'].isin(reviews1['Sentiment Polarity'])
trump_reviews.drop(trump_reviews[cond1].index, inplace = True)
print(trump_reviews.shape)

reviews2 = biden_reviews[biden_reviews['Sentiment Polarity'] == 0.0000]
print(reviews2.shape)

cond2=biden_reviews['Sentiment Polarity'].isin(reviews1['Sentiment Polarity'])
biden_reviews.drop(biden_reviews[cond2].index, inplace = True)
print(biden_reviews.shape)

قبل از اینکه ادامه کار انجام بشه، نیاز به این داریم که هر دو دیتاست رو متعادل کنیم:

# Donald Trump
np.random.seed(10)
remove_n =324
drop_indices = np.random.choice(trump_reviews.index, remove_n, replace=False)
df_subset_trump = trump_reviews.drop(drop_indices)
print(df_subset_trump.shape)
# Joe Biden
np.random.seed(10)
remove_n =31
drop_indices = np.random.choice(biden_reviews.index, remove_n, replace=False)
df_subset_biden = biden_reviews.drop(drop_indices)
print(df_subset_biden.shape)

بعد از متعادل سازی دیتاست ها، نوبت می رسه به تحلیل داده ها برای پیش بینی انتخابات که این کار با تحلیل و ارزیابی تعداد توئیت های با احساسات منفی و مثبت مربوط به هر کدوم از کاندیدها انجام میشه:

(بعد از اینکه تعداد تویئت های مثبت و منفی مربوط به هر کدوم از کاندیدها محاسبه شد، به راحتی می تونیم با استفاده از کتابخونه plotly نتیجه حاصل رو به صورت مصور نشون بدیم تا درک میزان تفاوت احساسات توئیت های مربوط به هر کدوم از این کاندیدها راحت تر باشه.)

count_1 = df_subset_trump.groupby('Expression Label').count()
print(count_1)

negative_per1 = (count_1['Sentiment Polarity'][0]/1000)*10
positive_per1 = (count_1['Sentiment Polarity'][1]/1000)*100

count_2 = df_subset_biden.groupby('Expression Label').count()
print(count_2)

negative_per2 = (count_2['Sentiment Polarity'][0]/1000)*100
positive_per2 = (count_2['Sentiment Polarity'][1]/1000)*100

Politicians = ['Joe Biden', 'Donald Trump']
lis_pos = [positive_per1, positive_per2]
lis_neg = [negative_per1, negative_per2]

fig = go.Figure(data=[
    go.Bar(name='Positive', x=Politicians, y=lis_pos),
    go.Bar(name='Negative', x=Politicians, y=lis_neg)
])
# Change the bar mode
fig.update_layout(barmode='group')
fig.show()

خروجی:

اگر به شکل دقت کنیم، این کاملاً واضحه که جو بایدن در مقایسه با دونالد ترامپ، توئیت های مثبت بیشتری داره و طبیعتاً تعداد توئیت های منفی بایدن هم نسبت توئیت های منفی ترامپ کمتره. بنابراین، با اجرای این تسک به راحتی می تونستیم متوجه بشیم که مردم ترجیح میدن که جو بایدن رو به عنوان رئیس جمهور خود انتخاب کنن تا دونالد ترامپ.

این پست برای آموزش نحوه پیش بینی نتیجه انتخابات ایالات متحده تهیه شده که برای تحلیل نیز از داده های واقعی توئیتر مربوط به دوره انتخابات استفاده شد. امیدواریم که این پست آموزشی برای شما مفید واقع شده باشه.

برای هرگونه سوال در زمینه آموزش ها فقط کافیه روی لینک واتساپ یا تلگرام (در زیر همین پست) کلیک کنید. یا با شماره تماس بالای صفحه سایت تماس بگیرید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

قبلا حساب کاربری ایجاد کرده اید؟
گذرواژه خود را فراموش کرده اید؟
Loading...