Emil25 commited on
Commit
e5242ff
1 Parent(s): 2604059

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +107 -0
  2. requirements.txt +0 -0
app.py ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import streamlit as st
3
+ import googleapiclient.discovery
4
+ import pandas as pd
5
+ from transformers import pipeline
6
+ import matplotlib.pyplot as plt
7
+ import seaborn as sns
8
+
9
+ st.title('Анализатор комментариев :red[YouTube] :sunglasses:')
10
+
11
+
12
+ # Инициализируем модель Hugging Face для анализа тональности текста
13
+ cls_sent = pipeline("sentiment-analysis",
14
+ "blanchefort/rubert-base-cased-sentiment")
15
+
16
+ st.markdown('***')
17
+
18
+ st.sidebar.markdown('# Меню')
19
+
20
+ # Получаем YouTube API KEY видеоролика для отправки запроса
21
+ API_key = st.sidebar.text_input('YouTube API KEY')
22
+ st.sidebar.markdown('***')
23
+
24
+ # Получаем id видеоролика для отправки запроса
25
+ vidID = st.sidebar.text_input('Video Id')
26
+ st.sidebar.write('Вы ввели... ', vidID )
27
+ st.sidebar.markdown('***')
28
+
29
+ btn_start = st.sidebar.button('Загрузить')
30
+ if btn_start:
31
+ # Запрос к YouTube API для получения комментариев к видео
32
+ api_service_name = "youtube"
33
+ api_version = "v3"
34
+ DEVELOPER_KEY = API_key
35
+ youtube = googleapiclient.discovery.build(
36
+ api_service_name, api_version, developerKey=DEVELOPER_KEY)
37
+ request = youtube.commentThreads().list(
38
+ part="snippet",
39
+ videoId=vidID,
40
+ maxResults=100
41
+ )
42
+ response = request.execute()
43
+ comments = []
44
+ # Преобразуем полученные комментарии в DataFrame
45
+ for item in response['items']:
46
+ comment = item['snippet']['topLevelComment']['snippet']
47
+ comments.append([
48
+ comment['authorDisplayName'],
49
+ comment['publishedAt'],
50
+ comment['updatedAt'],
51
+ comment['likeCount'],
52
+ comment['textDisplay']
53
+ ])
54
+ comments_df = pd.DataFrame(comments, columns=['author', 'published_at', 'updated_at', 'like_count', 'text'])
55
+
56
+
57
+
58
+ # Выводим таблицу с комментариями на странице
59
+ st.header('Комментарии из YouTube')
60
+ selected_columns = ['author', 'published_at', 'text']
61
+ new_df = comments_df[selected_columns]
62
+ st.write(new_df)
63
+ st.markdown('***')
64
+
65
+ # Выводим heatmap комментариев по часам и датам
66
+ st.header('Комментарии по часам и датам')
67
+ new_df['published_at'] = pd.to_datetime(new_df['published_at'])
68
+ new_df['Date'] = new_df['published_at'].dt.date
69
+ new_df['Hour'] = new_df['published_at'].dt.hour
70
+ pivot_table = new_df.pivot_table(index='Hour', columns='Date', values='text', aggfunc='count')
71
+ plt.figure(figsize=(10, 6))
72
+ sns.heatmap(pivot_table, cmap='YlGnBu')
73
+ plt.title('Количество комментариев по часам и датам')
74
+ plt.xlabel('Дата')
75
+ plt.ylabel('Час')
76
+ st.pyplot(plt)
77
+ st.markdown('***')
78
+
79
+ # Проходим по каждому комментарию в датафрейме
80
+ # Анализируем тональность комментария с помощью модели Hugging Face
81
+ # Добавляем результат в список
82
+ res_list = []
83
+ with st.spinner('Идет процесс обработки данных ...'):
84
+ for comment in comments_df['text']:
85
+ result = cls_sent(comment)
86
+ res_list.append(result[0])
87
+ s_label = f'Готово! Загружено {len(res_list)} комментариев'
88
+ st.success(s_label)
89
+
90
+
91
+ # Выводим таблицу с результатами на странице
92
+ res_df = pd.DataFrame(res_list)
93
+ st.header("Таблица c результатами работы модели")
94
+ st.write(res_df)
95
+ st.markdown('***')
96
+
97
+ # Создаем круговую диаграмму
98
+ data = res_df['label'].value_counts()
99
+ fig, ax = plt.subplots()
100
+ plt.title("Эмоциональная окраска комментариев на YouTube")
101
+ label = res_df['label'].unique()
102
+ ax.pie(data, labels=label, autopct='%1.1f%%')
103
+ st.pyplot(fig)
104
+
105
+
106
+
107
+
requirements.txt ADDED
Binary file (2.87 kB). View file