2017-02-24 2 views
1

Je suis en cours d'exécution d'une analyse sur plusieurs grands ensembles de données (au total beaucoup plus grand que ma RAM). Pour faciliter mon travail, je charge les jeux de données en utilisant numpy.memmap (après les avoir enregistrés dans des fichiers .npy individuels générés à partir de jeux de données tomographiques).numpy.memap, Pandas dataframe et Seaborn boxplot Troubles

Après extraction de plusieurs valeurs à partir des ensembles de données que je Collectionnez ces valeurs dans un dataframe Pandas. Les valeurs s'affichent bien lorsque je les regarde (par exemple, via df.head()).

Je voudrais maintenant visualiser les valeurs avec quelque chose comme seaborn.boxplot(data=df, x='Treatment', y='Tumor_Vol', hue='Experiment_Day'), mais je reçois l'erreur qui

ValueError: List of boxplot statistics and `positions` values must have same the length 

Il me semble que cela est dû aux valeurs mappés en mémoire, depuis exactement la même commande fonctionne lorsque je sauvegarde la trame de données dans un fichier CSV et que je la charge à partir du disque (qui est ma solution de contournement actuelle).

Ainsi --- faute de meilleurs mots --- est-il un moyen que je peux les valeurs non MemoryMap et de les enregistrer en tant que valeurs « réelles » à une trame de données?

+0

Vous pouvez simplement appeler 'copy' sur le sous-ensemble des données que vous êtes intéressé à tirer dans la RAM. par exemple. 'Data_subset = memmap_data. [I: j] .copy()' – Elliot

+0

Ne semble pas aider, avec 'plot_copy = df.ix [:, [ 'Tumor_vol', 'Experiment_Day', 'traitement']] copie() 'Je reçois toujours le type' 'pour i dans plot_copy ['Tumor_vol']. – Habi

+0

Si vous incluez un exemple minimum, complet et vérifiable (http://stackoverflow.com/help/mcve), je pourrais être en mesure de pirater quelque chose ensemble. Sinon, il est difficile de reconstituer ce que vous essayez et ce qui ne fonctionne pas. – Elliot

Répondre

0

J'ai été confronté au même genre de bug très bizarre. Cela apparaît seulement sur un cahier de jupyter cependant.

J'ai simple dataframe qui est tracée d'accord avec swarmplot mais pas avec boxplot (sur un ordinateur portable, mais le même code fonctionne sur le terminal). C'est très étrange parce que d'autres données sont tracées avec le même code.

Mon dataframe:

sample color right-left (right-left)/right 
0 OPAR19_r1c3  Blue 1 0.000334448 
1 OPAR19_r1c3  Green 305  0.255444 
2 OPAR19_r1c3  Red  15 0.0205479 
3 OPAR19_r2c6  Blue 82 0.028063 
4 OPAR19_r2c6  Green 260  0.216847 
5 OPAR19_r2c6  Red  14 0.0183246 
6 OPAR19_r1c1  Blue 75 0.0251931 
7 OPAR19_r1c1  Green -13  -0.0143488 
8 OPAR19_r1c1  Red  10 0.0137741 
9 OPAR19_r1c4  Blue -38  -0.0131579 
10 OPAR19_r1c4  Green 117  0.110169 
11 OPAR19_r1c4  Red  0 0 
12 OPAR19_r1c6  Blue 7 0.00239153 
13 OPAR19_r1c6  Green -3 -0.00295858 
14 OPAR19_r1c6  Red  -46  -0.0640669 
15 OPAR19_r2c4  Blue 95 0.0315824 
16 OPAR19_r2c4  Green 191  0.163668 
17 OPAR19_r2c4  Red  36 0.0447761 
18 OPAR19_r2c5  Blue 48 0.0164215 
19 OPAR19_r2c5  Green 165  0.154639 
20 OPAR19_r2c5  Red  -4 -0.00542005 
21 OPAR19_r1c5  Blue 199  0.0655468 
22 OPAR19_r1c5  Green 262  0.223169 
23 OPAR19_r1c5  Red  103  0.141678 
24 OPAR19_r1c2  Blue 102  0.0340681 
25 OPAR19_r1c2  Green 198  0.179837 
26 OPAR19_r1c2  Red  75 0.0955414 
27 OPAR19_r2c1  Blue 221  0.0742857 
28 OPAR19_r2c1  Green 99 0.108791 
29 OPAR19_r2c1  Red  11 0.0147453 
30 OPAR19_r2c2  Blue 159  0.0526664 
31 OPAR19_r2c2  Green 64 0.0724802 
32 OPAR19_r2c2  Red  -21  -0.0276316 
33 OPAR19_r2c3  Blue 16 0.00536733 
34 OPAR19_r2c3  Green 84 0.0769936 
35 OPAR19_r2c3  Red  -49  -0.0639687 

Cette parcelle échoue sur l'ordinateur portable, mais pas sur un fichier python

sns.boxplot(data=df_out2,x='color',y='right-left') 

est ici l'erreur:

ValueError: List of boxplot statistics and `positions` values must have same the length 

Bien que l'intrigue équivalent swarmplot ou stripplot fonctionne bien:

sns.swarmplot(data=df_out2,x='color',y='right-left') 
+0

En fait, je me suis rendu compte que cela n'avait rien à voir avec le fait de courir sur le portable ou sur le terminal. Je viens de lancer ceci sur le terminal en chargeant les données d'un fichier csv. Donc, si mon dataframe est enregistré dans un fichier csv puis rechargé, l'erreur n'apparaît pas. Donc, cela signifie que cela est lié à la base de données, mais je ne sais pas ce qui ne va pas – Arthur

+0

Même problème ici. Des solutions? – Estilus