7 Schritte zur Automatisierung deskriptiver Statistiken mit Python


7 Schritte zur Automatisierung deskriptiver Statistiken mit Python

# Einführung

Jede Analyse beginnt auf die gleiche Weise: Sie laden einen Datensatz und versuchen herauszufinden, was tatsächlich darin enthalten ist. Wie viele Reihen? Welche Spalten sind numerisch? Wie viel fehlt? Ist irgendetwas völlig verzerrt? Die meisten von uns beantworten diese Fragen, indem sie sie kopieren und einfügen df.describe(), df.isna().sum()Und df.groupby(...).agg(...) Schnipsel, die wir tausendmal getippt haben, und die Ausgabe dann manuell neu formatieren, wenn es Zeit ist, sie in einen Bericht einzufügen.

Das ist vergebliche Mühe. Das Python-Ökosystem verfügt jetzt über Instruments, die Sie von einem Rohdatenrahmen zu einer formatierten, gemeinsam nutzbaren Übersichtstabelle in ein oder zwei Zeilen führen – und über andere, die speziell für die Erstellung der Artwork von „Tabelle 1“ entwickelt wurden, die Sie meist in Forschungsarbeiten sehen. Dieses Tutorial führt Sie durch die 7 Schritte zum Aufbau einer wiederholbaren Pipeline anstelle eines Stapels einmaliger Schnipsel. Wir werden das verwenden Datensatz der Palmer-Pinguine hindurch. Es ist klein, offen und verfügt über eine realistische Mischung aus numerischen und kategorialen Spalten, echten fehlenden Werten und einer natürlichen Gruppierungsvariablen (species). Additionally fangen wir an.

# 1. Einrichten Ihrer Umgebung und Laden der Daten

Installieren Sie die Pakete, die wir in diesem Tutorial verwenden:

pip set up pandas seaborn skimpy tableone great-tables fg-data-profiling

Ein wichtiger Hinweis zum letzten Punkt: Die beliebte Profiling-Bibliothek wurde mehr als einmal umbenannt. Es conflict zunächst Pandas-Profilerstellungwurde ydata-profiling im Jahr 2023 und wurde erneut in umbenannt fg-data-profiling im April 2026. Je älter ydata-profiling Das Paket wird weiterhin installiert und ausgeführt, erhält jedoch keine Updates mehr. Daher sollten neue Projekte bevorzugt werden fg-data-profiling. Wir werden beide Importstile in Schritt 5 behandeln.

Laden Sie nun die Daten. Seaborn verfügt über einen integrierten Pinguindatensatz, der uns einen Obtain erspart:

import pandas as pd
import seaborn as sns

df = sns.load_dataset("penguins")
print(df.form)       
print(df.dtypes)
print(df.isna().sum())

Ausgabe:

(344, 7)
species               object
island                object
bill_length_mm       float64
bill_depth_mm        float64
flipper_length_mm    float64
body_mass_g          float64
intercourse                   object
dtype: object
species               0
island                0
bill_length_mm        2
bill_depth_mm         2
flipper_length_mm     2
body_mass_g           2
intercourse                  11
dtype: int64

Sie sehen sieben Spalten: drei kategorische (species, island, intercourse) und vier numerische Messungen (bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g). Die Messungen haben jeweils 2 fehlende Werte und intercourse hat 11. Behalten Sie dieses Element bei – wir werden sehen, wie jedes Instrument diese fehlenden Daten meldet.

# 2. Die Baseline ermitteln mit df.describe()

Pandas eingebaut describe() ist der offensichtliche Ausgangspunkt, und das aus gutem Grund. Es funktioniert sofort und erfordert keine zusätzliche Set up:

Ausgabe:

       bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g
rely          342.00         342.00             342.00       342.00
imply            43.92          17.15             200.92      4201.75
std              5.46           1.97              14.06       801.95
min             32.10          13.10             172.00      2700.00
25%             39.22          15.60             190.00      3550.00
50%             44.45          17.30             197.00      4050.00
75%             48.50          18.70             213.00      4750.00
max             59.60          21.50             231.00      6300.00

Das ist wirklich nützlich, aber beachten Sie seine blinden Flecken. Standardmäßig werden kategoriale Spalten vollständig ignoriert. Es gibt Ihnen eine Zählung von ungleich Null Werte, sagt Ihnen aber nie direkt den fehlenden Prozentsatz. Und es bleibt bei der fünfstelligen Zusammenfassung – keine Schiefe, keine Wölbung, kein Gefühl für die Verteilungsform. Für einen schnellen Bauchcheck ist es in Ordnung, aber als Grundlage eines Berichts hinterlässt es Lücken. Der nächste Schritt schließt einige davon, ohne Pandas zu verlassen.

