خانه » تحلیل احساسات با پایتون
تحلیل احساسات با python

تحلیل احساسات با پایتون

تحلیل احساسات چیست؟


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

تحلیل احساسات چه کاربردی دارد؟

تجزیه و تحلیل احساسات برای بررسی نظر مشتری برای مشاغل مختلف ضروری است.
فرض کنید: شرکت شما به تازگی محصول جدیدی را منتشر کرده است که در کانال های مختلفی تبلیغ می شود.
به منظور سنجش نظر مشتری به این محصول ، می توان تجزیه و تحلیل احساسات را با پایتون انجام داد.
این کار توسط زبانهای مختلفی قابل انجام است ولی متداول ترین زبانی که در علم داده به این منظور استفاده می شود زبان python است .در مقاله کاربرد پایتون در علم داده به تفصیل به بررسی این زبان پرداخته ایم

مشتریان معمولاً در مورد محصولات در شبکه های اجتماعی و انجمن بازخورد مشتری صحبت می کنند. این داده ها را می توان برای سنجش نظر کلی مشتری جمع آوری و تحلیل کرد.

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

در این مطلب قصد داریم با یک مثال عملی تجزیه و تحلیل احساسات کاربران را با python به شما آموزش دهم. برای انجام تجزیه و تحلیل از فایل Reviews.csv از مجموعه داده Kaggle’s Amazon Fine Food Reviews استفاده خواهیم کرد.

مرحله اول: خواندن داده ها

import pandas as pd
df = pd.read_csv('Reviews.csv')
df.head()
تحلیل احساسات چه کاربردی دارد؟

همانطور که می بینید dataframe حاوی برخی از اطلاعات مربوط به محصول ، کاربر و نظر است.
داده هایی که ما بیشتر برای این تحلیل استفاده خواهیم کرد “خلاصه” ، “متن” و “امتیاز” است.

  • متن(Text) – این متغیر شامل اطلاعات کامل بررسی محصول است.
  • خلاصه(Summary) – این خلاصه ای از کل بررسی است.
  • امتیاز(Score) – امتیاز محصول ارائه شده توسط مشتری.

مرحله دوم: تجزیه و تحلیل داده ها


اکنون ، نگاهی به متغیر “Score” خواهیم انداخت تا ببینیم اکثر امتیازهای مشتریان مثبت هستند یا منفی.
برای این کار ابتدا باید کتابخانه Plotly را نصب کنید.

import matplotlib.pyplot as plt
import seaborn as sns
color = sns.color_palette()
%matplotlib inline
import plotly.offline as py
py.init_notebook_mode(connected=True)
import plotly.graph_objs as go
import plotly.tools as tls
import plotly.express as px
# Product Scores
fig = px.histogram(df, x="Score")
fig.update_traces(marker_color="turquoise",marker_line_color='rgb(8,48,107)',
                  marker_line_width=1.5)
fig.update_layout(title_text='Product Score')
fig.show()

خروجی به این صورت خواهد بود.

تجزیه و تحلیل داده ها

از این نمودار می توان به این نتیجه رسید که بیشتر امتیاز های کاربران مثبت بوده است. اکنون ، می توانیم ابر کلمات(wordclouds) ایجاد کنیم تا بیشترین کلمات مورد استفاده در بررسی ها را مشاهده کنیم.

import nltk
from nltk.corpus import stopwords
# Create stopword list:
stopwords = set(STOPWORDS)
stopwords.update(["br", "href"])
textt = " ".join(review for review in df.Text)
wordcloud = WordCloud(stopwords=stopwords).generate(textt)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.savefig('wordcloud11.png')
plt.show()

خروجی به صورت زیر خواهد بود.

خروجی با ابرکلمات

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

مرحله سوم: طبقه بندی نظر ها

در این مرحله از تحلیل احساسات با پایتون ، ما نظر ها را به دو دسته “مثبت” و “منفی” طبقه بندی می کنیم.
نظر های مثبت به عنوان 1+ و نظر های منفی به 1- طبقه بندی می شوند.
ما همه نظرات با امتیاز(Score) بزرگتر از ۳ را به عنوان نظر مثبت یا 1+ در نظر می گیریم.
همچنین همه نظرات با “امتیاز” کمتر از ۳ را به عنوان 1- طبقه بندی می شوند. نظرات با امیتاز برابر ۳ رد می شود ، زیرا خنثی هستند. مدل ما فقط بررسی های مثبت و منفی را طبقه بندی می کند.

df = df[df['Score'] != 3]
df['sentiment'] = df['Score'].apply(lambda rating : +1 if rating > 3 else -1)

با نگاهی به قسمت بالای فریم داده ، می توان ستونی جدید به نام «sentiment» مشاهده کرد.

طبقه بندی نظرات در پایتون

