J'ai une série Pandas, qui doit être transformée en journal pour être distribuée normalement. Mais je ne peux pas encore enregistrer la transformation, car il existe des valeurs = 0 et des valeurs inférieures à 1 (0-4000 ). Par conséquent, je veux d'abord normaliser la série. J'ai entendu parler de StandardScaler (scikit-learn), de la standardisation du score Z et de la mise à l'échelle Min-Max (normalisation). Je veux regrouper les données plus tard, quelle serait la meilleure méthode? StandardScaler et la normalisation du score Z utilise la moyenne, la variance, etc. Puis-je les utiliser sur des données "pas encore distribuées normalement"?
Si vos données sont dans la plage (-1; +1) (en supposant que vous avez perdu le moins dans votre question) alors la transformation du journal n'est probablement pas ce dont vous avez besoin. Au moins d'un point de vue théorique, c'est évidemment la mauvaise chose à faire.
Peut-être que vos données ont déjà été prétraitées (de manière inadéquate)? Pouvez-vous obtenir les données brutes? Pourquoi pensez-vous que la transformation du journal vous aidera?
Si vous ne vous souciez pas de la chose significative à faire, vous pouvez appeler log1p
, Qui est le même que log(1+x)
et qui fonctionnera donc sur (-1; ∞).
Pour transformer en logarithmes, vous avez besoin de valeurs positives, donc traduisez votre plage de valeurs (-1,1] en normalisé (0,1) comme suit
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.uniform(-1,1,(10,1)))
df['norm'] = (1+df[0])/2 # (-1,1] -> (0,1]
df['lognorm'] = np.log(df['norm'])
se traduit par une trame de données comme
0 norm lognorm
0 0.360660 0.680330 -0.385177
1 0.973724 0.986862 -0.013225
2 0.329130 0.664565 -0.408622
3 0.604727 0.802364 -0.220193
4 0.416732 0.708366 -0.344795
5 0.085439 0.542719 -0.611163
6 -0.964246 0.017877 -4.024232
7 0.738281 0.869141 -0.140250
8 0.558220 0.779110 -0.249603
9 0.485144 0.742572 -0.297636