# 3. Pandas weiter vorantreiben mit embody, .agg()Und groupby

Bevor Sie zu externen Paketen greifen, sollten Sie wissen, wie weit Sie mit Pandas allein kommen können – denn für viele alltägliche Arbeiten reicht das aus.

Falten Sie zunächst die kategorialen Spalten zu derselben Zusammenfassung mit embody="all":

df.describe(embody="all").spherical(2)

Ausgabe:

       species island  bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g   intercourse
rely      344    344          342.00         342.00             342.00      342.00   333
distinctive       3      3             NaN            NaN                NaN         NaN     2
prime     Adelie Biscoe             NaN            NaN                NaN         NaN  Male
freq       152    168             NaN            NaN                NaN         NaN   168
imply       NaN    NaN           43.92          17.15             200.92     4201.75   NaN
std        NaN    NaN            5.46           1.97              14.06      801.95   NaN
min        NaN    NaN           32.10          13.10             172.00     2700.00   NaN
25%        NaN    NaN           39.22          15.60             190.00     3550.00   NaN
50%        NaN    NaN           44.45          17.30             197.00     4050.00   NaN
75%        NaN    NaN           48.50          18.70             213.00     4750.00   NaN
max        NaN    NaN           59.60          21.50             231.00     6300.00   NaN

Jetzt bekommst du distinctive, primeUnd freq für die Textspalten neben den numerischen Statistiken (mit NaN Ausfüllen der Zellen, in denen eine Statistik nicht zutrifft). Eine Tabelle, jede Spalte.

Zweitens erstellen Sie eine benutzerdefinierte Zusammenfassung mit .agg() Sie steuern additionally genau, welche Statistiken angezeigt werden – auch solche describe() Auslassungen wie Schiefe und Wölbung – und geben Sie einen Prozentsatz fehlender Daten an:

numeric = df.select_dtypes("quantity")

abstract = numeric.agg(("imply", "median", "std", "skew", "kurt")).T
abstract("missing_pct") = df(numeric.columns).isna().imply().mul(100).spherical(1)
abstract.spherical(2)

Ausgabe:

                      imply   median     std  skew  kurt  missing_pct
bill_length_mm       43.92    44.45    5.46  0.05 -0.88          0.6
bill_depth_mm        17.15    17.30    1.97 -0.14 -0.91          0.6
flipper_length_mm   200.92   197.00   14.06  0.35 -0.98          0.6
body_mass_g        4201.75  4050.00  801.95  0.47 -0.72          0.6

Drittens – und das ist der Schritt, den die Leute vergessen – Kette groupby() vor describe() So erhalten Sie eine geschichtete Zusammenfassung in einer einzigen Zeile:

df.groupby("species")("body_mass_g").describe().spherical(1)

Ausgabe:

           rely    imply    std     min     25%     50%     75%     max
species
Adelie     151.0  3700.7  458.6  2850.0  3350.0  3700.0  4000.0  4775.0
Chinstrap   68.0  3733.1  384.3  2700.0  3487.5  3700.0  3950.0  4800.0
Gentoo     123.0  5076.0  504.1  3950.0  4700.0  5000.0  5500.0  6300.0

Das zu verinnerlichende Muster: select_dtypes Spalten auswählen, .agg((...)) Statistiken auswählen, groupby Schichten wählen. Dieses Trio erfüllt einen überraschenden Teil der tatsächlichen Berichtsanforderungen ohne Abhängigkeiten. In den verbleibenden Schritten geht es darum, Zeit zu sparen, den Schliff zu verleihen und die Fälle zu behandeln, in denen „intestine genug“ nicht ausreicht.

# 4. Mit skimpy eine umfassendere Konsolenübersicht erhalten

Wenn Sie mehr wollen als describe() aber ich möchte es nicht von Hand zusammenbauen, dürftig ist die richtige Choice. Es ist wie ein Kompressor describe() das auf Ihrer Konsole oder Ihrem Pocket book läuft und jeden Spaltentyp gleichzeitig verarbeitet. Es funktioniert sowohl mit Pandas- als auch mit Polars-DataFrames.

