[PYTHON] Division de la trame de données ⇒ Application de la fonction

Considérez comment diviser la trame de données au milieu du calcul et appliquer la fonction à chacune des trames de données divisées. Notez qu'il semble être utilisé fréquemment.

1. Après avoir divisé data.frame avec purrr, appliquez la fonction à chaque data.frame

Un exemple de ici. Groupe de vtt avec cyl ⇒Appliquer une analyse de régression à chaque data.frame divisé ⇒ Publiez un résumé de chaque résultat. ⇒ Émettez chaque R2. Le flux.

library(purrr)
mtcars %>%
  split(.$cyl) %>% # from base R
  map(~ lm(mpg ~ wt, data = .)) %>%
  map(summary) %>%
  map_dbl("r.squared")

#>         4         6         8 
#> 0.5086326 0.4645102 0.4229655

Concis!

2. Après avoir fractionné le dataframe, appliquez à chaque dataframen (python)

Si vous faites la même chose avec python. En se référant à la réponse ici.

import pandas as pd
data = pd.read_csv('https://gist.githubusercontent.com/ZeccaLehn/4e06d2575eb9589dbe8c365d61cb056c/raw/64f1660f38ef523b2a1a13be77b002b98665cdfe/mtcars.csv')
data.rename(columns={'Unnamed: 0':'brand'}, inplace=True)   

d = dict(tuple(data.groupby(["cyl"])))
print(d)

        brand   mpg  cyl   disp   hp  ...   qsec  vs  am  gear  carb
2       Datsun 710  22.8    4  108.0   93  ...  18.61   1   1     4     1
7        Merc 240D  24.4    4  146.7   62  ...  20.00   1   0     4     2
8         Merc 230  22.8    4  140.8   95  ...  22.90   1   0     4     2
17        Fiat 128  32.4    4   78.7   66  ...  19.47   1   1     4     1
18     Honda Civic  30.4    4   75.7   52  ...  18.52   1   1     4     2
19  Toyota Corolla  33.9    4   71.1   65  ...  19.90   1   1     4     1
20   Toyota Corona  21.5    4  120.1   97  ...  20.01   1   0     3     1
25       Fiat X1-9  27.3    4   79.0   66  ...  18.90   1   1     4     1
26   Porsche 914-2  26.0    4  120.3   91  ...  16.70   0   1     5     2
27    Lotus Europa  30.4    4   95.1  113  ...  16.90   1   1     5     2
31      Volvo 142E  21.4    4  121.0  109  ...  18.60   1   1     4     2
[11 rows x 12 columns]

         brand   mpg  cyl   disp   hp  ...   qsec  vs  am  gear  carb
0        Mazda RX4  21.0    6  160.0  110  ...  16.46   0   1     4     4
1    Mazda RX4 Wag  21.0    6  160.0  110  ...  17.02   0   1     4     4
3   Hornet 4 Drive  21.4    6  258.0  110  ...  19.44   1   0     3     1
5          Valiant  18.1    6  225.0  105  ...  20.22   1   0     3     1
9         Merc 280  19.2    6  167.6  123  ...  18.30   1   0     4     4
10       Merc 280C  17.8    6  167.6  123  ...  18.90   1   0     4     4
29    Ferrari Dino  19.7    6  145.0  175  ...  15.50   0   1     5     6
[7 rows x 12 columns]

              brand   mpg  cyl   disp   hp  ...   qsec  vs  am  gear  carb
4     Hornet Sportabout  18.7    8  360.0  175  ...  17.02   0   0     3     2
6            Duster 360  14.3    8  360.0  245  ...  15.84   0   0     3     4
11           Merc 450SE  16.4    8  275.8  180  ...  17.40   0   0     3     3
12           Merc 450SL  17.3    8  275.8  180  ...  17.60   0   0     3     3
13          Merc 450SLC  15.2    8  275.8  180  ...  18.00   0   0     3     3
14   Cadillac Fleetwood  10.4    8  472.0  205  ...  17.98   0   0     3     4
15  Lincoln Continental  10.4    8  460.0  215  ...  17.82   0   0     3     4
16    Chrysler Imperial  14.7    8  440.0  230  ...  17.42   0   0     3     4
21     Dodge Challenger  15.5    8  318.0  150  ...  16.87   0   0     3     2
22          AMC Javelin  15.2    8  304.0  150  ...  17.30   0   0     3     2
23           Camaro Z28  13.3    8  350.0  245  ...  15.41   0   0     3     4
24     Pontiac Firebird  19.2    8  400.0  175  ...  17.05   0   0     3     2
28        Ford Pantera L  15.8    8  351.0  264  ...  14.50   0   1     5     4
30        Maserati Bora  15.0    8  301.0  335  ...  14.60   0   1     5     8
[14 rows x 12 columns]

Il a été confirmé que la clé est devenue la valeur unique de cyl avant la division, elle est devenue la trame de données après le regroupement, et la trame de données a été divisée et placée avec succès dans le dictionnaire, donc tout en tournant avec la clé, appliquez la fonction (lm) à chaque trame de données Application. ⇒ Stocker le résultat dans un dictionnaire (résumé). Le flux.

import statsmodels.api as sm
def lm(y_train,X_train):

Créer un modèle de régression

    model = sm.OLS(y_train, sm.add_constant(X_train))
    result = model.fit() 
    return(result)

d = dict(tuple(data.groupby(["cyl"])))
summary = {}
for key in d:
    y_train = d[key]["mpg"]
    X_train = d[key]["wt"]
    summary[key] = lm(y_train,X_train)
    print("#cyl{}:{}".format(key,summary[key].rsquared))

#cyl4:0.5086325963231395
#cyl6:0.4645101505505491
#cyl8:0.42296553649611224

L'un ou l'autre est relativement facile à faire. Avec la carte de purrr, même l'application d'une analyse de régression peut être très simple, donc j'ai pensé que R était un meilleur code cette fois. le ronronnement est profond.

Recommended Posts

Division de la trame de données ⇒ Application de la fonction
Appliquer la fonction d'influence à la régression logistique
Comment diviser et enregistrer un DataFrame