Vergleich von Python (+ Pandas), R, Julia (+ DataFrames) (Zusammenfassung des Tabelleninhalts, Zugriff nach Spalte)

Postskriptum 2017/1/3: DataFrames.jl wird voraussichtlich im Februar 2017 v.0.9 mit einem wichtigen Fix veröffentlichen, der auch die API-Kompatibilität teilweise beeinträchtigt. Bitte beachten Sie, dass dieser Artikel auf v.0.6.10 basiert. Bitte. Wenn ich Zeit habe und Lust dazu habe (hey), kann ich es entsprechend umschreiben. Allerdings hatte ich heutzutage nicht viel Zeit, Julia zu berühren ...


Dies ist eine Fortsetzung des Artikels Letztes Mal. Das letzte Mal habe ich mich nicht mit dem Inhalt der Daten befasst, aber heute werde ich über die einfache Bestätigung des Inhalts und das Abrufen von Spalten schreiben.

Im folgenden Beispiel für die Codeausführung wird davon ausgegangen, dass REPL die im vorherigen Inhalt gelesenen Daten enthält.

Tabellenübersicht

Alle diesmal eingeführten Bibliotheken und Sprachen haben eine Funktion namens "Zusammenfassung einer einfachen Datenstruktur zurückgeben". Verwenden wir sie also.

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  

Es ist schön, dass sowohl Pandas als auch DataFrames.jl uns einzigartige Elemente und die häufigsten Werte geben. R kann einige der Top-Cases sehen, aber je nach Art der Daten ist dies möglicherweise nicht aussagekräftig. DataFrames.jl ist auch gut, um das Verhältnis von NA anzugeben. Ich bin der Meinung, dass die Anzeigeergebnisse für die numerischen Daten interessanter oder dankbarer sind, daher werde ich ein Beispiel geben.

>>> 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 

Spaltenweiser Zugriff

Also, wie man die Leitung vorerst herausnimmt. Nehmen Sie die 4. Spalte "artist_name" heraus, die vom Anfang von unique_artists an zählt.

Pandas gibt das gleiche Ergebnis für die folgenden beiden zurück:

>>> 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"]
(Abkürzung)

DataFrames.jl scheint zu schreiben:

unique_artists[:artist_name]

Für R sieht es so aus: (* Bitte beachten Sie, dass, wenn Sie dies mit REPL von R im Standardzustand leicht treffen, alle Daten in der Spalte angezeigt werden.)

unique_artists$artist_name
unique_artists[, "artist_name"]

Nun, gibt es jemanden, der daran interessiert ist, "," in \ [] nur für R zu haben? Ist in. Ich werde das sagen.

Ich habe leicht "Spalten herausnehmen" geschrieben, aber alles oben Genannte ist, wie man "Datenstrukturen herausnehmen, aus denen die Spalten des Datenrahmens bestehen" schreibt. Die "Datenstrukturen, aus denen die Spalten eines Datenrahmens bestehen" sind "Series for Pandas", "vector for R" und "DataArray" für DataFrames.jl. Beachten Sie, dass sich diese von einer einzelnen Zeile von Datenrahmen unterscheiden. Wenn Sie es richtig machen und denken, dass der Rückgabewert der Funktion data.frame ist, wird es zu einem Vektor und es wird absurd, also seien Sie vorsichtig.

Das Folgende ist der Fall für "Abrufen einer Reihe von Datenrahmen".

Pandas:

unique_artists[["artist_name"]]

DataFrames.jl:

unique_artists[[:artist_name]]

R:

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

Es ist im Grunde dasselbe wie die Operation zum Abrufen mehrerer Spalten, aber im Fall von R ist es eine Falle, bei der drop standardmäßig TRUE ist.

Beim Extrahieren mehrerer Spalten ist es ausreichend, mehrere Elemente des Arrays oder der Liste als Spaltennamen zu übergeben, die so wie sie sind erfasst werden sollen. Dies ist wie folgt.

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]

So schließen Sie bestimmte Spalten aus:

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 ist zerstörungsfrei, wenn Sie nicht inplace = True angeben und die Spalte nach dem Aufrufen der drop-Methode nicht aus dem DataFrame gelöscht wird. Es scheint, dass DataFrames.jl und R keine Funktion haben, mit der eine bestimmte Spalte zerstörungsfrei entfernt wird. (Es scheint, dass Sie die folgende Funktion selbst definieren können)

In DataFrames.jl scheint es gut, ein Bool-Array zu erstellen, in dem abhängig von der Einschlussnotation nur die Spalten wahr sind, die Sie behalten möchten. 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])

Die Idee ist die gleiche für R.

> unique_artists[!names(unique_artists) %in% c("artist_mbid", "track_id")]
(Abkürzung)
> # destructive
> # unique_artists$artist_mbid <- NULL
> # unique_artists$track_id <- NULL

Ich habe nur darüber geschrieben, wie man auf Spalten wie Slices zugreift, aber diesmal.

Umgebung:

Recommended Posts

Vergleich von Python (+ Pandas), R, Julia (+ DataFrames) (Zusammenfassung des Tabelleninhalts, Zugriff nach Spalte)
[Python] Zusammenfassung der Methode zur Tabellenerstellung mit DataFrame (Pandas)
Vergleich der Datenrahmenbehandlung in Python (Pandas), R, Pig
[Python] [Inhaltsverzeichnis Links] Python-Programmierung
Erste Schritte mit Python3
Zusammenfassung der Unterschiede zwischen Python und PHP (Vergleichstabelle der Hauptelemente)
[Python] Zusammenfassung der Verwendung von Pandas
Lesen aus Textdateien und SQLite mit Python (+ Pandas), R, Julia (+ DataFrames)
[Python] Sortieren Sie die Tabelle nach sort_values (pandas DataFrame)
Automatisieren einfacher Aufgaben mit Python Inhaltsverzeichnis
R- und Python-Schreibvergleich (euklidische Methode der gegenseitigen Teilung)
[Sprachverarbeitung 100 Schläge 2020] Zusammenfassung der Antwortbeispiele von Python
Bildverarbeitung durch Matrix Basics & Contents-Reinventor der Python-Bildverarbeitung-
Zusammenfassung der Vorverarbeitungsmethoden für Python-Anfänger (Pandas-Datenrahmen)
Erstellen von BINGO "Web Tools" mit Python (Inhaltsverzeichnis)
Vergleichstabelle häufig verwendeter Prozesse von Python und Clojure
Zusammenfassung der Python-Argumente