from skimpy import skim

skim(df)

Ein einzelner Aufruf druckt einen strukturierten Bericht: eine Datenzusammenfassung (Zeilen- und Spaltenanzahl), eine Aufschlüsselung nach Datentyp, eine numerische Tabelle mit Mittelwert, Standardabweichung, der vollständigen Perzentilstreuung und ein Inline-ASCII-Histogramm professional Spalte sowie eine separate Tabelle für Zeichenfolgenspalten, die Dinge wie die Anzahl der Zeichen und die häufigsten/am seltensten Werte anzeigt. Fehlende Daten werden sowohl als Anzahl als auch als Prozentsatz gemeldet, genau dort, wo Sie es erwarten würden.

Ausgabe:

╭──────────────────────────────────────────────── skimpy abstract ─────────────────────────────────────────────────╮
│          Knowledge Abstract                Knowledge Varieties                                                                 │
│ ┏━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┓ ┏━━━━━━━━━━━━━┳━━━━━━━┓                                                          │
│ ┃ Dataframe         ┃ Values ┃ ┃ Column Kind ┃ Depend ┃                                                          │
│ ┡━━━━━━━━━━━━━━━━━━━╇━━━━━━━━┩ ┡━━━━━━━━━━━━━╇━━━━━━━┩                                                          │
│ │ Variety of rows    │ 344    │ │ float64     │ 4     │                                                          │
│ │ Variety of columns │ 7      │ │ string      │ 3     │                                                          │
│ └───────────────────┴────────┘ └─────────────┴───────┘                                                          │
│                                                     quantity                                                      │
│ ┏━━━━━━━━━━━━━━━━━━━━┳━━━━┳━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━┳━━━━━━┳━━━━━━━┳━━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━━━┓  │
│ ┃ column             ┃ NA ┃ NA %               ┃ imply  ┃ sd    ┃ p0   ┃ p25   ┃ p50   ┃ p75  ┃ p100 ┃ hist   ┃  │
│ ┡━━━━━━━━━━━━━━━━━━━━╇━━━━╇━━━━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━╇━━━━━━╇━━━━━━━╇━━━━━━━╇━━━━━━╇━━━━━━╇━━━━━━━━┩  │
│ │ bill_length_mm     │  2 │ 0.5813953488372093 │ 43.92 │  5.46 │ 32.1 │ 39.23 │ 44.45 │ 48.5 │ 59.6 │ ▃█▆█▃  │  │
│ │ bill_depth_mm      │  2 │ 0.5813953488372093 │ 17.15 │ 1.975 │ 13.1 │ 15.6  │ 17.3  │ 18.7 │ 21.5 │ ▄▅▆█▆▂ │  │
│ │ flipper_length_mm  │  2 │ 0.5813953488372093 │ 200.9 │ 14.06 │ 172  │ 190   │ 197   │ 213  │ 231  │ ▂██▄▆▃ │  │
│ │ body_mass_g        │  2 │ 0.5813953488372093 │ 4202  │ 802   │ 2700 │ 3550  │ 4050  │ 4750 │ 6300 │ ▂█▆▄▃▁ │  │
│ └────────────────────┴────┴────────────────────┴───────┴───────┴──────┴───────┴───────┴──────┴──────┴────────┘  │
│                                                     string                                                      │
│ ┏━━━━━━━━━┳━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━┓  │
│ ┃ column  ┃ NA ┃ NA %       ┃ shortest ┃ longest   ┃ min    ┃ max       ┃ chars/row  ┃ phrases/row ┃ complete phrases┃  │
│ ┡━━━━━━━━━╇━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━┩  │
│ │ species │  0 │ 0          │ Adelie   │ Chinstrap │ Adelie │ Gentoo    │ 6.59       │ 1.00      │ 344        │  │
│ │ island  │  0 │ 0          │ Dream    │ Torgersen │ Biscoe │ Torgersen │ 6.09       │ 1.00      │ 344        │  │
│ │ intercourse     │ 11 │ 3.19767442 │ Male     │ Feminine    │ Feminine │ Male      │ 4.99       │ 0.97      │ 333        │  │
│ └─────────┴────┴────────────┴──────────┴───────────┴────────┴───────────┴────────────┴───────────┴────────────┘  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Das herausragende Merkmal sind die Inline-Histogramme. Sie können die Kind jeder Verteilung ablesen, ohne eine Plotbibliothek öffnen zu müssen. Für die interaktive Erkundung ist Skimpy ein guter Mittelweg: weitaus informativer als describe()viel einfacher als ein vollständiger HTML-Bericht.

# 5. Erstellen eines vollständigen interaktiven Berichts mit Profilerstellung

Wenn Sie das brauchen vollständig Bild – Verteilungen, Korrelationen, Interaktionen, Duplikaterkennung und Datenqualitätswarnungen – ist es besser, einen vollständigen Profilbericht zu erstellen. Dies ist der Einzeiler, der für viele Analysten einen Nachmittag mit explorativem Plotten ersetzt hat.

Mit dem gepflegten Paket:

from data_profiling import ProfileReport          # fg-data-profiling

profile = ProfileReport(df, title="Penguins Profiling Report", explorative=True)
profile.to_file("penguins_report.html")

Wenn Sie das Legacy-Paket verwenden, ändert sich nur die Importzeile:

import ydata_profiling         # legacy ydata-profiling

Die Ausgabe ist eine eigenständige, interaktive HTML-Datei mit Abschnitten für eine Übersicht (Größe, Speicher, doppelte Zeilen), Particulars professional Variable (beschreibende Statistiken plus Histogramme), Korrelationen über mehrere Koeffizienten, eine Analyse fehlender Werte und automatische Warnungen, die auf Schiefe, hohe Kardinalität, konstante Spalten und dergleichen hinweisen.

fg-data-profiling interaktiver HTML-Bericht für den Pinguin-Datensatz
Ein Abschnitt des generierten Profiling-Berichts

Der einzige Nachteil ist die Geschwindigkeit: Ein vollständiger Bericht rechnet viel und wird bei großen Datensätzen langsamer. Zwei Argumente beheben das. Verwenden minimal=True um die aufwändigsten Berechnungen auszuschalten und ein Profil einer Stichprobe anstelle des gesamten Rahmens zu erstellen, wenn Sie nur ein Gefühl für die Daten benötigen:

profile = ProfileReport(df.pattern(frac=0.5), minimal=True)

Es gibt auch eine .examine() Methode zum Nebeneinanderstellen zweier Datensätze – von unschätzbarem Wert, um Abweichungen zwischen einem Trainingssatz und Produktionsdaten oder zwischen zwei Zeiträumen zu erkennen.

# 6. Mit tableone einen echten „Tisch 1“ aufbauen

Alles bisher ist für Du — Erkundungshilfen. Tisch eins ist für Ihre Leser. Es erstellt die geschichtete Foundation-Merkmalstabelle, die nahezu jede klinische und quantitative Forschungsarbeit öffnet (daher „Tabelle 1“), mit der Formatierung und den Statistiken, die Gutachter erwarten.

from tableone import TableOne

information = df.dropna(subset=("intercourse"))

columns     = ("bill_length_mm", "bill_depth_mm",
               "flipper_length_mm", "body_mass_g", "island", "intercourse")
categorical = ("island", "intercourse")
nonnormal   = ("body_mass_g")   # summarize with median (IQR) as a substitute of imply (SD)

table1 = TableOne(
    information,
    columns=columns,
    categorical=categorical,
    nonnormal=nonnormal,
    groupby="species",
    pval=True,
    smd=True,
)
print(table1.tabulate(tablefmt="github"))

Das Ergebnis ist eine ordnungsgemäß formatierte Tabelle: kontinuierliche Variablen als imply (SD)Kategoriale als n (%)alles, was Sie als nicht regular gekennzeichnet haben median (Q1,Q3) – stratifiziert über Ihre Gruppierungsvariable, mit einer Spalte mit fehlenden Daten, p-Werten und standardisierten Mittelwertdifferenzen (SMD) zwischen Gruppen:

