Emil25 commited on
Commit
762ba71
·
1 Parent(s): 51bd1db

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -43
app.py CHANGED
@@ -1,3 +1,6 @@
 
 
 
1
  import torch
2
  import streamlit as st
3
  import googleapiclient.discovery
@@ -5,22 +8,23 @@ import pandas as pd
5
  from transformers import pipeline
6
  import matplotlib.pyplot as plt
7
  import seaborn as sns
8
- import os
9
- import re
10
 
11
  st.title('Анализатор комментариев :red[YouTube] :sunglasses:')
12
 
 
 
 
 
 
 
13
 
14
  # Инициализируем модель Hugging Face для анализа тональности текста
15
  cls_sent = pipeline("sentiment-analysis",
16
  "blanchefort/rubert-base-cased-sentiment")
17
 
18
  st.markdown('***')
19
-
20
  st.sidebar.markdown('# Меню')
21
-
22
- # Получаем YouTube API KEY видеоролика для отправки запроса
23
- API_key = os.getenv("api_key_youtube") #st.sidebar.text_input('YouTube API KEY')
24
  st.sidebar.markdown('***')
25
 
26
  # Получаем id видеоролика из URL для отправки запроса
@@ -40,9 +44,9 @@ btn_start = st.sidebar.button('Загрузить')
40
  if btn_start:
41
  # Запрос к YouTube API для получения комментариев к видео
42
  api_service_name = "youtube"
43
- api_version = "v3"
44
  youtube = googleapiclient.discovery.build(
45
- api_service_name, api_version, developerKey=API_key)
46
  request = youtube.commentThreads().list(
47
  part="snippet",
48
  videoId=vidID,
@@ -62,21 +66,29 @@ if btn_start:
62
  ])
63
  comments_df = pd.DataFrame(comments, columns=['author', 'published_at', 'updated_at', 'like_count', 'text'])
64
 
65
-
66
-
67
- # Выводим таблицу с комментариями на странице
68
  st.header('Комментарии из YouTube')
69
- selected_columns = ['author', 'published_at', 'text']
70
- new_df = comments_df[selected_columns]
71
- st.write(new_df)
 
 
 
 
 
 
 
 
 
 
72
  st.markdown('***')
73
-
74
  # Выводим heatmap комментариев по часам и датам
75
  st.header('Комментарии по часам и датам')
76
- new_df['published_at'] = pd.to_datetime(new_df['published_at'])
77
- new_df['Date'] = new_df['published_at'].dt.date
78
- new_df['Hour'] = new_df['published_at'].dt.hour
79
- pivot_table = new_df.pivot_table(index='Hour', columns='Date', values='text', aggfunc='count')
80
  plt.figure(figsize=(10, 6))
81
  sns.heatmap(pivot_table, cmap='YlGnBu')
82
  plt.title('Количество комментариев по часам и датам')
@@ -85,32 +97,11 @@ if btn_start:
85
  st.pyplot(plt)
86
  st.markdown('***')
87
 
88
- # Проходим по каждому комментарию в датафрейме
89
- # Анализируем тональность комментария с помощью модели Hugging Face
90
- # Добавляем результат в список
91
- res_list = []
92
- with st.spinner('Идет процесс обработки данных ...'):
93
- for comment in comments_df['text']:
94
- result = cls_sent(comment)
95
- res_list.append(result[0])
96
- s_label = f'Готово! Загружено {len(res_list)} комментариев'
97
- st.success(s_label)
98
-
99
-
100
- # Выводим таблицу с результатами на странице
101
- res_df = pd.DataFrame(res_list)
102
- st.header("Таблица c результатами работы модели")
103
- st.write(res_df)
104
- st.markdown('***')
105
-
106
  # Создаем круговую диаграмму
107
- data = res_df['label'].value_counts()
 
108
  fig, ax = plt.subplots()
109
  plt.title("Эмоциональная окраска комментариев на YouTube")
110
- label = res_df['label'].unique()
111
  ax.pie(data, labels=label, autopct='%1.1f%%')
112
  st.pyplot(fig)
113
-
114
-
115
-
116
-
 
1
+ import os
2
+ import re
3
+
4
  import torch
5
  import streamlit as st
6
  import googleapiclient.discovery
 
8
  from transformers import pipeline
9
  import matplotlib.pyplot as plt
10
  import seaborn as sns
11
+
 
12
 
13
  st.title('Анализатор комментариев :red[YouTube] :sunglasses:')
14
 
15
+ # Получаем YouTube API KEY из secrets
16
+ DEVELOPER_KEY = os.getenv("api_key_youtube")
17
+
18
+ #if not DEVELOPER_KEY:
19
+ # raise RuntimeError('Key is not set. Check your environment variables.')
20
+
21
 
22
  # Инициализируем модель Hugging Face для анализа тональности текста
23
  cls_sent = pipeline("sentiment-analysis",
24
  "blanchefort/rubert-base-cased-sentiment")
25
 
26
  st.markdown('***')
 
27
  st.sidebar.markdown('# Меню')
 
 
 
28
  st.sidebar.markdown('***')
29
 
30
  # Получаем id видеоролика из URL для отправки запроса
 
44
  if btn_start:
45
  # Запрос к YouTube API для получения комментариев к видео
46
  api_service_name = "youtube"
47
+ api_version = "v3"
48
  youtube = googleapiclient.discovery.build(
49
+ api_service_name, api_version, developerKey=DEVELOPER_KEY)
50
  request = youtube.commentThreads().list(
51
  part="snippet",
52
  videoId=vidID,
 
66
  ])
67
  comments_df = pd.DataFrame(comments, columns=['author', 'published_at', 'updated_at', 'like_count', 'text'])
68
 
69
+ # Получаем таблицу с комментариями на странице
 
 
70
  st.header('Комментарии из YouTube')
71
+ selected_columns = ['text', 'author', 'published_at']
72
+ comments_df = comments_df[selected_columns]
73
+
74
+ res_list = []
75
+ # Анализируем тональность комментария с помощью модели Hugging Face
76
+ with st.spinner('Идет процесс обработки данных...'):
77
+ res_list = cls_sent(comments_df['text'].to_list())
78
+ s_label = f'Готово! Обработано {len(res_list)} комментариев.'
79
+ st.success(s_label)
80
+
81
+ # Выводим таблицу с результатами на странице
82
+ full_df = pd.concat([pd.DataFrame(res_list), comments_df], axis=1)
83
+ st.write(full_df)
84
  st.markdown('***')
85
+
86
  # Выводим heatmap комментариев по часам и датам
87
  st.header('Комментарии по часам и датам')
88
+ full_df['published_at'] = pd.to_datetime(full_df['published_at'])
89
+ full_df['Date'] = full_df['published_at'].dt.date
90
+ full_df['Hour'] = full_df['published_at'].dt.hour
91
+ pivot_table = full_df.pivot_table(index='Hour', columns='Date', values='text', aggfunc='count')
92
  plt.figure(figsize=(10, 6))
93
  sns.heatmap(pivot_table, cmap='YlGnBu')
94
  plt.title('Количество комментариев по часам и датам')
 
97
  st.pyplot(plt)
98
  st.markdown('***')
99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  # Создаем круговую диаграмму
101
+ st.header('Эмоциональная окраска комментариев на YouTube')
102
+ data = full_df['label'].value_counts()
103
  fig, ax = plt.subplots()
104
  plt.title("Эмоциональная окраска комментариев на YouTube")
105
+ label = full_df['label'].unique()
106
  ax.pie(data, labels=label, autopct='%1.1f%%')
107
  st.pyplot(fig)