13.01.2019
Michał Olechno Waldemar Kołodziejczyk
Techniki Analizy Sieci Społecznych
Temat nr 18, wariant 1
“Oceń, czy istnieją związki pomiędzy członkostwem państw w sojuszach a typem posiadanego przez nie uzbrojenia.”
https://github.com/KolodziejczykWaldemar/Tanks_Alliances
Technologie w aplikacji Tanks and Alliances Tool
Program został napisany w języku Python 3.6. Aplikacja przechowuje zebrane dane w bazie danych SQLite. Poniższa tabela prezentuje wykorzystane biblioteki:
Biblioteka Wersja Przeznaczenie
beautifulsoup4 4.6.3 pobieranie kodu HTML, web scraping, parsowanie HTML requests 2.20.1
urllib3 1.24.1
pandas 0.23.4 przetwarzanie danych, obróbka i prezentacja grafów
numpy 1.15.4
networkx 2.2
scipy 1.2.0
seaborn 0.9.0 wizualizacja wyników matplotlib 3.0.2
PyQt5 5.11.3 GUI aplikacji
SQLAlchemy 1.2.15 framework ORM do komunikacji z bazą danych SQLite
Pozyskanie danych (web scrapping)
Informacje o krajach posiadających czołgi pozyskano ze strony
https://en.wikipedia.org/wiki/List_of_main_battle_tanks_by_country?fbclid=IwAR25WN7hHlJ BlW95dXEGYNKhzYlKwef7MNpJwQVkW1FVJFfjC2EJfVUJzkY na której można było znaleźć listę tabel uszeregowanych alfabetycznie pod względem nazwy kraju posiadającego czołg (nazwany na potrzeby aplikacji ‘owner’). Dla każdego kraju można było znaleźć nazwę czołgu, jego ilość oraz kraj pochodzenia (nazwany na potrzeby aplikacji ‘seller’). Poniżej zrzut ekranu reprezentujący przykładową tabelę:
Jak widać na powyższej grafice, postać tabeli nastręczała wielu trudności przy parsowaniu, przede wszystkim:
- ilość czołgów nie zawsze była liczbą, zdarzały się znaki typu ‘~’, ‘+’, ‘circa’, ‘about’
- typ czołgu nie zawsze był nazywany konsekwentnie np. ‘T-55’ vs ‘T - 55’
- na końcach stringów oznaczających nazwy państw zdarzały się niekontrolowane spacje lub znaki przypisu ‘[x]’
- dla niektórych krajów dane nie były odpowiednio sformatowane np. dla ‘Belgium’ czy
‘Benin’, jak na grafice powyżej
Część danych udało się sformatować, np. usuwanie niekontrolowanych spacji, oznaczeń przypisów. W miejscach, gdzie komórki były scalane, np. przy nazwie państwa,
implementacja odpowiedniego algorytmu obsługującego takie wiersze była szczególnym utrudnieniem. Mimo wszystko, zostało to wykonane.
Pobranie informacji dotyczących sojuszy udało się poprzez ściągnięcie gotowego pliku *.csv z internetu
(http://www.correlatesofwar.org/data-sets/formal-alliances?fbclid=IwAR3-EOhQzjg4-yr5N_na
QrcX6OEu3WhiXn1XeVfY81ued_FT1cL7uECE_cs). Po oględzinach zbioru danych nie stwierdzono żadnych problemów, które taki zbiór mógłby generować w kontekście tworzonej aplikacji.
Struktura bazy danych SQLite:
W fazie projektowania aplikacji zdecydowano, że aby zapewnić przenośność programu użytkownikom oraz zważając na fakt, że baza danych ma za zadanie przechowywać jedynie około 20000 rekordów, najlepszym rozwiązaniem będzie SQLite. Aplikacja do komunikacji z bazą danych wykorzystuje ORM SQLAlchemy, zapewniając w ten sposób wygodę i
optymalizację w pisaniu zapytań.
Poniżej grafika reprezentująca strukturę bazy SQLite oraz zrzut ekranu z SQLite Database Browser:
Scenariusze użycia aplikacji:
1. Wyświetlanie grafów
Użytkownik ma do wyboru graf reprezentujący kupców i sprzedawców czołgów (‘All Tanks’) oraz sojuszników (‘All Alliances’). Dla każdego z wyboru można wyspecyfikować rozmiar rdzenia grafu. W przypadku, gdy pole nie jest uzupełnione, aplikacji domyślnie wyświetli cały graf.
Użytkownik może wybrać z listy typ grafu do wygenerowania:
- połączeń pomiędzy kupcami i sprzedawcami czołgów (np. dla rdzenia o wielkości 3)
- sojuszy między krajami w zależności od roku rozpoczęcia współpracy krajów (np. od roku 1950 oraz dla rdzenia wielkości 30)
2. Analiza dla wybranego kraju:
Po wpisaniu kraju (np. ‘Poland’) aplikacja generuje interaktywne wykresy w zależności od wyboru użytkownika w checkboxach.
Użytkownik ma możliwość zapisu wykresu na swój komputer. Są to wykresy przedstawiające:
- ilość czołgów posiadanych przez dany kraj
- ilość wszystkich czołgów, które posiadają sojusznicy
- ilość wszystkich czołgów posiadanych przez kraje, które sprzedawały wybranemu krajowi pojazdy
3. Wykresy dotyczące posiadaczy wybranego typu czołgu
Użytkownik wybiera z listy czołgów jeden, dla którego aplikacja wyświetli wszystkie kraje, które posiadają wybrany model oraz ich ilość.
Po naciśnięciu przycisku ‘Draw the tank’, użytkownik zobaczy poniższy wykres: