Dienstag, August 15, 2006

 

AOL Daten

Nachdem ich schon ein paar Sachen von den AOL-Daten gelesen hatte und die von AOL zurückgezogen wurden, habe ich mir die schnell noch mal von einem Mirror gezogen. Was man hat das hat man. Die Daten lassen sich sehr einfach in eine Mysql-Datenbank einlesen. Dazu muss man einfach die Tabelle anlegen und die Daten direkt per Kommandozeile einladen. Dann noch zwei Indizies drauf und man kann das Teil auswerten - nur für wissenschaftliche Zwecke versteht sich. Für alle die noch ca. 5GB platz haben kommt hier die Schritt-für-Schritt-Anleitung:

Daten von http://www.gregsadetsky.com/aol-data/ in ein beliebiges Verzeichnis runterladen

Tabelle anlegen:

CREATE TABLE data (
AnonID bigint(20) UNSIGNED NOT NULL,
Query varchar(255) NOT NULL,
QueryTime timestamp NOT NULL,
ItemRank SMALLINT UNSIGNED,
ClickURL varchar(255)
) ENGINE=MyISAM

Die Daten in die Tabelle laden, dazu die Dateien aus dem Archiv auspacken und auch entpacken, dann mit dem Kommandozeilen-Client einloggen und die folgenden Statements ausführen:

LOAD DATA LOCAL INFILE 'c:\\Daten\\aol\\user-ct-test-collection-01.txt' INTO TABLE data;
LOAD DATA LOCAL INFILE 'c:\\Daten\\aol\\user-ct-test-collection-02.txt' INTO TABLE data;
LOAD DATA LOCAL INFILE 'c:\\Daten\\aol\\user-ct-test-collection-03.txt' INTO TABLE data;
LOAD DATA LOCAL INFILE 'c:\\Daten\\aol\\user-ct-test-collection-04.txt' INTO TABLE data;
LOAD DATA LOCAL INFILE 'c:\\Daten\\aol\\user-ct-test-collection-05.txt' INTO TABLE data;
LOAD DATA LOCAL INFILE 'c:\\Daten\\aol\\user-ct-test-collection-06.txt' INTO TABLE data;
LOAD DATA LOCAL INFILE 'c:\\Daten\\aol\\user-ct-test-collection-07.txt' INTO TABLE data;
LOAD DATA LOCAL INFILE 'c:\\Daten\\aol\\user-ct-test-collection-08.txt' INTO TABLE data;
LOAD DATA LOCAL INFILE 'c:\\Daten\\aol\\user-ct-test-collection-09.txt' INTO TABLE data;
LOAD DATA LOCAL INFILE 'c:\\Daten\\aol\\user-ct-test-collection-10.txt' INTO TABLE data;

Das dauert je nach Rechner kürzer oder länger. Auf meinem
Windows Rechner brauchte eine Datei so um und bei 25-30 Sekunden zum Einlesen.

Um Abfrage effizient stellen zu können hab ich dann noch zwei Indizies angelegt

CREATE INDEX AnonID_idx on data (AnonID) - dauerte bei mir ca. 30 Minuten

CREATE FULLTEXT INDEX Query_idx on data (Query) - dauerte zweieinhalb Stunden

Eine Abfrage, die man nun recht effizient stellen kann ist eine Suche nach Keywords, deren verwandte Phrasen und die Häufigkeit der Phrasen:

SELECT COUNT(DISTINCT AnonId) as Occurs, query
FROM data
WHERE MATCH(Query) AGAINST ('lenses')
GROUP BY query
ORDER BY Occurs DESC

Doppelte Anfragen für einzelne User werden dabei nicht berücksichtigt, wer das will muss das DISTINCT weglassen. Das Ergebnis der Abfrage sieht dann so aus:

184 contact lenses
12 nikon lenses
11 colored contact lenses
10 canon lenses
8 color contact lenses
7 discount contact lenses
7 camera lenses
7 sigma lenses
7 transition lenses
6 acuvue contact lenses
5 contac lenses
...


Die Abfrage dauert dank des FULLTEXT Indizies auch nur 3 Sekunden.

Bin immer dankbar für weitere Anregungen zu dem Thema.

Comments: Kommentar veröffentlichen



<< Home

This page is powered by Blogger. Isn't yours?