een zeer eenvoudige manier om te begrijpen wat een databasebestand is, is te denken dat het een map is die een aantal Excel-achtige tabellen bevat. Net als Grotere of enterprise-grade databases kunt u verbinding maken en toegang tot de gegevens in de database op verschillende manieren.
met behulp van Python en panda ‘s
In deze tutorial gebruik ik Python en de verbazingwekkende panda’ s module om verbinding te maken met de database, de tabellen en gegevens te verkennen die het bevat en dan die gegevens uit de juiste tabellen te lezen.,
hierboven maken we verbinding met de database en onderzoeken welke tabellen er in zitten. Ik vond dat er een paar tabellen in de database, waaronder een genaamd bericht en anderen namen chat, handvat en bijlage. Laten we de message table verkennen, want dat is degene die het meest veelbelovend klinkt om onze iMessages te houden. Ik doe dat door het overbrengen van de tabel in een panda dataframe, een type bestand dat is veel gemakkelijker te verkennen en te manipuleren voor data analyis projecten.
# get the 10 entries of the message table using pandas
messages = pd.read_sql_query("select * from message limit 10", conn)
het ophalen van de tekst van het bericht en het telefoonnummer
we raken bingo!, De berichtentabel lijkt inderdaad alle opgeslagen iMessages te bevatten. Het heeft een tekstveld met de werkelijke verzonden of ontvangen bericht, een datum veld (meer over dat hieronder) en een handle id. Na een beetje verkenning vond ik dat de handle_id is een code voor elk telefoonnummer of Apple-id dat u een gesprek met hebben gehad. Om de handle_id terug te brengen naar de Apple-id kunnen we een tabel gebruiken in de database (toepasselijk) genaamd handle en join on handle_id.
het toevoegen van een chat-id
evenzo bevat de berichtentabel ook een chat_id die elk bericht weer toewijst aan unieke chat., Dit kan handig zijn bij het doen van analyse op chats met meerdere mensen in hen. We kunnen de chat_id van elk bericht krijgen door de message table aan te sluiten met de chat_message_join table op message_id.
het ophalen van de datum
De berichtentabel bevat ook een datumkolom en dit was een beetje lastig voor mij om te decoderen omdat het niet precies in een formaat is dat veel wordt gebruikt in de industrie. Bovendien is de manier waarop deze kolom wordt opgenomen een beetje anders in de nieuwere versie van Mac OS X in vergelijking met oudere.,
Credit naar deze stackoverflow pagina die me hielp dit uit te zoeken.
in Mac OS X-versies voor High Sierra (versie 10.13 en uitgebracht in September 2017), is de datumkolom een epoch-type, maar in tegenstelling tot de standaard van het tellen van de seconden van 1970-01-01, telt het de seconden van 2001-01-01., Om dat type om te zetten in een gegevensveld dat we kunnen begrijpen, kunnen we een commando gebruiken tijdens het opvragen van de berichtentabel om een nieuw veld aan te maken (we noemen het date_utc, omdat het een UTC tijdzone datum geeft als resultaat) gebaseerd op het datumveld.
in Mac OS X High Sierra en hoger is het hetzelfde, maar het datumformaat is nu veel gedetailleerder: het is op nano-tweede niveau. Dus nu moeten we delen door 1,000,000,000
voordat we hetzelfde codefragment toepassen dat we hierboven hebben toegepast.,
alles samenvoegen
u kunt de notebook hier vinden met alle code zodat u uw iMessages uit uw laptop kunt halen en kunt beginnen met analyseren!
het duurt slechts een paar minuten en aan het einde ervan moet u een basisgeschiedenis van uw iMessage-gegevens hebben die het telefoonnummer (of e-mail), de tekst, een unieke chat voor elke unieke groep mensen waarmee u een chat hebt gehad en de tijdstempel (in UTC-tijdzone) van elk verzonden bericht bevat.
u kunt meer gegevens in de database vinden, zoals details als het bericht werd afgeleverd en gelezen, evenals bijlagen., Ik ben niet aan te raken op die attributen op deze post.