|                              |           | Lacking   | General                | Adelie                 | Chinstrap              | Gentoo                 | SMD (Adelie,Chinstrap)   | SMD (Adelie,Gentoo)   | SMD (Chinstrap,Gentoo)   | P-Worth   |
|------------------------------|-----------|-----------|------------------------|------------------------|------------------------|------------------------|--------------------------|-----------------------|--------------------------|-----------|
| n                            |           |           | 333                    | 146                    | 68                     | 119                    |                          |                       |                          |           |
| bill_length_mm, imply (SD)    |           | 0         | 44.0 (5.5)             | 38.8 (2.7)             | 48.8 (3.3)             | 47.6 (3.1)             | 3.315                    | 3.023                 | -0.393                   | <0.001    |
| bill_depth_mm, imply (SD)     |           | 0         | 17.2 (2.0)             | 18.3 (1.2)             | 18.4 (1.1)             | 15.0 (1.0)             | 0.062                    | -3.022                | -3.220                   | <0.001    |
| flipper_length_mm, imply (SD) |           | 0         | 201.0 (14.0)           | 190.1 (6.5)            | 195.8 (7.1)            | 217.2 (6.6)            | 0.837                    | 4.140                 | 3.119                    | <0.001    |
| body_mass_g, median (Q1,Q3)  |           | 0         | 4050.0 (3550.0,4775.0) | 3700.0 (3362.5,4000.0) | 3700.0 (3487.5,3950.0) | 5050.0 (4700.0,5500.0) | 0.064                    | 2.885                 | 3.043                    | <0.001    |
| island, n (%)                | Biscoe    |           | 163 (48.9)             | 44 (30.1)              | 0 (0.0)                | 119 (100.0)            | 1.819                    | 2.153                 | nan                      | <0.001    |
|                              | Dream     |           | 123 (36.9)             | 55 (37.7)              | 68 (100.0)             | 0 (0.0)                |                          |                       |                          |           |
|                              | Torgersen |           | 47 (14.1)              | 47 (32.2)              | 0 (0.0)                | 0 (0.0)                |                          |                       |                          |           |
| intercourse, n (%)                   | Feminine    |           | 165 (49.5)             | 73 (50.0)              | 34 (50.0)              | 58 (48.7)              | <0.001                   | 0.025                 | 0.025                    | 0.976     |
|                              | Male      |           | 168 (50.5)             | 73 (50.0)              | 34 (50.0)              | 61 (51.3)              |                          |                       |                          |           |

Der wahre Gewinn liegt im Export. A TableOne Das Objekt wechselt direkt in das Format, das Ihr Manuskript benötigt – LaTeX (fügen Sie es in Overleaf ein), HTML, Markdown oder CSV:

table1.to_latex("table1.tex")
table1.to_html("table1.html")
table1.to_csv("table1.csv")

Eine wichtige Sache, die die Paketautoren betonen, und ich auch: Automatisierte Statistiken sind kein Ersatz für Urteilsvermögen. Die Wahl des durchzuführenden Assessments, ob eine Variable wirklich regular ist und wie mit fehlenden Variablen umgegangen werden soll, erfordert eine menschliche Überprüfung, bevor etwas veröffentlicht wird. Tableone beseitigt die Langeweile, nicht die Verantwortung.

# 7. Mit tollen Tabellen zu einer Tabelle in Publikationsqualität aufpolieren

tableone formatiert gezielt Forschungstabellen. Für irgendein anderes Zusammenfassung – ein Geschäftsbericht, eine Folie oder eine README-Datei – Tolle Tische verwandelt einen einfachen DataFrame auf die gleiche Weise in eine gestaltete, präsentationsbereite Tabelle gt Das Paket funktioniert in R. Es nimmt einen Pandas- oder Polars-Body und rendert ihn in HTML oder in ein Bild.

Nehmen Sie die benutzerdefinierte Zusammenfassung, die wir in Schritt 3 erstellt haben, und verschönern Sie sie:

from great_tables import GT, md

numeric = df.select_dtypes("quantity")
stats = (numeric.agg(("imply", "median", "std", "min", "max")).T
                .rename_axis("measurement").reset_index())
stats("missing_pct") = df(numeric.columns).isna().imply().mul(100).values

desk = (
    GT(stats, rowname_col="measurement")
    .tab_header(title="Penguin Physique Measurements",
                subtitle="Descriptive statistics, Palmer Archipelago")
    .fmt_number(columns=("imply", "median", "std", "min", "max"), decimals=1)
    .fmt_percent(columns="missing_pct", decimals=1, scale_values=False)
    .data_color(columns="std", palette="Blues")
    .tab_source_note(md("Supply: *palmerpenguins* dataset (Horst et al.)."))
)

Hier passieren einige Dinge. fmt_number Und fmt_percent Behandeln Sie die Anzeigeformatierung, damit Sie nie wieder herumhantieren müssen. data_color Wendet einen Farbverlauf an std Spalte, die den Blick auf die unterschiedlichsten Messungen lenkt. tab_header Und tab_source_note Fügen Sie den Titel und die Namensnennung hinzu, damit eine Tabelle fertig aussieht. Es gibt noch viel mehr – Spaltenschlüssel, bedingtes Styling, sogar Inline-Sparklines – aber selbst das führt zu etwas, das Sie den Beteiligten gerne vorstellen würden.

