Création D'une base de données Pandas entre deux tableaux Numpy, puis tracer un nuage de points
je suis relativement nouveau avec numpy et pandas (je suis un physicien expérimental donc J'utilise ROOT depuis des années...). Un graphe commun à ROOT est un graphe de dispersion 2D où, étant donné une liste de valeurs x et y, fait un graphe de dispersion de type "heatmap" d'une variable par rapport à l'autre.
Comment est-ce le mieux accompli avec numpy et Pandas? Je suis en train d'utiliser le Dataframe.plot()
fonction, mais j'ai du mal à créer la base de données.
import numpy as np
import pandas as pd
x = np.random.randn(1,5)
y = np.sin(x)
df = pd.DataFrame(d)
tout d'abord, cette base de données a une forme (1,2), mais j'aimerais qu'elle ait la forme (5,2).
Si je peux obtenir le dataframe de la bonne forme, je suis sûr que je peux comprendre le DataFrame.plot()
fonction pour dessiner ce que je veux.
3 réponses
il y a plusieurs façons de créer des images de données. Avec des vecteurs de colonnes à une dimension, Vous pouvez créer une base de données en lui passant un dict dont les clés sont des noms de colonnes et dont les valeurs sont les vecteurs de colonnes à une dimension:
import numpy as np
import pandas as pd
x = np.random.randn(5)
y = np.sin(x)
df = pd.DataFrame({'x':x, 'y':y})
df.plot('x', 'y', kind='scatter')
pour faire ce que vous voulez, je n'utiliserais pas les méthodes de traçage du datagramme. Je suis aussi un ancien physicien expérimental, et basé sur l'expérience avec ROOT, je pense que l'analogue Python que vous voulez est le mieux accompli en utilisant matplotlib. Dans matplotlib.il y a une méthode, hist2d(), qui vous donnera le genre de carte de chaleur que vous recherchez.
en ce qui concerne la création de la base de données, une façon facile de le faire est:
df=pd.DataFrame({'x':x, 'y':y})
en Complément, vous pouvez utiliser pandasSérie, mais DataFrame doit avoir été créé.
import numpy as np
import pandas as pd
x = np.linspace(0,2*np.pi)
y = np.sin(x)
#df = pd.DataFrame()
#df['X'] = pd.Series(x)
#df['Y'] = pd.Series(y)
# You can MIX
df = pd.DataFrame({'X':x})
df['Y'] = pd.Series(y)
df.plot('X', 'Y', kind='scatter')
C'est un autre moyen qui pourrait aider
import numpy as np
import pandas as pd
x = np.linspace(0,2*np.pi)
y = np.sin(x)
df = pd.DataFrame(data=np.column_stack((x,y)),columns=['X','Y'])
Et aussi, je trouve les exemples de karlijn (DatacCamp) très utile
import numpy as np
import pandas as pd
TAB = np.array([['' ,'Col1','Col2'],
['Row1' , 1 , 2 ],
['Row2' , 3 , 4 ],
['Row3' , 5 , 6 ]])
dados = TAB[1:,1:]
linhas = TAB[1:,0]
colunas = TAB[0,1:]
DF = pd.DataFrame(
data=dados,
index=linhas,
columns=colunas
)
print('\nDataFrame:', DF)