pi_project / app.py
Emil25's picture
Upload 2 files
e5242ff
raw history blame
No virus
4.21 kB
import torch
import streamlit as st
import googleapiclient.discovery
import pandas as pd
from transformers import pipeline
import matplotlib.pyplot as plt
import seaborn as sns
st.title('Анализатор комментариев :red[YouTube] :sunglasses:')
# Инициализируем модель Hugging Face для анализа тональности текста
cls_sent = pipeline("sentiment-analysis",
"blanchefort/rubert-base-cased-sentiment")
st.markdown('***')
st.sidebar.markdown('# Меню')
# Получаем YouTube API KEY видеоролика для отправки запроса
API_key = st.sidebar.text_input('YouTube API KEY')
st.sidebar.markdown('***')
# Получаем id видеоролика для отправки запроса
vidID = st.sidebar.text_input('Video Id')
st.sidebar.write('Вы ввели... ', vidID )
st.sidebar.markdown('***')
btn_start = st.sidebar.button('Загрузить')
if btn_start:
# Запрос к YouTube API для получения комментариев к видео
api_service_name = "youtube"
api_version = "v3"
DEVELOPER_KEY = API_key
youtube = googleapiclient.discovery.build(
api_service_name, api_version, developerKey=DEVELOPER_KEY)
request = youtube.commentThreads().list(
part="snippet",
videoId=vidID,
maxResults=100
)
response = request.execute()
comments = []
# Преобразуем полученные комментарии в DataFrame
for item in response['items']:
comment = item['snippet']['topLevelComment']['snippet']
comments.append([
comment['authorDisplayName'],
comment['publishedAt'],
comment['updatedAt'],
comment['likeCount'],
comment['textDisplay']
])
comments_df = pd.DataFrame(comments, columns=['author', 'published_at', 'updated_at', 'like_count', 'text'])
# Выводим таблицу с комментариями на странице
st.header('Комментарии из YouTube')
selected_columns = ['author', 'published_at', 'text']
new_df = comments_df[selected_columns]
st.write(new_df)
st.markdown('***')
# Выводим heatmap комментариев по часам и датам
st.header('Комментарии по часам и датам')
new_df['published_at'] = pd.to_datetime(new_df['published_at'])
new_df['Date'] = new_df['published_at'].dt.date
new_df['Hour'] = new_df['published_at'].dt.hour
pivot_table = new_df.pivot_table(index='Hour', columns='Date', values='text', aggfunc='count')
plt.figure(figsize=(10, 6))
sns.heatmap(pivot_table, cmap='YlGnBu')
plt.title('Количество комментариев по часам и датам')
plt.xlabel('Дата')
plt.ylabel('Час')
st.pyplot(plt)
st.markdown('***')
# Проходим по каждому комментарию в датафрейме
# Анализируем тональность комментария с помощью модели Hugging Face
# Добавляем результат в список
res_list = []
with st.spinner('Идет процесс обработки данных ...'):
for comment in comments_df['text']:
result = cls_sent(comment)
res_list.append(result[0])
s_label = f'Готово! Загружено {len(res_list)} комментариев'
st.success(s_label)
# Выводим таблицу с результатами на странице
res_df = pd.DataFrame(res_list)
st.header("Таблица c результатами работы модели")
st.write(res_df)
st.markdown('***')
# Создаем круговую диаграмму
data = res_df['label'].value_counts()
fig, ax = plt.subplots()
plt.title("Эмоциональная окраска комментариев на YouTube")
label = res_df['label'].unique()
ax.pie(data, labels=label, autopct='%1.1f%%')
st.pyplot(fig)