Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -375,6 +375,25 @@ def update_download_link():
|
|
375 |
contributor_pie_fig = px.pie(values=contributor_counts.values, names=contributor_counts.index, title='Наиболее активные контрибьюторы')
|
376 |
date_message_fig = px.bar(x=date_counts.index, y=date_counts.values, labels={'x': 'Дата', 'y': 'Количество сообщений'}, title='Количество добавленных сообщений по датам')
|
377 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
378 |
def remove_extra_text(message):
|
379 |
if pd.isnull(message):
|
380 |
return ''
|
@@ -382,53 +401,38 @@ def update_download_link():
|
|
382 |
return re.sub(r'\n-{6,}\nКоличество знаков: \d+', '', message).strip()
|
383 |
|
384 |
# Применяем функцию к персонализированным и откорректированным сообщениям
|
385 |
-
|
386 |
-
clean_df['Откорректированное сообщение'] = clean_df['Откорректированное сообщение'].fillna('').apply(remove_extra_text)
|
387 |
-
|
388 |
-
# Если есть откорректированное сообщение, используем его; иначе — персонализированное
|
389 |
-
clean_df['Сообщение'] = clean_df['Откорректированное сообщение'].where(
|
390 |
-
clean_df['Откорректированное сообщение'].str.strip() != '',
|
391 |
-
clean_df['Персонализированное сообщение']
|
392 |
-
)
|
393 |
|
394 |
# Подсчитываем количество символов
|
395 |
-
|
396 |
-
mean_characters =
|
397 |
-
median_characters =
|
398 |
|
399 |
# Подсчитываем количество предложений
|
400 |
-
|
401 |
-
clean_df['Количество предложений'] = clean_df['Сообщение'].apply(lambda x: len(re.findall(r'[.!?]', x)))
|
402 |
|
403 |
# График распределения по количеству символов
|
404 |
-
character_counts =
|
405 |
char_count_fig = px.bar(
|
406 |
-
x=character_counts.index,
|
407 |
-
y=character_counts.values,
|
408 |
-
labels={'x': 'Количество символов', 'y': 'Количество сообщений'},
|
409 |
title='Распределение сообщений по количеству символов'
|
410 |
)
|
411 |
char_count_fig.add_vline(
|
412 |
-
x=mean_characters,
|
413 |
-
line_width=3,
|
414 |
-
line_dash="dash",
|
415 |
-
line_color="green",
|
416 |
annotation_text=f"Среднее: {mean_characters:.1f}"
|
417 |
)
|
418 |
-
char_count_fig.add_vline(
|
419 |
-
x=median_characters,
|
420 |
-
line_width=3,
|
421 |
-
line_dash="dash",
|
422 |
-
line_color="red",
|
423 |
-
annotation_text=f"Медиана: {median_characters:.1f}"
|
424 |
-
)
|
425 |
|
426 |
# График распределения по количеству предложений
|
427 |
-
sentence_counts =
|
428 |
sentence_count_fig = px.bar(
|
429 |
-
x=sentence_counts.index,
|
430 |
-
y=sentence_counts.values,
|
431 |
-
labels={'x': 'Количество предложений', 'y': 'Количество сообщений'},
|
432 |
title='Распределение сообщений по количеству предложений'
|
433 |
)
|
434 |
|
|
|
375 |
contributor_pie_fig = px.pie(values=contributor_counts.values, names=contributor_counts.index, title='Наиболее активные контрибьюторы')
|
376 |
date_message_fig = px.bar(x=date_counts.index, y=date_counts.values, labels={'x': 'Дата', 'y': 'Количество сообщений'}, title='Количество добавленных сообщений по датам')
|
377 |
|
378 |
+
# Сообщения без корректировок
|
379 |
+
messages_without_corrections = df[
|
380 |
+
(df['Персонализированное сообщение'].notna()) &
|
381 |
+
(df['Персонализированное сообщение'].str.strip() != '') &
|
382 |
+
((df['Комментарий'].isna()) | (df['Комментарий'].str.strip() == '')) &
|
383 |
+
((df['Откорректированное сообщение'].isna()) | (df['Откорректированное сообщение'].str.strip() == ''))
|
384 |
+
].copy()
|
385 |
+
messages_without_corrections['Сообщение'] = messages_without_corrections['Персонализированное сообщение']
|
386 |
+
|
387 |
+
# Откорректированные сообщения
|
388 |
+
corrected_messages = df[
|
389 |
+
(df['Откорректированное сообщение'].notna()) &
|
390 |
+
(df['Откорректированное сообщение'].str.strip() != '')
|
391 |
+
].copy()
|
392 |
+
corrected_messages['Сообщение'] = corrected_messages['Откорректированное сообщение']
|
393 |
+
|
394 |
+
# Объединяем сообщения
|
395 |
+
messages_df = pd.concat([messages_without_corrections, corrected_messages], ignore_index=True)
|
396 |
+
|
397 |
def remove_extra_text(message):
|
398 |
if pd.isnull(message):
|
399 |
return ''
|
|
|
401 |
return re.sub(r'\n-{6,}\nКоличество знаков: \d+', '', message).strip()
|
402 |
|
403 |
# Применяем функцию к персонализированным и откорректированным сообщениям
|
404 |
+
messages_df['Сообщение'] = messages_df['Сообщение'].apply(remove_extra_text)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
405 |
|
406 |
# Подсчитываем количество символов
|
407 |
+
messages_df['Количество символов'] = messages_df['Сообщение'].str.len()
|
408 |
+
mean_characters = messages_df['Количество символов'].mean()
|
409 |
+
median_characters = messages_df['Количество символов'].median()
|
410 |
|
411 |
# Подсчитываем количество предложений
|
412 |
+
messages_df['Количество предложений'] = messages_df['Сообщение'].apply(lambda x: len(re.findall(r'[.!?]+', x)))
|
|
|
413 |
|
414 |
# График распределения по количеству символов
|
415 |
+
character_counts = messages_df['Количество символов'].value_counts().sort_index()
|
416 |
char_count_fig = px.bar(
|
417 |
+
x=character_counts.index,
|
418 |
+
y=character_counts.values,
|
419 |
+
labels={'x': 'Количество символов', 'y': 'Количество сообщений'},
|
420 |
title='Распределение сообщений по количеству символов'
|
421 |
)
|
422 |
char_count_fig.add_vline(
|
423 |
+
x=mean_characters,
|
424 |
+
line_width=3,
|
425 |
+
line_dash="dash",
|
426 |
+
line_color="green",
|
427 |
annotation_text=f"Среднее: {mean_characters:.1f}"
|
428 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
429 |
|
430 |
# График распределения по количеству предложений
|
431 |
+
sentence_counts = messages_df['Количество предложений'].value_counts().sort_index()
|
432 |
sentence_count_fig = px.bar(
|
433 |
+
x=sentence_counts.index,
|
434 |
+
y=sentence_counts.values,
|
435 |
+
labels={'x': 'Количество предложений', 'y': 'Количество сообщений'},
|
436 |
title='Распределение сообщений по количеству предложений'
|
437 |
)
|
438 |
|