Um das Ergebnis zu verwenden, rendern Sie es in einen HTML-String (funktioniert überall, keine zusätzlichen Abhängigkeiten):

html = desk.as_raw_html()
with open("summary_table.html", "w") as f:
    f.write(html)

Great Tables zusammenfassende Tabelle mit den Körpermaßen von Pinguinen in Publikationsqualität
Die gestaltete Nice Tables-Ausgabe

# Alles zusammenfügen: Immer eine Funktion

Der springende Punkt bei der Automatisierung ist die Wiederholbarkeit. Wickeln Sie die Pipeline so ein, dass der nächste Datensatz ein einzelner Aufruf ist:

from great_tables import GT, md

def descriptive_report(df, decimals=1):
    numeric = df.select_dtypes("quantity")
    stats = (numeric.agg(("rely", "imply", "median", "std", "min", "max")).T
                    .rename_axis("variable").reset_index())
    stats("missing_%") = df(numeric.columns).isna().imply().mul(100).values
    return (
        GT(stats, rowname_col="variable")
        .tab_header(title="Descriptive Statistics",
                    subtitle=f"{len(df):,} rows x {df.form(1)} columns")
        .fmt_integer(columns="rely")
        .fmt_number(columns=("imply", "median", "std", "min", "max"), decimals=decimals)
        .fmt_percent(columns="missing_%", decimals=1, scale_values=False)
        .data_color(columns="std", palette="Blues")
        .tab_source_note(md("Generated routinely with pandas + Nice Tables."))
    )

descriptive_report(df)   # level it at any DataFrame

Das ist der Unterschied zwischen einem Snippet und einem Instrument: Sie schreiben es einmal und verwenden es für jeden Datensatz, der auf Ihrem Schreibtisch landet.

# Zusammenfassung

Beschreibende Statistiken müssen nicht eine lästige Pflicht sein, die Sie bei jedem Projekt neu implementieren müssen. Die Leiter, die wir bestiegen haben, hat für jede State of affairs eine Sprosse:

  • Pandas describe() Und .agg(): Keine Abhängigkeiten, perfekt für schnelle Überprüfungen und benutzerdefinierte Zusammenfassungen.
  • dürftig: Eine umfassendere Konsolenzusammenfassung mit Histogrammen und Prozentsätzen fehlender Daten in einem Aufruf.
  • fg-data-profiling: Ein vollständiger interaktiver HTML-Bericht, wenn Sie das vollständige Bild der explorativen Datenanalyse (EDA) benötigen.
  • Tabelle eins: Die geschichtete „Tabelle 1“ mit p-Werten und SMDs für Forschungsarbeiten, mit einzeiligem Export in LaTeX, HTML und CSV.
  • Tolle Tische: Poliertes Design in Publikationsqualität für jede Zusammenfassung, die Sie erstellt haben.

Wählen Sie das leichteste Werkzeug, das Ihre Frage beantwortet. Für eine fünfsekündige Überprüfung der geistigen Gesundheit: describe() gewinnt. Für ein Manuskript verdienen Tableone und Nice Tables ihren Lebensunterhalt. Und sobald Sie Ihre Lieblingskombination in eine Funktion verpackt haben, hören Sie auf tun Beschreibende Statistik und Begin läuft Sie sind genau dort, wo Sie sein möchten, damit Sie Ihre Zeit mit der Analyse verbringen können, die Ihr Gehirn tatsächlich erfordert.

Kanwal Mehreen ist ein Ingenieur für maschinelles Lernen und ein technischer Redakteur mit einer großen Leidenschaft für Datenwissenschaft und die Schnittstelle zwischen KI und Medizin. Sie ist Mitautorin des E-Books „Maximizing Productiveness with ChatGPT“. Als Google Technology Scholar 2022 für APAC setzt sie sich für Vielfalt und akademische Exzellenz ein. Sie ist außerdem als Teradata Range in Tech Scholar, Mitacs Globalink Analysis Scholar und Harvard WeCode Scholar anerkannt. Kanwal ist ein leidenschaftlicher Verfechter von Veränderungen und hat FEMCodes gegründet, um Frauen in MINT-Bereichen zu stärken.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert