Comparaison de Python (+ Pandas), R, Julia (+ DataFrames) (résumé du contenu de la table, accès par colonne)

2017/1/3 postscript: DataFrames.jl devrait sortir v.0.9 en février 2017 avec un correctif majeur qui rompt également partiellement la compatibilité de l'API. Veuillez noter que cet article est basé sur la v.0.6.10. S'il vous plaît. Si j'ai le temps et que j'ai envie (hé), je peux le réécrire en conséquence. Cependant, je n'ai pas eu beaucoup de temps pour toucher Julia ces jours-ci ...


Ceci est une suite de l'article Dernière fois. La dernière fois, je me suis retrouvé sans regarder le contenu des données, mais aujourd'hui, j'écrirai sur la simple confirmation du contenu et sur la façon de récupérer des colonnes.

Dans l'exemple d'exécution de code ci-dessous, on suppose que REPL contient les données lues dans le contenu précédent.

Résumé du tableau

Toutes les bibliothèques et tous les langages introduits cette fois ont une fonction appelée "Renvoyer un résumé d'une structure de données simple", alors utilisons-la.

Pandas:

>>> unique_artists.describe()
                 artist_id                           artist_mbid  \
count                 3888                                  3489   
unique                3888                                  3488   
top     AROBQ0B1187FB404F6  2c0be2ba-fa63-430f-afca-7499852158f6   
freq                     1                                     2   

                  track_id            artist_name  
count                 3888                   3888  
unique                3888                   3875  
top     TRAPGXH128F426D205  Bill & Gloria Gaither  
freq                     1                      3  
>>> artist_term.describe()
                 artist_id   term
count                97493  97493
unique                3885   3502
top     ARLYKKT11F4C83B350   rock
freq                    91   2346

DataFrames.jl:

julia> DataFrames.describe(unique_artists)
artist_id
Length  3888
Type    UTF8String
NAs     0
NA%     0.0%
Unique  3888

artist_mbid
Length  3888
Type    UTF8String
NAs     399
NA%     10.26%
Unique  3489

track_id
Length  3888
Type    UTF8String
NAs     0
NA%     0.0%
Unique  3888

artist_name
Length  3888
Type    UTF8String
NAs     0
NA%     0.0%
Unique  3875

Julia> DataFrames.describe(artist_term)
artist_id
Length  97493
Type    Nullable{UTF8String}
NAs     0
NA%     0.0%
Unique  3885

term
Length  97493
Type    Nullable{UTF8String}
NAs     0
NA%     0.0%
Unique  3502

R:

> summary(unique_artists)
              artist_id                                  artist_mbid  
 AR009211187B989185:   1                                       : 399  
 AR00A6H1187FB5402A:   1   2c0be2ba-fa63-430f-afca-7499852158f6:   2  
 AR00LNI1187FB444A5:   1   001a1d90-56dc-4992-bd7d-970ecd7105d0:   1  
 AR00MBZ1187B9B5DB1:   1   001e4a87-fc46-4d66-ba37-e9714e0fe58a:   1  
 AR01IP11187B9AF5D2:   1   0039c7ae-e1a7-4a7d-9b49-0cbc716821a6:   1  
 AR01VU31187B997DA0:   1   0039cd9c-ea95-4553-86c4-4f729984cc2f:   1  
 (Other)           :3882   (Other)                             :3483  
               track_id                          artist_name  
 TRAAAFD128F92F423A:   1   Bill & Gloria Gaither       :   3  
 TRAAARJ128F9320760:   1   2-Gether feat. Sarinah      :   2  
 TRAABCL128F4286650:   1   Abbott & Chambers           :   2  
 TRAABJL12903CDCF1A:   1   Art Ensemble Of Chicago     :   2  
 TRAABRB128F9306DD5:   1   Billy Price_ Fred Chapellier:   2  
 TRAABVM128F92CA9DC:   1   Eddie Palmieri              :   2  
 (Other)           :3882   (Other)                     :3875  
> summary(artist_term)
  artist_id             term          
 Length:97493       Length:97493      
 Class :character   Class :character  
 Mode  :character   Mode  :character  

C'est bien que Pandas et DataFrames.jl nous donnent des éléments uniques et les valeurs les plus fréquentes. R peut voir certains des principaux cas, mais selon la nature des données, cela peut ne pas être significatif. DataFrames.jl est également bon pour vous donner le ratio de NA. Je pense que les résultats d'affichage sont plus intéressants ou plus reconnaissants pour les données numériques, je vais donc donner un exemple.

>>> pandas.DataFrame({"a":range(1,11)}).describe()
              a
count  10.00000
mean    5.50000
std     3.02765
min     1.00000
25%     3.25000
50%     5.50000
75%     7.75000
max    10.00000
julia> DataFrames.describe(DataFrames.DataFrame(a=1:10))
a
Min      1.0
1st Qu.  3.25
Median   5.5
Mean     5.5
3rd Qu.  7.75
Max      10.0
NAs      0
NA%      0.0%


> summary(seq(10))
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    3.25    5.50    5.50    7.75   10.00 

Accès colonne par colonne

Alors, comment sortir la ligne pour le moment. Retirez la 4ème colonne "nom_artiste" en partant du début de unique_artists.

Pandas renvoie le même résultat pour les deux suivants:

>>> unique_artists.artist_name
0                                       Carroll Thompson
1                                            The Meatmen
2                                           Bruce BecVar
3                                         Memphis Minnie
4                                       Call To Preserve
5                                             Grand Funk
6                                                  3OH!3
7                                                   Ross
8                                         Annie Philippe
9                                            Tito Puente
10                                      Hi-Fi Companions
11                                               Delta 9
12                                    Bersuit Vergarabat
13                                                    BT
14                                         John Williams
15                                        Britney Spears
16                                                Sylver
17                       The Bug Featuring Ricky Ranking
18                                          Alexisonfire
19                                            Yellowcard
20                   The Disposable Heroes Of Hiphoprisy
21                                         Dead Kennedys
22                         Wilks featuring pee wee ellis
23                                       Mike Bloomfield
24                                            Roy Drusky
25                                            Alex Ubago
26                                               D'Molls
27                                               Kassav'
28                                     Ol' Dirty Bastard
29                                          Fudge Tunnel
                              ...                       
3858                      Smokin' Joe Kubek & Bnois King
3859                                       William Orbit
3860                                         Warner mack
3861                                               Biddu
3862                                               Ideal
3863                                     Reginaldo Bessa
3864                                             Rainbow
3865                                       Babylon Disco
3866                                    Mawatari Matsuko
3867                                Widespread Bloodshed
3868                                  Top Of The Poppers
3869                                   Elliot Goldenthal
3870                                    Alexander Zonjic
3871                                          Jim Reeves
3872                                         Mister Ries
3873                                           Martriden
3874                                        Günter Noris
3875                                        Rise Against
3876                                       Henry Mancini
3877                               Jason Michael Carroll
3878                                   Los Ninos De Sara
3879                               Juelz Santana / Bezel
3880                                Vaggelis Perpiniadis
3881                                               Davol
3882                                        John Stevens
3883                                               Taboo
3884                                 Mt. Wilson Repeater
3885    Chapta_ Stage McCloud_ SupaStarr & Tony Manshino
3886                                              Rooney
3887                                       Delroy Wilson
Name: artist_name, dtype: object
>>> unique_artists["artist_name"]
(Abréviation)

DataFrames.jl semble écrire:

unique_artists[:artist_name]

Pour R, cela ressemble à ceci: (* Veuillez noter que si vous frappez facilement avec REPL de R dans l'état par défaut, il faudra pour afficher toutes les données dans la colonne.)

unique_artists$artist_name
unique_artists[, "artist_name"]

Eh bien, y a-t-il quelqu'un qui soit intéressé à avoir "," dans \ [] uniquement pour R? Est dans. Je vais le dire.

J'ai écrit "retirer les colonnes" facilement, mais tout ce qui précède est de savoir comment écrire "retirer les structures de données qui composent les colonnes de la trame de données". Les «structures de données qui composent les colonnes d'une trame de données» sont Series pour Pandas, vector pour R et DataArray pour DataFrames.jl. Notez que ceux-ci sont différents d'une seule ligne de blocs de données. Si vous le faites correctement, si vous pensez que la valeur de retour de la fonction est data.frame, elle deviendra un vecteur et ce sera absurde, alors soyez prudent.

Ce qui suit est le cas pour "récupérer une ligne de trames de données".

Pandas:

unique_artists[["artist_name"]]

DataFrames.jl:

unique_artists[[:artist_name]]

R:

unique_artists["artist_name"]
unique_artists[, "artist_name", drop=F]

C'est plutôt la même chose que l'opération de récupération de plusieurs colonnes, mais dans le cas de R, c'est un piège qui drop est VRAI par défaut.

Lors de l'extraction de plusieurs colonnes, il suffit de faire passer plusieurs éléments du tableau ou de la liste comme nom de colonne à acquérir tel quel, et ce sera comme suit.

Pandas:

unique_artists[["artist_id", "artist_name"]]

DataFrames.jl:

unique_artists[[:artist_id, :artist_name]]

R:

unique_artists[c("artist_id", "artist_name")]
unique_artists[, c("artist_id", "artist_name"), drop=F]

Pour exclure des colonnes spécifiques:

Pandas:

>>> unique_artists.drop(["track_id", "artist_mbid"], axis=1)
               artist_id                                       artist_name
0     AR009211187B989185                                  Carroll Thompson
1     AR00A6H1187FB5402A                                       The Meatmen
2     AR00LNI1187FB444A5                                      Bruce BecVar
3     AR00MBZ1187B9B5DB1                                    Memphis Minnie
4     AR01IP11187B9AF5D2                                  Call To Preserve
5     AR01VU31187B997DA0                                        Grand Funk
6     AR01W2D1187FB5912F                                             3OH!3
7     AR022JO1187B99587B                                              Ross
8     AR02DB61187B9A0B5E                                    Annie Philippe
9     AR02IU11187FB513F2                                       Tito Puente
10    AR02KZG1187FB3B3B4                                  Hi-Fi Companions
11    AR02PUA1187FB52574                                           Delta 9
12    AR02YGA1187B9B8AC4                                Bersuit Vergarabat
13    AR035N21187FB3938E                                                BT
14    AR039B11187B9B30D0                                     John Williams
15    AR03BDP1187FB5B324                                    Britney Spears
16    AR03GWG1187B9B6C85                                            Sylver
17    AR040M31187B98CA41                   The Bug Featuring Ricky Ranking
18    AR040QX1187FB4CFE1                                      Alexisonfire
19    AR048JZ1187B9AEB85                                        Yellowcard
20    AR04KTB1187B99B6B7               The Disposable Heroes Of Hiphoprisy
21    AR050VJ1187B9B13A7                                     Dead Kennedys
22    AR051KA1187B98B2FF                     Wilks featuring pee wee ellis
23    AR0569B1187B9A4036                                   Mike Bloomfield
24    AR059HI1187B9A14D7                                        Roy Drusky
25    AR05IU31187B9B9A1A                                        Alex Ubago
26    AR05KQA1187B9963B3                                           D'Molls
27    AR05NQH1187B98E875                                           Kassav'
28    AR05OJD1187B9B99A6                                 Ol' Dirty Bastard
29    AR05VW21187FB407B4                                      Fudge Tunnel
...                  ...                                               ...
3858  ARZRVFK11F4C83DF46                    Smokin' Joe Kubek & Bnois King
3859  ARZS5VW1187FB567E8                                     William Orbit
3860  ARZSFIJ1187B98B8BC                                       Warner mack
3861  ARZSTXE1187B99DD77                                             Biddu
3862  ARZTGQE1187FB461D9                                             Ideal
3863  ARZTSMH122988F522A                                   Reginaldo Bessa
3864  ARZTSYB1187FB54987                                           Rainbow
3865  ARZU9NI1187B9AEE08                                     Babylon Disco
3866  ARZUVRN1269FB3759D                                  Mawatari Matsuko
3867  ARZUZYU12086C17110                              Widespread Bloodshed
3868  ARZVBBM1241B9CB622                                Top Of The Poppers
3869  ARZVEF91187B9AC770                                 Elliot Goldenthal
3870  ARZVJ641187FB36FA4                                  Alexander Zonjic
3871  ARZVTZN1187FB579D4                                        Jim Reeves
3872  ARZVZRN1241B9C4B14                                       Mister Ries
3873  ARZWAHK119B8668273                                         Martriden
3874  ARZWBH21187B99ACE1                                      Günter Noris
3875  ARZWK2R1187B98F09F                                      Rise Against
3876  ARZWPWP1241B9CA793                                     Henry Mancini
3877  ARZXLZD11E2835CEA7                             Jason Michael Carroll
3878  ARZXMYV1187FB5B99B                                 Los Ninos De Sara
3879  ARZXTEY1187B9997A7                             Juelz Santana / Bezel
3880  ARZXTUO12509411DAE                              Vaggelis Perpiniadis
3881  ARZXVY01187B9972EC                                             Davol
3882  ARZXYRK1187B99E432                                      John Stevens
3883  ARZY28S1187FB40BAB                                             Taboo
3884  ARZYFWI11F4C84225B                               Mt. Wilson Repeater
3885  ARZYP6O1187B9892E7  Chapta_ Stage McCloud_ SupaStarr & Tony Manshino
3886  ARZYPLF1187FB45B9B                                            Rooney
3887  ARZZRK91187B9A5CA5                                     Delroy Wilson

[3888 rows x 2 columns]

Pandas drop est non destructif si vous ne spécifiez pas inplace = True et que la colonne n'est pas supprimée du DataFrame après l'appel de la méthode drop. Il semble que DataFrames.jl et R n'ont pas de fonction qui effectue cette suppression non destructive d'une colonne spécifique. (Il semble que vous puissiez définir vous-même la fonction suivante)

Dans DataFrames.jl, il semble bon de créer un tableau booléen dans lequel seules les colonnes que vous souhaitez conserver sont vraies, en fonction de la notation d'inclusion. cf: http://stackoverflow.com/questions/24665439/julia-dataframe-remove-column-by-name

julia> unique_artists[~[(x in [:artist_mbid, :track_id]) for x in names(unique_artists)]]
3888x2 DataFrames.DataFrame
| Row  | artist_id            |
|------|----------------------|
| 1    | "AR009211187B989185" |
| 2    | "AR00A6H1187FB5402A" |
| 3    | "AR00LNI1187FB444A5" |
| 4    | "AR00MBZ1187B9B5DB1" |
| 5    | "AR01IP11187B9AF5D2" |
| 6    | "AR01VU31187B997DA0" |
| 7    | "AR01W2D1187FB5912F" |
| 8    | "AR022JO1187B99587B" |
⋮
| 3880 | "ARZXTEY1187B9997A7" |
| 3881 | "ARZXTUO12509411DAE" |
| 3882 | "ARZXVY01187B9972EC" |
| 3883 | "ARZXYRK1187B99E432" |
| 3884 | "ARZY28S1187FB40BAB" |
| 3885 | "ARZYFWI11F4C84225B" |
| 3886 | "ARZYP6O1187B9892E7" |
| 3887 | "ARZYPLF1187FB45B9B" |
| 3888 | "ARZZRK91187B9A5CA5" |

| Row  | artist_name                                        |
|------|----------------------------------------------------|
| 1    | "Carroll Thompson"                                 |
| 2    | "The Meatmen"                                      |
| 3    | "Bruce BecVar"                                     |
| 4    | "Memphis Minnie"                                   |
| 5    | "Call To Preserve"                                 |
| 6    | "Grand Funk"                                       |
| 7    | "3OH!3"                                            |
| 8    | "Ross"                                             |
⋮
| 3880 | "Juelz Santana / Bezel"                            |
| 3881 | "Vaggelis Perpiniadis"                             |
| 3882 | "Davol"                                            |
| 3883 | "John Stevens"                                     |
| 3884 | "Taboo"                                            |
| 3885 | "Mt. Wilson Repeater"                              |
| 3886 | "Chapta_ Stage McCloud_ SupaStarr & Tony Manshino" |
| 3887 | "Rooney"                                           |
| 3888 | "Delroy Wilson"                                    |


julia> # destructive

julia> # DataFrames.delete!(unique_artists, [:artist_mbid, :track_id])

L'idée est la même pour R.

> unique_artists[!names(unique_artists) %in% c("artist_mbid", "track_id")]
(Abréviation)
> # destructive
> # unique_artists$artist_mbid <- NULL
> # unique_artists$track_id <- NULL

Je n'ai écrit que sur la façon d'accéder aux colonnes, telles que les tranches, mais cette fois-ci.

environnement:

Recommended Posts

Comparaison de Python (+ Pandas), R, Julia (+ DataFrames) (résumé du contenu de la table, accès par colonne)
[Python] Résumé de la méthode de création de table utilisant DataFrame (pandas)
Comparaison de la gestion des trames de données en Python (pandas), R, Pig
[Python] [Table des matières Liens] Programmation Python
Premiers pas avec python3
Résumé des différences entre Python et PHP (tableau de comparaison des principaux éléments)
[Python] Résumé de l'utilisation des pandas
Lecture à partir de fichiers texte et SQLite avec Python (+ Pandas), R, Julia (+ DataFrames)
[Python] Trier la table par sort_values (pandas DataFrame)
Automatiser des tâches simples avec Python Table des matières
Comparaison d'écriture R et Python (méthode de division mutuelle euclidienne)
[Traitement du langage 100 coups 2020] Résumé des exemples de réponses par Python
Traitement d'image par matrice Basics & Contents-Reinventor of Python image processing-
Résumé des méthodes de prétraitement pour les débutants en Python (trame de données Pandas)
Création de "Web Tools" BINGO avec Python (Table of Contents)
Tableau de comparaison des processus fréquemment utilisés de Python et Clojure
Résumé des arguments Python