un moyen très simple de comprendre ce qu’est un fichier de base de données est de penser à un dossier qui contient un tas de tableaux de type excel. Tout comme les bases de données plus grandes ou de niveau entreprise, vous pouvez vous connecter et accéder aux données de la base de données de différentes manières.
utilisation de Python et pandas
dans ce tutoriel, J’utilise Python et le module amazing pandas pour me connecter à la base de données, explorer les tables et les données qu’elle contient, puis lire ces données à partir des tables appropriées.,
ci-dessus, nous nous connectons à la base de données et explorons les tables qui s’y trouvent. J’ai trouvé qu’il y a quelques tables dans la base de données, y compris un message appelé et d’autres noms chat, poignée et pièce jointe. Explorons le tableau des messages car c’est celui qui semble le plus prometteur pour contenir nos iMessages. Je le fais en transférant la table dans un cadre de données pandas, un type de fichier beaucoup plus facile à explorer et à manipuler pour les projets d’analyse de données.
# get the 10 entries of the message table using pandas
messages = pd.read_sql_query("select * from message limit 10", conn)
obtenir le texte du message et le numéro de téléphone
Nous avons frappé bingo!, La table des messages semble en effet contenir tous les iMessages enregistrés. Il a un champ de texte avec le message envoyé ou reçu réel, un champ de date (plus à ce sujet ci-dessous) et un identifiant de poignée. Après une petite exploration, j’ai trouvé que handle_id est un code pour chaque numéro de téléphone ou identifiant Apple avec lequel vous avez eu une conversation. Afin de mapper le handle_id à L’Apple-id, nous pouvons utiliser une table dans la base de données (de manière appropriée) nommée handle et join on handle_id.
ajout d’un ID de chat
de même, la table des messages inclut également un chat_id qui mappe chaque message à un chat unique., Cela peut être utile lorsque vous effectuez une analyse sur des discussions avec plusieurs personnes. Nous pouvons obtenir le chat_id de chaque message en joignant la table message avec la table chat_message_join (encore une fois, nommée de manière appropriée) sur message_id.
obtenir la date
Le tableau des messages comprend également une colonne de date et c’était un peu difficile à décoder pour moi car ce n’est pas exactement dans n’importe quel format qui est largement utilisé dans l’industrie. De plus, la façon dont cette colonne est enregistrée est un peu différente dans la version plus récente de Mac OS X par rapport aux anciennes.,
crédit à cette page stackoverflow qui m’a aidé à comprendre cela.
dans les versions Mac OS X antérieures à High Sierra (qui est la version 10.13 et publiée en septembre 2017), la colonne date est un type epoch mais, contrairement à la norme de comptage des secondes de 1970-01-01, elle compte les secondes de 2001-01-01., Afin de convertir ce type en un champ de données que nous pouvons réellement comprendre, nous pouvons utiliser une commande lors de l’interrogation de la table de messages pour créer un nouveau champ (nous l’appellerons date_utc, car il donne une date de fuseau horaire UTC en conséquence) basé sur le champ de date.
sous Mac OS X High Sierra et au-dessus, c’est la même chose mais le format de date est maintenant beaucoup plus granulaire: Il est au niveau nano-second. Alors maintenant, nous devons diviser par 1,000,000,000
avant d’appliquer le même extrait de code que nous avons appliqué ci-dessus.,
tout mettre ensemble
Vous pouvez trouver le bloc-notes ici avec tout le code afin que vous puissiez extraire vos iMessages de votre ordinateur portable et commencer à analyser!
cela ne devrait prendre que quelques minutes et à la fin, vous devriez avoir un historique de base de vos données iMessage qui comprend le numéro de téléphone (ou e-mail), le texte, un chat unique pour chaque groupe unique de personnes avec lesquelles vous avez discuté et l’horodatage (en fuseau horaire UTC) de chaque message envoyé.
Vous pouvez effectivement trouver plus de données dans la base de données telles que les détails si le message a été livré et Lu ainsi que les pièces jointes., Je ne touche pas à ces attributs sur ce post.