title: Analyse des données utilisateur d'AOL : suite et fin slug: analyse-des-donnees-utilisateur-d-aol-suite-et-fin date: 2006-08-14 23:42:22 type: post vignette: images/logos/aol_data.png contextual_title1: Réflexions sur les conférences de geeks contextual_url1: 20090327-reflexions-sur-les-conferences-de-geeks contextual_title2: Son propre TinyURL en Python et HTML5 avec webpy contextual_url2: 20090221-son-propre-tinyurl-en-python-et-html5-avec-webpy contextual_title3: Les 100 premiers mots-clés recherchés par les utilisateurs d'AOL contextual_url3: 20060809-les-100-premiers-mots-cles-recherches-par-les-utilisateurs-d-aol
Devant le franc succès remporté par le premier opus, au passage merci NiKo, j'ai décidé de faire des analyses plus poussées. Ça m'a donné l'occasion de faire une vraie classe Python et d'obtenir de beaux graphes grâce à matplotlib.
Elle est vraiment basique mais ça ne l'empêche pas d'être bien documentée donc elle devrait être facile à prendre en main. Voici le lien pour la télécharger.
Attention, la classe charge toutes les données en mémoire (contrairement aux scripts précédents) donc il vaut mieux avoir pas mal de mémoire vive si vous voulez faire vos tests sur l'ensemble des données. Je n'ai actuellement que mon portable pour travailler donc je n'ai considéré pour la suite que les 2 000 000 premières lignes de requêtes.
Il faut bien justifier la catégorie du billet quand même ;-).
from pylab import * Analysis = AOLDataAnalysis() Analysis.load_data('user-ct-test-collection-01-head2000000.txt') satisfaction = [] for i in range(1,11): followed, notfollowed, followed_rank = Analysis.get_satisfaction(keywords_number=i) satisfaction.append(round(followed/float(notfollowed)*100., 2)) plot(range(1,11), satisfaction, 'k', range(1,11), satisfaction, 'bo') ylabel('Indice de satisfaction') xlabel('Nombre de mots-cles') title('Courbe de satisfaction des utilisateurs en fonction du nombre de mots-cles') show()
J'utilise matplotlib qui est packagé sous Ubuntu et probablement pour de nombreuses distribution car cette bibliothèque permet de s'amuser avec le résultat une fois qu'il est généré, je vous laisse tester.
Je pense que la courbe illustre assez bien le résultat ! L'optimum de satisfaction est obtenu pour 4 mots-clés par recherche. En revanche la courbe diminue ensuite ce qui pourrait paraître étonnant mais cela doit correspondre aux personnes mettant des questions complètes dans les requêtes (?). Personnellement en effet je dois rarement dépasser les 5 mots-clés pour mes recherches. Lorsqu'on en arrive à mettre de trop nombreux mots-clés c'est qu'on effectue des recherches sur un sujet bien précis qui n'est pas forcément bien documenté, d'où la baisse de satisfaction.
J'avais commencé à faire des courbes mais je ne suis pas le seul à m'intéresser à ces données donc les principaux profils ont été établis avec humour. Si ça vous intéresse, la classe permet de traiter les exclusions de mots (il y a un exemple dans la doc).
from pylab import * Analysis = AOLDataAnalysis() Analysis.load_data('user-ct-test-collection-01-head2000000.txt') for i in range(4): if i == 0: real_i, i = i, '*' else: real_i = i items, total = Analysis.get_popular_links(rank_filter=i) color_per_site = { 'http://www.google.com' : 'b', 'http://en.wikipedia.org' : 'g', 'http://www.ebay.com' : 'r', 'http://www.myspace.com' : 'c', 'http://www.amazon.com' : 'm', 'http://www.imdb.com' : 'y', 'http://www.yahoo.com' : 'k' } numbers, legends, colors = [], [], [] for item in items[1:11]: numbers.append(item[1]) legends.append(item[0]) try: colors.append(color_per_site[item[0]]) except KeyError: colors.append('w') subplot(str(41)+str(real_i+1)) bar(range(1,11), numbers, color=colors) ylabel('Pour '+str(i)+' mots-cles') legend(legends) show()
C'est vraiment surprenant, je me demande ce que ça donnerait avec l'ensemble des données (d'ailleurs si une âme charitable avec 2Go de ram se manifestait :-)). On constate pour l'ensemble des requêtes que Google arrive vraiment en tête. En même temps c'est le moteur employé donc il faudrait voir ce qu'ils comptabilisent comme étant des sorties vers Google. Viennent ensuite myspace, yahoo et wikipedia ce qui me semble logique. Pas de véritable surprise dans ce top 10 si ce n'est la présence de yahoo mail ?! Est-ce la messagerie par défaut des aoliens ?
Si l'on passe maintenant à la recherche avec un seul mot-clé. Alors si j'ai bien compris, certains utiliseraient le champ de recherche comme un champ d'url. Soit. Donc en fait les sites sortant avec un seul mot-clé sont la plupart du temps des sites ayant été insérés avec une URL complète. Étrangement on ne retrouve plus Google, l'hypothèse précédente est donc en partie vérifiée. Mapquest qui était déjà très populaire se retrouve dans le top 5.
Lorsque l'on passe à deux mots-clés, là je pense qu'on peut véritablement commencer à parler de recherche. Et les résultats sont en accord avec cette hypothèse, les deux premiers sites étant Amazon et Wikipedia. Vient ensuite Yahoo search et là je sais pas trop quoi penser, un moteur de recherche sort rarement des recherches sur d'autres moteurs. Enfin en tout cas pas entre les 3 grands. Étrange...
Le passage à 3 mots-clés confirme la domination d'Amazon, on retrouve ensuite Yahoo mail (encore plus fou !) puis IMDb ce qui est plus logique. Les recherches avancées étant faites pour les livres, la musique et les films. On note l'absence de Wikipédia lors du passage à 3 mots-clés, l'encyclopédie étant surtout utilisée pour un seul mot (normalement).
En conclusion, on peut noter le bon référencement d'Amazon qui arrive à attirer le plus grand nombre de « vrais » chercheurs et la popularité de certains sites que je ne connaissais pas pour ma part. Pas dans les deux premiers graphes mais après oui (d'ailleurs je me demande si c'est pas dû au nombre limité de requêtes que j'ai étudié).
Et voila, le traitement de données c'est intéressant... à condition d'avoir un sujet intéressant à traiter avec. L'étude de cas des utilisateurs d'AOL n'est pas vraiment passionnante mais peut être significative selon la cible à laquelle vous vous adressez. J'espère ne jamais avoir à me préoccuper plus en avant de celle-ci ;-).