bardzo prostym sposobem na zrozumienie, czym jest plik bazy danych, jest pomyślenie o nim jako o folderze zawierającym kilka tabel podobnych do Excela. Podobnie jak większe lub korporacyjne bazy danych, możesz łączyć się i uzyskiwać dostęp do danych w bazie danych na wiele sposobów.
Korzystanie z Pythona i pandy
w tym samouczku używam Pythona i niesamowitego modułu pandy, aby połączyć się z bazą danych, zbadać tabele i dane, które przechowuje, a następnie odczytać te dane z odpowiednich tabel.,
powyżej łączymy się z bazą danych i sprawdzamy, jakie są tam tabele. Odkryłem, że w bazie danych znajduje się kilka tabel, w tym jedna o nazwie wiadomość, a inne nazwy czat, uchwyt i załącznik. Zbadajmy tabelę wiadomości, ponieważ to ta, która brzmi najbardziej obiecująco, aby trzymać nasze wiadomości iMessages. Robię to, przenosząc tabelę do ramki danych pandas, typu pliku, który jest znacznie łatwiejszy do zbadania i manipulowania dla projektów data analyis.
# get the 10 entries of the message table using pandas
messages = pd.read_sql_query("select * from message limit 10", conn)
otrzymanie SMS-a i numeru telefonu
trafiliśmy w bingo!, Tablica wiadomości rzeczywiście wydaje się zawierać wszystkie zapisane wiadomości. Posiada pole tekstowe z rzeczywistą wysłaną lub odebraną wiadomością, pole daty (więcej na ten temat poniżej) i identyfikator uchwytu. Po krótkiej eksploracji odkryłem, że handle_id jest kodem dla każdego numeru telefonu lub Apple-id, z którym odbyłeś rozmowę. W celu mapowania handle_id z powrotem do Apple-id możemy użyć tabeli w bazie danych (odpowiednio) o nazwie handle I join na handle_id.
dodanie identyfikatora czatu
podobnie, tabela wiadomości zawiera również identyfikator chat_id, który mapuje każdą wiadomość z powrotem do unikalnego czatu., Może to być przydatne podczas wykonywania analizy na czatach z wieloma osobami w nich. Możemy uzyskać chat_id każdej wiadomości, łącząc tabelę wiadomości z (ponownie odpowiednio nazwaną) tabelą chat_message_join na message_id.
uzyskanie daty
tabela wiadomości zawiera również kolumnę daty i było to trochę trudne dla mnie do dekodowania, ponieważ nie jest dokładnie w żadnym formacie, który jest szeroko stosowany w branży. Co więcej, sposób zapisu tej kolumny jest nieco inny w nowszej wersji systemu Mac OS X w porównaniu ze starszymi.,
w wersji systemu Mac OS X przed High Sierra (która jest wersją 10.13 i wydana we wrześniu 2017), kolumna daty jest typem epoki, ale w przeciwieństwie do standardu liczenia sekund od 1970-01-01, liczy sekundy od 2001-01-01., Aby przekonwertować ten typ na pole danych, możemy użyć polecenia podczas odpytywania tabeli komunikatów, aby utworzyć nowe pole (nazwiemy je date_utc, ponieważ w wyniku tego podano datę strefy czasowej UTC) na podstawie pola date.
W Mac OS X High Sierra i nowszych jest to samo, ale format daty jest teraz znacznie bardziej ziarnisty: jest w nano-drugim poziomie. Więc teraz musimy podzielić przez 1,000,000,000
zanim zastosujemy ten sam fragment kodu, który zastosowaliśmy powyżej.,
składając wszystko razem
Możesz znaleźć notebook tutaj z całym kodem, aby wyodrębnić swoje iMessages z laptopa i rozpocząć analizę!
powinno to zająć tylko kilka minut, a na koniec powinieneś mieć podstawową historię swoich danych iMessage, która zawiera numer telefonu (lub e-mail), tekst, unikalny Czat dla każdej unikalnej grupy osób, z którymi rozmawiałeś na czacie i znacznik czasu (w strefie czasowej UTC) każdej wysłanej wiadomości.
w bazie danych można znaleźć więcej danych, takich jak szczegóły, czy wiadomość została dostarczona i odczytana, a także załączniki., Nie dotykam tych atrybutów na tym poście.