-
Języki programowania
- Python: Wykorzystany do przetwarzania danych, obsługi bazy danych, generowania raportów oraz tworzenia wykresów i przeprowadzenia analizy.
- SQL: Używany do komunikacji z bazą danych, dodania informacji do bazy, tworzenia zapytań i manipulacji danymi.
-
Baza danych
- MariaDB: Wykorzystana jako system zarządzania bazą danych (DBMS) do przechowywania danych o klientach, wycieczkach, pracownikach i kosztach.
-
Biblioteki w Pythonie
- mysql.connector: Używana do komunikacji z bazą danych MySQL.
- pandas: Używana do manipulacji danymi (przeszukiwanie, agregowanie) oraz do tworzenia struktury danych (DataFrame).
- matplotlib: Używana do generowania wykresów i wizualizacji danych w postaci wykresów słupkowych, kołowych i liniowych.
- faker: Używana do generowania fikcyjnych danych, takich jak imiona, nazwiska, adresy i telefony, co pozwoliło na łatwe zapełnienie bazy danych.
- datetime: Używana do pracy z datami i czasem.
- numpy: Używana do obliczeń numerycznych, szczególnie przy pracy z danymi tabelarycznymi.
- random: Używana do generowania losowych wartości.
- unicodedata: Używana do normalizacji znaków Unicode (usuwania akcentów z liter).
-
Środowisko
- VS Code: Używane do edycji kodu w pracy z Pythonem i SQL.
-
Narzędzia do zarządzania wersjami
- Git: Używane do zarządzania kodem i wersjami projektu oraz wspólnej pracy nad projektem.
- GitHub: Używane do przechowywania kodu w chmurze.
-
Inne narzędzia
- Markdown: Używane do dokumentowania projektu w formacie .md.
-
tworzenie_tabel.sql
Skrypt SQL zawierający schemat bazy danych, w tym definicje tabel i zależności między nimi. -
schemat_bazy.png
Graficzny schemat bazy danych. -
wprowadzenie_danych.ipynb
Jupyter Notebook zawierający skrypty do łączenia się z bazą danych w Pythonie i dodawania danych do bazy. -
analiza_danych.ipynb
Jupyter Notebook zawierający kod do analizy danych i generowania wykresów. Skrypt wykonuje zapytania SQL, przetwarza dane przy użyciu Pandas oraz wizualizuje wyniki. -
analiza_danych.pdf
Plik pdf z pliku Jupyter Notebook z analizą danych. -
README.md
Dokumentacja projektu, zawierająca instrukcje dotyczące projektu.
-
Połącz się z serwerem bazy: Połącz się z bazą na serwerze kursu używając danych do logowania:
login: team18
hasło: te@mzaib
baza: team18 -
Utwórz tabele w bazie danych: Uruchom skrypt tworzenie_tabel.sql w swoim środowisku bazodanowym, aby utworzyć odpowiednie tabele do projektu.
-
Uruchom pierwszy plik Jupyter Notebook (wprowadzenie_danych.ipynb): Skrypt ten łączy się z bazą danych i pozwala na dodanie wybranej przez siebie liczby danych.
-
Uruchom drugi plik Jupyter Notebook (analiza_danych.ipynb): Przeanalizuj zebrane dane przy użyciu Pandas i Matplotlib. Skrypt wyświetli odpowiednie wykresy i dane w celu przeprowadzenia analizy.
Tabela panstwa | |
---|---|
panstwo_id | nazwa |
Każdemu unikalnemu panstwo_id przypisana jest nazwa państwa.
Tabela miasta | ||
---|---|---|
miasto_id | nazwa | panstwo_id |
Każdemu unikalnemu miasto_id przypisana jest nazwa miasta oraz panstwo_id (odwołanie do tabeli panstwa).
Tabela adresy | ||
---|---|---|
adres_id | adres | miasto_id |
Każdemu unikalnemu adres_id przypisane są dane o adresie oraz miasto_id (odwołanie do tabeli miasta).
Tabela klienci | |||||||
---|---|---|---|---|---|---|---|
klient_id | imie | nazwisko | telefon | adres_id | data_urodzenia | numer_paszportu |
Każdemu unikalnemu klient_id przypisane są dane o kliencie: imię, nazwisko, telefon, email, adres_id (odwołanie do tabeli adresy), data urodzenia oraz numer paszportu.
Tabela bliscy | |||||
---|---|---|---|---|---|
bliski_id | klient_id | imie | nazwisko | telefon |
Każdemu unikalnemu bliski_id przypisane są dane o bliskim: klient_id (odwołanie do tabeli klienci), imię, nazwisko, telefon oraz email.
Tabela stanowiska | |
---|---|
stanowisko_id | nazwa |
Każdemu unikalnemu stanowisko_id przypisana jest nazwa stanowiska.
Tabela pracownicy | |||||
---|---|---|---|---|---|
pracownik_id | imie | nazwisko | stanowisko_id | telefon |
Każdemu unikalnemu pracownik_id przypisane są dane o pracowniku: imię, nazwisko, stanowisko_id (odwołanie do tabeli stanowiska), telefon oraz email.
Tabela wyplaty | |||
---|---|---|---|
wyplata_id | pracownik_id | kwota | data_wyplaty |
Każdemu unikalnemu wyplata_id przypisane są dane o wypłacie: pracownik_id (odwołanie do tabeli pracownicy), kwota oraz data wypłaty.
Tabela rodzaje_wycieczek | |
---|---|
rodzaj_id | nazwa |
Każdemu unikalnemu rodzaj_id przypisana jest nazwa rodzaju wycieczki.
Tabela wycieczki | |||||||
---|---|---|---|---|---|---|---|
wycieczka_id | nazwa | kierunek | opis | rodzaj_id | czas_trwania | liczba_uczestników | krajowa |
Każdemu unikalnemu wycieczka_id przypisane są dane o wycieczce: nazwa, kierunek, opis, rodzaj_id (odwołanie do tabeli rodzaje_wycieczek), czas trwania, liczba uczestników oraz informacja, czy wycieczka jest krajowa.
Tabela zrealizowane_wyjazdy | ||||
---|---|---|---|---|
wyjazd_id | wycieczka_id | data_rozpoczęcia | data_zakończenia | liczba_uczestników |
Każdemu unikalnemu wyjazd_id przypisane są dane o zrealizowanym wyjeździe: wycieczka_id (odwołanie do tabeli wycieczki), data rozpoczęcia, data zakończenia oraz liczba uczestników.
Tabela koszty_wycieczek_2022 | |||||
---|---|---|---|---|---|
koszt_id | wycieczka_id | cena_przejazd | cena_nocleg | cena_ubezpieczenie | cena_organizacja |
Każdemu unikalnemu koszt_id przypisane są dane o kosztach wycieczki: wycieczka_id (odwołanie do tabeli wycieczki), cena przejazdu, cena noclegu, cena ubezpieczenia oraz cena organizacji.
Tabela koszty_wycieczek_2023 | |||||
---|---|---|---|---|---|
koszt_id | wycieczka_id | cena_przejazd | cena_nocleg | cena_ubezpieczenie | cena_organizacja |
Każdemu unikalnemu koszt_id przypisane są dane o kosztach wycieczki: wycieczka_id (odwołanie do tabeli wycieczki), cena przejazdu, cena noclegu, cena ubezpieczenia oraz cena organizacji.
Tabela koszty_wycieczek_2024 | |||||
---|---|---|---|---|---|
koszt_id | wycieczka_id | cena_przejazd | cena_nocleg | cena_ubezpieczenie | cena_organizacja |
Każdemu unikalnemu koszt_id przypisane są dane o kosztach wycieczki: wycieczka_id (odwołanie do tabeli wycieczki), cena przejazdu, cena noclegu, cena ubezpieczenia oraz cena organizacji.
Baza danych została zaprojektowana zgodnie z zasadami Elementary Key Normal Form (EKNF), co oznacza, że:
-
Jednoznaczne klucze podstawowe – Każda tabela posiada jednoznaczny klucz podstawowy (np.
panstwo_id
,miasto_id
,klient_id
), który pozwala na jednoznaczną identyfikację każdego rekordu. Klucze podstawowe są minimalne, zawierają tylko te kolumny, które są niezbędne do identyfikacji danych. -
Brak zbędnej redundancji – W tabelach unikamy przechowywania powtarzających się informacji.
- W tabeli
pracownicy
przechowywane są jedynie dane dotyczące pracowników, a szczegóły dotyczące ich stanowisk są zapisane w osobnej tabelistanowiska
, dzięki czemu nie powtarzamy informacji o stanowisku w każdym rekordzie pracownika.
- W tabeli
-
Zależności funkcyjne – Atrybuty tabel są zależne od swoich kluczy podstawowych.
- W tabeli
koszty_wycieczek_2022
wartości takie jakcena_przejazd
,cena_nocleg
,cena_ubezpieczenie
są zależne od kluczawycieczka_id
.
- W tabeli
-
Ograniczenie zależności nielogicznych – W tabelach nie występują zależności, które byłyby niepotrzebne lub trudne do uzasadnienia.
- Na przykład, tabela
bliscy
przechowuje dane tylko dotyczące bliskich klientów, nie powiela informacji o samych klientach.
- Na przykład, tabela
-
Podział danych na logiczne grupy – W bazie danych zastosowano odpowiedni podział danych.
- Podział na tabele takie jak
panstwa
,miasta
iadresy
, które przechowują różne dane, zapewniając spójność i unikanie redundancji.
- Podział na tabele takie jak
-
Dodanie danych do tabel: Trudności związane z utworzeniem realistycznych danych i wprowadzeniem ich do tabel.
-
Optymalizacja zapytań SQL: Trudności przy optymalizacji zapytań do bazy danych, zwłaszcza podczas łączenia wielu tabel i agregowania danych.