مرحله چهارم: تجزیه و تحلیل بیشتر

حالا که نظرات کاربران را به دو دسته مثبت و منفی طبقه بندی کردیم برای هر دسته ابرکلمات(wordclouds) درست می کنیم. ابتدا دو فریم داده ایجاد می کنیم. یکی برای مثبت ها و دیگری برای منفی ها.

positive = df[df['sentiment'] == 1]
negative = df[df['sentiment'] == -1]

ابرکلمات مثبت

stopwords = set(STOPWORDS)
stopwords.update(["br", "href","good","great"]) 
## good and great removed because they were included in negative sentiment
pos = " ".join(review for review in positive.Summary)
wordcloud2 = WordCloud(stopwords=stopwords).generate(pos)
plt.imshow(wordcloud2, interpolation='bilinear')
plt.axis("off")
plt.show()
ابر کلمات در پایتون

ابرکلمات منفی

neg = " ".join(review for review in negative.Summary)
wordcloud3 = WordCloud(stopwords=stopwords).generate(neg)
plt.imshow(wordcloud3, interpolation='bilinear')
plt.axis("off")
plt.savefig('wordcloud33.png')
plt.show()

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

df['sentimentt'] = df['sentiment'].replace({-1 : 'negative'})
df['sentimentt'] = df['sentimentt'].replace({1 : 'positive'})
fig = px.histogram(df, x="sentimentt")
fig.update_traces(marker_color="indianred",marker_line_color='rgb(8,48,107)',
                  marker_line_width=1.5)
fig.update_layout(title_text='Product Sentiment')
fig.show()
نمودار توزیع بار احساسات با پایتون

مرحله پنجم: ساخت مدل

سرانجام ، ما می توانیم مدل تجزیه و تحلیل احساسات را با python بسازیم.
این مدل نظر ها را به عنوان ورودی می پذیرد. سپس پیش بینی می کند یک نظر مثبت است یا منفی.
این یک مدل طبقه بندی است. برای ادامه کار باید چند مرحله را انجام دهیم.

تمیز کردن داده ها

ما برای ارائه پیش بینی ها از داده های خلاصه استفاده خواهیم کرد. ابتدا باید تمام علائم نگارشی را از داده ها حذف کنیم.

def remove_punctuation(text):
    final = "".join(u for u in text if u not in ("?", ".", ";", ":",  "!",'"'))
    return final
df['Text'] = df['Text'].apply(remove_punctuation)
df = df.dropna(subset=['Summary'])
df['Summary'] = df['Summary'].apply(remove_punctuation)

تقسیم دیتافریم

چارچوب داده جدید فقط باید دو ستون داشته باشد: “Summary” (داده های متن بررسی) و “sentiment” (متغیر هدف).

dfNew = df[['Summary','sentiment']]
dfNew.head()

دیتافریم جدید به صورت زیر خواهد بود

اکنون ما فریم داده را به مجموعه های آموزش و آزمایش تقسیم می کنیم. 80٪ از داده ها برای آموزش و 20٪ برای آزمایش استفاده می شود.

index = df.index
df['random_number'] = np.random.randn(len(index))
train = df[df['random_number'] <= 0.8]
test = df[df['random_number'] > 0.8]

ساخت bag of words

در فرآیند تجزیه و تحلیل احساسات موجود در متن با استفاده از کتابخانه Scikit-learn در پایتون فرمت ذخیره کلمات تغییر را تغییر می دهیم. در واقع کلمات به صورت یک ماتریس ذخیره می شوند. چون الگوریتم مدلسازیlogistic regression توانایی درک کلمات به صورت عادی را ندارد.

from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer(token_pattern=r'\b\w+\b')
train_matrix = vectorizer.fit_transform(train['Summary'])
test_matrix = vectorizer.transform(test['Summary'])

وارد کردن الگوریتم و تقسیم کردن داده ها.

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
X_train = train_matrix
X_test = test_matrix
y_train = train['sentiment']
y_test = test['sentiment']

 

ساخت مدل

lr.fit(X_train,y_train)

پیش بینی داده ها

predictions = lr.predict(X_test)

با موفقیت مدل ساخته و پیش بینی انجام شد.

گام ششم: تست مدل

در این مرحله دقت مدل طراحی شده را تست می کنیم.

from sklearn.metrics import confusion_matrix,classification_report
new = np.asarray(y_test)
confusion_matrix(predictions,y_test)

ماتریس درهم ریختگی مدل به صورت زیر است.

print(classification_report(predictions,y_test))
میزان دقت نتایج

دقت کلی مدل در داده های آزمون حدود 93٪ است ، که با توجه به اینکه ما پیش پردازش زیادی انجام نداده ایم ، بسیار خوب است.

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

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

دیدگاه‌ خود را بنویسید

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

به بالای صفحه بردن