Napisz skrypt w Pythonie do analizy pliku CSV z wyciągiem bankowym
Kontekst i założenia projektu
Jesteś doświadczonym programistą Python z wieloletnią praktyką w analizie danych finansowych, tworzeniu skryptów automatyzujących procesy biznesowe oraz implementacji rozwiązań do zarządzania finansami osobistymi. Znasz dogłębnie biblioteki pandas, numpy, matplotlib, seaborn oraz najlepsze praktyki programowania w Pythonie. Twój kod jest zawsze czytelny, wydajny, dobrze udokumentowany i zabezpieczony przed typowymi błędami.
Cel główny
Stwórz kompleksowy, modularny skrypt w Pythonie do profesjonalnej analizy plików CSV zawierających wyciągi bankowe. Skrypt powinien być:
- Uniwersalny - obsługujący różne formaty wyciągów bankowych
- Bezpieczny - z walidacją danych i obsługą błędów
- Wydajny - optymalizowany do pracy z dużymi zbiorami danych
- Rozszerzalny - z możliwością łatwego dodawania nowych funkcjonalności
- Interaktywny - z opcjami konfiguracji przez użytkownika
Struktura skryptu - moduły podstawowe
1. Moduł wczytywania i walidacji danych
Implementuj funkcje do:
- Automatycznej detekcji kodowania pliku (UTF-8, ISO-8859-1, Windows-1250)
- Inteligentnego rozpoznawania struktury CSV (separatory, nagłówki)
- Walidacji kompletności danych (sprawdzanie brakujących wartości)
- Standaryzacji formatów dat i liczb
- Obsługi różnych formatów kwot (z przecinkiem/kropką, ze znakami waluty)
- Utworzenia kopii zapasowej oryginalnych danych
2. Moduł czyszczenia i preprocessingu
Zaprogramuj mechanizmy do:
- Usuwania duplikatów transakcji
- Normalizacji opisów transakcji (usuwanie zbędnych znaków, ujednolicanie)
- Konwersji walut (jeśli występują różne waluty)
- Uzupełniania brakujących danych metodami interpolacji
- Identyfikacji i oznaczania transakcji nietypowych (outliers)
3. Moduł kategoryzacji transakcji
Stwórz system automatycznej kategoryzacji oparty na:
- Słowach kluczowych w opisach transakcji
- Wzorcach wyrażeń regularnych (regex)
- Kwotach transakcji (przedziały)
- Machine Learning (opcjonalnie: naive Bayes, decision trees)
- Możliwości ręcznego przypisywania kategorii z zapisem reguł
Funkcjonalności analityczne
4. Analiza podstawowa
Zaimplementuj obliczenia:
- Statystyki opisowe: suma przychodów/wydatków, średnia transakcja, mediana, odchylenie standardowe
- Bilans miesięczny/tygodniowy/dzienny: przepływy pieniężne w czasie
- Top 10 największych wydatków i przychodów
- Częstotliwość transakcji: liczba transakcji dziennie/tygodniowo
- Analiza salda: minimum, maksimum, trend
5. Analiza zaawansowana
Dodaj funkcje do:
- Analizy trendów: regresja liniowa wydatków/przychodów
- Sezonowości: identyfikacja cyklicznych wzorców wydatków
- Prognozowania: przewidywanie przyszłych wydatków (ARIMA, Prophet)
- Analizy korelacji: zależności między kategoriami wydatków
- Wykrywania anomalii: transakcje odbiegające od normy
- Analizy cash flow: projekcja przepływów gotówkowych
6. Analiza według kategorii
Przeprowadź szczegółową analizę:
- Udział procentowy każdej kategorii w wydatkach
- Trend wydatków w każdej kategorii
- Porównanie miesięczne/kwartalne kategorii
- Identyfikacja kategorii rosnących/malejących
- Analiza ABC (Pareto) wydatków
Wizualizacja danych
7. Moduł generowania wykresów
Stwórz interaktywne wizualizacje:
- Wykres liniowy: trend salda w czasie
- Wykres słupkowy: wydatki według kategorii
- Wykres kołowy: struktura wydatków
- Heatmapa: wydatki w układzie dzień/miesiąc
- Wykres wodospadowy: przepływ gotówki
- Dashboard: interaktywny panel z plotly/dash
- Wykres Sankey: przepływ środków między kategoriami
Raportowanie i eksport
8. Moduł generowania raportów
Implementuj generowanie:
- Raportu PDF: profesjonalny dokument z wykresami i tabelami
- Raportu HTML: interaktywny raport do przeglądania w przeglądarce
- Pliku Excel: arkusz z wieloma zakładkami i formatowaniem
- Podsumowania tekstowego: kluczowe wnioski w formie bullet points
- Alertów i rekomendacji: automatyczne sugestie oszczędności
Implementacja techniczna
9. Struktura kodu
# Główne biblioteki do wykorzystania
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime, timedelta
import re
import json
from pathlib import Path
import logging
from typing import Dict, List, Optional, Tuple
import warnings
10. Architektura aplikacji
Zastosuj wzorce projektowe:
- MVC (Model-View-Controller) dla separacji logiki
- Factory Pattern dla tworzenia różnych typów analiz
- Strategy Pattern dla różnych metod kategoryzacji
- Observer Pattern dla systemu powiadomień
11. Obsługa błędów i logowanie
Zaimplementuj:
- Try-except bloki dla wszystkich operacji I/O
- Własne klasy wyjątków dla specyficznych błędów
- System logowania z różnymi poziomami (DEBUG, INFO, WARNING, ERROR)
- Walidację danych wejściowych z informatywnymi komunikatami
Bezpieczeństwo i prywatność
12. Zabezpieczenia
Dodaj mechanizmy:
- Szyfrowania wrażliwych danych (opcjonalnie)
- Anonimizacji danych osobowych w raportach
- Bezpiecznego przechowywania konfiguracji
- Walidacji ścieżek plików (zapobieganie path traversal)
- Limitów pamięci dla dużych plików
Konfiguracja i personalizacja
13. Plik konfiguracyjny
Stwórz system konfiguracji (JSON/YAML):
{
"categories": {
"Jedzenie": ["restauracja", "sklep spożywczy", "żabka"],
"Transport": ["paliwo", "uber", "bilety"],
"Rachunki": ["prąd", "gaz", "internet"]
},
"alerts": {
"overspending_threshold": 5000,
"low_balance_alert": 1000
},
"report_settings": {
"currency": "PLN",
"date_format": "DD-MM-YYYY"
}
}
Przykłady użycia i dokumentacja
14. Dokumentacja kodu
Przygotuj:
- Docstringi dla wszystkich funkcji i klas
- README.md z instrukcją instalacji i użycia
- Przykładowe pliki CSV do testów
- Jupyter Notebook z tutorialem
- Testy jednostkowe (pytest)
15. Interfejs użytkownika
Rozważ implementację:
- CLI (Command Line Interface) z argparse
- Prosty GUI z tkinter lub PyQt
- Web interface z Flask/FastAPI
- Integrację z Jupyter notebooks
Optymalizacja wydajności
16. Techniki optymalizacji
Zastosuj:
- Chunking dla dużych plików CSV
- Multiprocessing dla równoległego przetwarzania
- Caching wyników pośrednich
- Vectorized operations w pandas
- Query optimization dla filtrowania danych
Integracje zewnętrzne
17. Możliwe rozszerzenia
Przygotuj kod do integracji z:
- API banków (jeśli dostępne)
- Google Sheets
- Dropbox/Google Drive do automatycznego pobierania plików
- Systemami powiadomień (email, Slack)
- Bazami danych (SQLite, PostgreSQL)
Plan rozwoju i utrzymania
18. Roadmapa funkcjonalności
Zaplanuj przyszłe wersje:
- v1.0: Podstawowa analiza i kategoryzacja
- v1.5: Dodanie wizualizacji i raportów PDF
- v2.0: Machine Learning dla kategoryzacji
- v2.5: Web interface i API REST
- v3.0: Aplikacja mobilna i synchronizacja chmurowa
Metryki sukcesu i KPI
19. Wskaźniki do monitorowania
Zdefiniuj metryki:
- Dokładność kategoryzacji (% poprawnie przypisanych transakcji)
- Czas przetwarzania pliku (ms/1000 transakcji)
- Pokrycie testami jednostkowymi (target: >80%)
- Liczba obsługiwanych formatów banków
- Satysfakcja użytkownika (feedback score)
Podsumowanie i najlepsze praktyki
Tworzony skrypt powinien być:
- Modularny - łatwy do rozbudowy i modyfikacji
- Testowalny - z kompleksowymi testami jednostkowymi
- Dokumentowany - z jasną dokumentacją techniczną i użytkową
- Wydajny - zoptymalizowany do pracy z dużymi zbiorami danych
- Bezpieczny - z pełną obsługą błędów i walidacją danych
- Użyteczny - dostarczający realnej wartości w analizie finansów osobistych
Pamiętaj o stosowaniu konwencji PEP 8, type hints oraz tworzeniu kodu zgodnego z zasadami SOLID i DRY. Skrypt powinien być łatwy w instalacji (requirements.txt, setup.py) i uruchomieniu, z możliwością działania na różnych systemach operacyjnych.