J'essaie de représenter graphiquement le nombre d'actions par les utilisateurs (dans ce cas, "j'aime") au fil du temps.
J'ai donc "Nombre d'actions" comme mon axe y, mon axe x est le temps (semaines), et chaque ligne représente un utilisateur.
Mon problème est que je veux regarder ces données pour un ensemble d'environ 100 utilisateurs. Un graphique linéaire devient rapidement un gâchis avec 100 lignes. Existe-t-il un meilleur type de graphique que je peux utiliser pour afficher ces informations? Ou devrais-je envisager de pouvoir activer / désactiver des lignes individuelles?
J'aimerais voir toutes les données à la fois, mais être capable de discerner le nombre d'actions avec une grande précision n'est pas très important.
Pourquoi je fais ça
Pour un sous-ensemble de mes utilisateurs (les meilleurs utilisateurs), je veux savoir lesquels n'ont peut-être pas aimé une nouvelle version de l'application qui a été déployée à une certaine date. Je recherche une baisse significative du nombre d'actions des utilisateurs individuels.
la source
facet_wrap
fonction de ggplot2 pour créer un bloc de 4 x 5 graphiques (4 lignes, 5 colonnes - ajuster en fonction du rapport hauteur / largeur souhaité) avec ~ 5 utilisateurs par graphique. Cela devrait être assez clair et vous pouvez le faire évoluer jusqu'à environ 10 utilisateurs par graphique, ce qui donne de la place pour 200 avec un tracé 4x5 ou 360 avec un tracé 6x6.Réponses:
Je voudrais suggérer une analyse préliminaire (standard) pour éliminer les principaux effets de (a) la variation parmi les utilisateurs, (b) la réponse typique parmi tous les utilisateurs au changement, et (c) la variation typique d'une période à l'autre .
Une façon simple (mais nullement la meilleure) de procéder consiste à effectuer quelques itérations de "polissage médian" sur les données pour balayer les médianes des utilisateurs et les médianes des périodes, puis lisser les résidus au fil du temps. Identifiez les lissés qui changent beaucoup: ce sont les utilisateurs que vous souhaitez mettre en valeur dans le graphique.
Parce que ce sont des données de comptage, c'est une bonne idée de les ré-exprimer en utilisant une racine carrée.
À titre d'exemple de ce qui peut en résulter, voici un ensemble de données simulé sur 60 semaines de 240 utilisateurs qui entreprennent généralement 10 à 20 actions par semaine. Un changement dans tous les utilisateurs s'est produit après la semaine 40. Trois d'entre eux ont été «invités» à répondre négativement au changement. Le graphique de gauche montre les données brutes: nombre d'actions par utilisateur (avec des utilisateurs distingués par leur couleur) dans le temps. Comme l'affirme la question, c'est un gâchis. Le graphique de droite montre les résultats de cet EDA - dans les mêmes couleurs qu'avant - avec les utilisateurs inhabituellement réactifs automatiquement identifiés et mis en évidence. L'identification - bien qu'elle soit quelque peu ponctuelle - est complète et correcte (dans cet exemple).
Voici le
R
code qui a produit ces données et effectué l'analyse. Il pourrait être amélioré de plusieurs manières, notammentUtiliser un polish médian complet pour trouver les résidus, plutôt qu'une seule itération.
Lissage des résidus séparément avant et après le point de changement.
Peut-être en utilisant un algorithme de détection des valeurs aberrantes plus sophistiqué. L'actuel marque simplement tous les utilisateurs dont la plage de résidus est plus de deux fois la plage médiane. Bien que simple, il est robuste et semble bien fonctionner. (Une valeur réglable par l'utilisateur,
threshold
peut être ajustée pour rendre cette identification plus ou moins stricte.)Les tests suggèrent néanmoins que cette solution fonctionne bien pour un large éventail de comptes d'utilisateurs, de 12 à 240 ou plus.
la source
threshold
n.users <- 500
n.outliers <- 100
threshold <- 2.5
En général, je trouve que plus de deux ou trois lignes sur une seule facette d'une intrigue commencent à être difficiles à lire (même si je le fais toujours tout le temps). C'est donc un exemple intéressant de ce qu'il faut faire lorsque vous avez quelque chose qui pourrait être conceptuellement un tracé à 100 facettes. Une façon possible consiste à dessiner les 100 facettes, mais au lieu d'essayer de les mettre toutes sur la page en même temps, en les regardant une par une dans une animation.
Nous avons en fait utilisé cette technique dans mon travail - nous avons initialement créé l'animation montrant 60 tracés de ligne différents en arrière-plan pour un événement (le lancement d'une nouvelle série de données), puis nous avons constaté que, ce faisant, nous avons en fait repris certaines caractéristiques des données qui n'avait pas été visible dans les tracés à facettes avec 15 ou 30 facettes par page.
Voici donc une autre façon de présenter les données brutes, avant de commencer à supprimer l'utilisateur et les effets de temps typiques, comme recommandé par @whuber. Ceci est présenté comme une alternative supplémentaire à sa présentation des données brutes - je vous recommande vivement de poursuivre ensuite l'analyse selon des lignes telles que celles qu'il suggère.
Une façon de contourner ce problème consiste à produire séparément les graphiques de séries chronologiques de 100 (ou 240 dans l'exemple de @ whuber) et de les assembler en une animation. Le code ci-dessous produira 240 images distinctes de ce type et vous pourrez ensuite utiliser un logiciel de création de films gratuit pour en faire un film. Malheureusement, la seule façon de le faire et de conserver une qualité acceptable était un fichier de 9 Mo, mais si vous n'avez pas besoin de l'envoyer sur Internet, cela ne peut pas être un problème et de toute façon je suis sûr qu'il existe des moyens de contourner cela avec un peu plus avertis en animation. Le package d'animation dans R pourrait être utile ici (vous permet de tout faire dans un appel de R) mais je l'ai gardé simple pour cette illustration.
J'ai fait l'animation de telle sorte qu'elle dessine chaque ligne en noir intense puis laisse une ombre verte semi-transparente pâle derrière pour que l'œil obtienne une image progressive des données accumulées. Il y a à la fois des risques et des opportunités - l'ordre dans lequel les lignes sont ajoutées laissera une impression différente, vous devriez donc envisager de la rendre significative d'une manière ou d'une autre.
Voici quelques photos du film, qui utilise les mêmes données que @whuber a généré:
la source
windows()
ouquartz()
, puis imbriquer votrefor()
boucle à l'intérieur. NB, vous devrez mettre unSys.sleep(1)
au bas de votre boucle afin que vous puissiez réellement voir les itérations. Bien sûr, cette stratégie n'enregistre pas réellement un fichier vidéo - il vous suffit de le réexécuter à chaque fois que vous souhaitez le revoir.L'une des choses les plus faciles à faire est un boxplot. Vous pouvez immédiatement voir comment évoluent les médianes de votre échantillon et quels jours ont le plus de valeurs aberrantes.
Pour une analyse individuelle, je suggère de prélever un petit échantillon aléatoire de vos données et d'analyser des séries chronologiques distinctes.
la source
Sûr. Tout d'abord, triez par nombre moyen d'actions. Faites ensuite (disons) 4 graphiques de 25 lignes chacun, un pour chaque quartile. Cela signifie que vous pouvez réduire les axes y (mais clarifier l'étiquette de l'axe y). Et avec 25 lignes, vous pouvez les faire varier selon le type de ligne et la couleur et peut-être tracer le symbole et obtenir une certaine clarté
Ensuite, empilez les graphiques verticalement avec un seul axe temporel.
Ce serait assez facile dans R ou SAS (du moins si vous avez la version 9 de SAS).
la source
Je trouve que lorsque vous manquez d'options de type de graphique et de paramètres de graphique, l'introduction du temps par le biais de l'animation est la meilleure façon d'afficher, car elle vous donne une dimension supplémentaire pour travailler et vous permet d'afficher plus d'informations de manière facile à suivre. . Votre objectif principal doit être l'expérience utilisateur final.
la source
Si vous êtes le plus intéressé par le changement pour les utilisateurs individuels, c'est peut-être une bonne situation pour une collection de Sparklines (comme cet exemple de The Pudding ):
Ceux-ci sont assez détaillés, mais vous pouvez afficher beaucoup plus de graphiques à la fois en supprimant les étiquettes et les unités des axes.
De nombreux outils de données les ont intégrés ( Microsoft Excel a des graphiques sparkline ), mais je suppose que vous voudriez tirer un package pour les construire dans R.
la source