rafaldembski commited on
Commit
7ac8b0d
·
verified ·
1 Parent(s): c01912a

Update pages/Statistics.py

Browse files
Files changed (1) hide show
  1. pages/Statistics.py +101 -24
pages/Statistics.py CHANGED
@@ -1,26 +1,103 @@
1
- # pages/Statistics.py
2
-
3
  import streamlit as st
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
- # Definiowanie tłumaczeń dla tej podstrony
6
- page_translations = {
7
- 'Polish': {
8
- 'header': "📈 Statystyki",
9
- 'content': """Tutaj znajdują się statystyki dotyczące analizowanych wiadomości SMS."""
10
- },
11
- 'German': {
12
- 'header': "📈 Statistiken",
13
- 'content': """Hier befinden sich Statistiken zu den analysierten SMS-Nachrichten."""
14
- },
15
- 'English': {
16
- 'header': "📈 Statistics",
17
- 'content': """Here are the statistics of the analyzed SMS messages."""
18
- }
19
- }
20
-
21
- def main(language):
22
- st.header(page_translations[language]['header'])
23
- st.write(page_translations[language]['content'])
24
- # Tutaj dodaj resztę funkcjonalności statystyk
25
-
26
- # Do not include "if __name__ == '__main__':" block in pages
 
 
 
1
  import streamlit as st
2
+ import pandas as pd
3
+ import plotly.express as px
4
+ import json
5
+ from utils.functions import get_stats, get_history, is_fake_number
6
+ from datetime import datetime
7
+
8
+ # Ustawienie strony
9
+ st.set_page_config(
10
+ page_title="📊 Statystyki Scam Detector",
11
+ layout="wide",
12
+ )
13
+
14
+ # Funkcja do załadowania statystyk
15
+ def load_stats():
16
+ stats = get_stats()
17
+ return stats
18
+
19
+ # Funkcja do załadowania historii
20
+ def load_history():
21
+ history = get_history()
22
+ return pd.DataFrame(history)
23
+
24
+ # 1. Statystyki ogólne
25
+ st.markdown("## 📊 Ogólne Statystyki")
26
+
27
+ # Ładowanie danych
28
+ stats = load_stats()
29
+ history_df = load_history()
30
+
31
+ # Kluczowe metryki
32
+ total_analyses = stats["total_analyses"]
33
+ total_frauds_detected = stats["total_frauds_detected"]
34
+
35
+ # Wyświetlenie metryk w poziomych kolumnach
36
+ col1, col2, col3 = st.columns(3)
37
+ col1.metric(label="Liczba przeanalizowanych wiadomości", value=total_analyses)
38
+ col2.metric(label="Wykryte oszustwa", value=total_frauds_detected)
39
+ col3.metric(label="Procent oszustw", value=f"{(total_frauds_detected/total_analyses)*100:.2f}%")
40
+
41
+ # 2. Dynamika analiz w czasie
42
+ st.markdown("### 📈 Dynamika analiz w czasie")
43
+ history_df['timestamp'] = pd.to_datetime(history_df['timestamp'])
44
+ history_df['date'] = history_df['timestamp'].dt.date
45
+
46
+ # Grupowanie po dacie
47
+ analyses_per_day = history_df.groupby('date').size().reset_index(name='count')
48
+
49
+ # Wykres dynamiki analiz
50
+ fig_analyses = px.line(analyses_per_day, x='date', y='count', title='Liczba analiz dziennie', labels={'count':'Liczba analiz', 'date':'Data'})
51
+ st.plotly_chart(fig_analyses, use_container_width=True)
52
+
53
+ # 3. Wykryte oszustwa na przestrzeni czasu
54
+ st.markdown("### 🚨 Wykryte oszustwa na przestrzeni czasu")
55
+ history_df['fraud_detected'] = history_df['risk_assessment'].apply(lambda x: 'Tak' if 'wysokie ryzyko' in x else 'Nie')
56
+ frauds_per_day = history_df[history_df['fraud_detected'] == 'Tak'].groupby('date').size().reset_index(name='count')
57
+
58
+ # Wykres wykrytych oszustw
59
+ fig_frauds = px.bar(frauds_per_day, x='date', y='count', title='Liczba wykrytych oszustw dziennie', labels={'count':'Liczba oszustw', 'date':'Data'})
60
+ st.plotly_chart(fig_frauds, use_container_width=True)
61
+
62
+ # 4. Najczęściej zgłaszane numery
63
+ st.markdown("### 📞 Najczęściej zgłaszane numery jako oszustwa")
64
+ # Grupa zgłoszonych numerów
65
+ fake_numbers_df = history_df[history_df['fraud_detected'] == 'Tak'].groupby('phone_number').size().reset_index(name='count').sort_values(by='count', ascending=False).head(10)
66
+
67
+ # Tabela zgłoszonych numerów
68
+ st.table(fake_numbers_df)
69
+
70
+ # 5. Kraje i operatorzy telefonii komórkowej związani z oszustwami
71
+ st.markdown("### 🌍 Kraje i operatorzy telefonii komórkowej związani z oszustwami")
72
+ if not history_df.empty:
73
+ history_df['country'], history_df['operator'] = zip(*history_df['phone_number'].apply(lambda x: get_phone_info(x) if is_fake_number(x) else (None, None)))
74
+ country_stats = history_df[history_df['country'].notna()].groupby('country').size().reset_index(name='count').sort_values(by='count', ascending=False)
75
+
76
+ # Wykres mapy krajów
77
+ fig_map = px.choropleth(country_stats, locations='country', locationmode='country names', color='count', title='Liczba zgłoszonych oszustw według kraju')
78
+ st.plotly_chart(fig_map, use_container_width=True)
79
+
80
+ # 6. Średni czas analizy wiadomości
81
+ st.markdown("### ⏱ Średni czas analizy wiadomości")
82
+ history_df['analysis_time'] = (history_df['timestamp'].max() - history_df['timestamp'].min()).seconds
83
+ average_analysis_time = history_df['analysis_time'].mean()
84
+
85
+ # Wyświetlenie średniego czasu analizy
86
+ st.metric(label="Średni czas analizy", value=f"{average_analysis_time:.2f} sekund")
87
+
88
+ # 7. Statystyki użytkowników
89
+ st.markdown("### 👥 Statystyki użytkowników")
90
+ # Placeholder dla użytkowników, np. statystyk związanych z kontami (jeśli aplikacja ma użytkowników zarejestrowanych)
91
+ st.metric(label="Liczba użytkowników", value="500") # Zastąp dynamiczną wartością, jeśli dostępna
92
+
93
+ # 8. Zgłoszenia numerów jako oszustwa
94
+ st.markdown("### 🚩 Zgłoszenia numerów jako oszustwa")
95
+ reports_per_day = history_df[history_df['fraud_detected'] == 'Tak'].groupby('date').size().reset_index(name='count')
96
+
97
+ # Wykres zgłoszeń numerów
98
+ fig_reports = px.bar(reports_per_day, x='date', y='count', title='Liczba zgłoszeń numerów jako oszustwa dziennie', labels={'count':'Liczba zgłoszeń', 'date':'Data'})
99
+ st.plotly_chart(fig_reports, use_container_width=True)
100
 
101
+ # 9. Historia analiz
102
+ st.markdown("### 🕑 Historia analizowanych wiadomości")
103
+ st.dataframe(history_df[['timestamp', 'phone_number', 'analysis', 'risk_assessment', 'recommendations']].head(10))