The Personal Analytics of My Life: Mein Mailverkehr
Inspiriert von Stephen Wolframs Blogbeitrag The Personal Analytics of My Life habe ich auch mal versucht, meinen Mailverkehr entsprechend darzustellen. Dazu verwende ich ein Python-Script, welches meine Thunderbird-Mailordner durchforstet, und GNU R, um die Graphiken zu plotten.
R installiert ihr per:
sudo apt-get install r-recommended
Python-Script
Meine Mailkonten sind IMAP-Konten, und diese verwalte ich mit Thunderbird. Ich habe ein Python-Script geschrieben, welches mir für jede Mail das Datum und die Uhrzeit herausfischt. So sieht es aus:
#!/usr/bin/python
#------------------------------------------------------------------------------------------
#----- Ich mache ne Faxe wie hier:
#----- http://blog.stephenwolfram.com/2012/03/the-personal-analytics-of-my-life/
#------------------------------------------------------------------------------------------
import sys
import time
import datetime
from mailbox import mbox as MBox
from email.utils import parsedate
#---------------------------------
mailboxname = sys.argv[1] # z.B.("~/.thunderbird/foobar.default/ImapMail/imap.foo.bar/INBOX")
myfilename = sys.argv[2] # Anhaengsel fuer Dateinamen
mbox = MBox(mailboxname)
ZIEL = ("MyMail-%s.txt") % (myfilename)
SCHREIB = open(ZIEL,"w")
#-----------------------------------
for msg in mbox:
try: # bei mir sind manche Mails kaputt, darum vorher testen...
maildate = time.strftime('%Y%m%d', parsedate(msg.get("date")))
mailtime = time.strftime('%H%M%S', parsedate(msg.get("date")))
print maildate, ",", mailtime
except:
SCHREIB.write(str('NA,NA\n')) # wenn kaputt, erzeuge NAs (missing values) fuer GNU_R
else:
SCHREIB.write(str("%s,%s\n") % (maildate, mailtime))
SCHREIB.close()
## END OF FILE
(für alle, bei denen der Quellcode nicht optimal dargestellt wird, gibt es alle Zeilen und Befehle in diesem Gist)
Dieses Script speichere ich unter dem Namen mailscanner.py
an einen beliebigen Ort, und mache es ausführbar. Aufgerufen wird das Script in einem Terminal mit folgender Notation:
/Pfad/zu/mailscanner.py MAILBOX LABEL
Hierbei muss MAILBOX
durch den Pfad zur Thunderbird-Datei der gewünschten Box (siehe weiter unten), und LABEL
durch einen Dateinamenszustz ersetzt werden. Aber dazu später mehr…
Thunderbird Maildatei
In einem Terminal wechsel ich in mein Thunderbird-IMAP-Verzeichnis:
cd ~/thunderbird/PROFILNAME.default/ImapMail/imap.produnis.de
Hier interessiert mich die Datei “INBOX
” (ohne Suffix!). Ich rufe nun mein Python-Script auf:
/Pfad/zu/mailscanner.py INBOX inbox
Dies erzeugt mir im selben Verzeichnis eine Textdatei mit dem Namen MyMail-inbox.txt
. In dieser Datei wurden Datum und Uhrzeit aller Mails, die sich in INBOX
befinden, übertragen, zB:
20120425 , 1445
Über diese Texttabelle kommt das Statistikprogramm R
an unsere Maildaten.
Diesen Vorgang könnt ihr nun für alle IMAP-Ordner (z.B. Gesendet, Arbeit, Privat, oder was ihr halt so für Ordner habt) wiederholen.
R
Ihr startet R
über ein Terminal, indem ihr dort “R” eingebt:
R
Jetzt werden die Texttabellen wie folgt in R eingelesen:
inbox <- read.table("/Pfad/zu/MyMail-inbox.txt", sep=",", colClasses = "character") # Tabelle einlesen
colnames(inbox) <- c("Datum","Uhrzeit") # Tabellenspalten benennen
inbox$Datum <- strptime(inbox$Datum,format="%Y%m%d") # Daten in DATUM
inbox$Uhrzeit <- strptime(inbox$Uhrzeit, format="%H%M%S") # Daten in UHRZEIT
plot(inbox$Datum, inbox$Uhrzeit) # Daten grafisch anzeigen
Weitere Mailordner könnt ihr wie folgt in das bestehende Plotfenster integrieren:
test <- read.table("/Pfad/zu/MyMail-outbox.txt", sep=",", colClasses = "character") # neue Tabelle einlesen
colnames(test) <- c("Datum","Uhrzeit")
test$Datum <- strptime(test$Datum,format="%Y%m%d")
test$Uhrzeit <- strptime(test$Uhrzeit, format="%H%M%S")
points(test$Datum, test$Uhrzeit) # weitere Daten dem Plot hinzufügen
Bei mir sieht das dann zB so aus:
Deutlich zu erkenne ist die “heiße Phase” unseres Forschungsprojekts, und dass es nach dessen Abschluss wieder ruhiger zugeht… ;)
Weiter hab ich noch nicht rumgewurschtelt, aber an sich ist das ne lustige Spielerei für nebenher. Weiterer R-Code und Krams ist herzlich willkommen. Ach, und wer möchte, kann mit meinen Beispieldaten spielen. Hierfür genügt in R der Befehl:
produnis <- read.table("http://www.produnis.de/nagut/GESAMTLISTE.TXT", sep=",", colClasses = "character") # Tabelle aus dem Internet laden
Hier noch ein R-Befehl, der jeweils die Gesamtzahl der Mails aus diesem Datensatz pro Tag anzeigt:
produnis <- read.table("http://www.produnis.de/nagut/GESAMTLISTE.TXT", sep=",") # Tabelle aus dem Internet laden
colnames(produnis) <- c("Datum","Uhrzeit")
produnis <- produnis[-19180,] # Ausreißer entfernen
plot(strptime(levels(as.factor(produnis$Datum)),format="%Y%m%d"),as.vector(table(as.factor(produnis$Datum))),type="l")
…..
Diese und weitere Codeschnipsel stelle ich auf https://gist.github.com/3004221 zusammen. Das Auslesen meiner Kalendertermine habe ich hier beschrieben.