Hub documentation

Transformando seu conjunto de dados

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Transformando seu conjunto de dados

Nesta pΓ‘gina, guiaremos vocΓͺ por algumas das operaΓ§Γ΅es mais comuns usadas ao realizar anΓ‘lise de dados. Isso Γ© apenas um pequeno subconjunto do que Γ© possΓ­vel no Polars. Para mais informaΓ§Γ΅es, visite a DocumentaΓ§Γ£o.

Para o exemplo, usaremos o conjunto de dados Common Crawl statistics. Essas estatΓ­sticas incluem: nΓΊmero de pΓ‘ginas, distribuiΓ§Γ£o de domΓ­nios de nΓ­vel superior, sobreposiΓ§Γ΅es de rastreamento, etc. Para informaΓ§Γ΅es e grΓ‘ficos mais detalhados, visite a pΓ‘gina oficial de estatΓ­sticas.

Leitura

import polars as pl

df = pl.read_csv(
    "hf://datasets/commoncrawl/statistics/tlds.csv",
    try_parse_dates=True,
)
df.head(3)
β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     ┆ suffix ┆ crawl             ┆ date       ┆ … ┆ pages ┆ urls ┆ hosts ┆ domains β”‚
β”‚ --- ┆ ---    ┆ ---               ┆ ---        ┆   ┆ ---   ┆ ---  ┆ ---   ┆ ---     β”‚
β”‚ i64 ┆ str    ┆ str               ┆ date       ┆   ┆ i64   ┆ i64  ┆ f64   ┆ f64     β”‚
β•žβ•β•β•β•β•β•ͺ════════β•ͺ═══════════════════β•ͺ════════════β•ͺ═══β•ͺ═══════β•ͺ══════β•ͺ═══════β•ͺ═════════║
β”‚ 0   ┆ a.se   ┆ CC-MAIN-2008-2009 ┆ 2009-01-12 ┆ … ┆ 18    ┆ 18   ┆ 1.0   ┆ 1.0     β”‚
β”‚ 1   ┆ a.se   ┆ CC-MAIN-2009-2010 ┆ 2010-09-25 ┆ … ┆ 3462  ┆ 3259 ┆ 166.0 ┆ 151.0   β”‚
β”‚ 2   ┆ a.se   ┆ CC-MAIN-2012      ┆ 2012-11-02 ┆ … ┆ 6957  ┆ 6794 ┆ 172.0 ┆ 150.0   β”‚
β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Selecionando colunas

O conjunto de dados contΓ©m algumas colunas que nΓ£o precisamos. Para removΓͺ-las, usaremos o mΓ©todo select:

df = df.select("suffix", "date", "tld", "pages", "domains")
df.head(3)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ suffix ┆ crawl             ┆ date       ┆ tld ┆ pages ┆ domains β”‚
β”‚ ---    ┆ ---               ┆ ---        ┆ --- ┆ ---   ┆ ---     β”‚
β”‚ str    ┆ str               ┆ date       ┆ str ┆ i64   ┆ f64     β”‚
β•žβ•β•β•β•β•β•β•β•β•ͺ═══════════════════β•ͺ════════════β•ͺ═════β•ͺ═══════β•ͺ═════════║
β”‚ a.se   ┆ CC-MAIN-2008-2009 ┆ 2009-01-12 ┆ se  ┆ 18    ┆ 1.0     β”‚
β”‚ a.se   ┆ CC-MAIN-2009-2010 ┆ 2010-09-25 ┆ se  ┆ 3462  ┆ 151.0   β”‚
β”‚ a.se   ┆ CC-MAIN-2012      ┆ 2012-11-02 ┆ se  ┆ 6957  ┆ 150.0   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Filtragem

Podemos filtrar o conjunto de dados usando o mΓ©todo filter. Este mΓ©todo aceita expressΓ΅es complexas, mas vamos comeΓ§ar de forma simples, filtrando com base na data de coleta:

import datetime

df = df.filter(pl.col("date") >= datetime.date(2020, 1, 1))

VocΓͺ pode combinar mΓΊltiplos predicados com os operadores & ou |:

df = df.filter(
    (pl.col("date") >= datetime.date(2020, 1, 1)) |
    pl.col("crawl").str.contains("CC")
)

Transformando

Para adicionar novas colunas ao dataset, use with_columns. No exemplo abaixo, calculamos o nΓΊmero total de pΓ‘ginas por domΓ­nio e adicionamos uma nova coluna pages_per_domain usando o mΓ©todo alias. A declaraΓ§Γ£o inteira dentro de with_columns Γ© chamada de expressΓ£o. Leia mais sobre expressΓ΅es e como usΓ‘-las no guia do usuΓ‘rio do Polars

df = df.with_columns(
    (pl.col("pages") / pl.col("domains")).alias("pages_per_domain")
)
df.sample(3)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ suffix ┆ crawl           ┆ date       ┆ tld ┆ pages ┆ domains ┆ pages_per_domain β”‚
β”‚ ---    ┆ ---             ┆ ---        ┆ --- ┆ ---   ┆ ---     ┆ ---              β”‚
β”‚ str    ┆ str             ┆ date       ┆ str ┆ i64   ┆ f64     ┆ f64              β”‚
β•žβ•β•β•β•β•β•β•β•β•ͺ═════════════════β•ͺ════════════β•ͺ═════β•ͺ═══════β•ͺ═════════β•ͺ══════════════════║
β”‚ net.bt ┆ CC-MAIN-2014-41 ┆ 2014-10-06 ┆ bt  ┆ 4     ┆ 1.0     ┆ 4.0              β”‚
β”‚ org.mk ┆ CC-MAIN-2016-44 ┆ 2016-10-31 ┆ mk  ┆ 1445  ┆ 430.0   ┆ 3.360465         β”‚
β”‚ com.lc ┆ CC-MAIN-2016-44 ┆ 2016-10-31 ┆ lc  ┆ 1     ┆ 1.0     ┆ 1.0              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

AgregaΓ§Γ£o & OrdenaΓ§Γ£o

Para agregar dados, vocΓͺ pode usar os mΓ©todos group_by, agg e sort. No contexto de agregaΓ§Γ£o, Γ© possΓ­vel combinar expressΓ΅es para criar declaraΓ§Γ΅es poderosas que ainda sΓ£o fΓ‘ceis de ler.

Primeiro, agregamos todos os dados ao domΓ­nio de nΓ­vel superior tld por data de raspagem:

df = df.group_by("tld", "date").agg(
    pl.col("pages").sum(),
    pl.col("domains").sum(),
)

Agora podemos calcular vΓ‘rias estatΓ­sticas por domΓ­nio de nΓ­vel superior:

  • NΓΊmero de datas de raspagem ΓΊnicas
  • NΓΊmero mΓ©dio de domΓ­nios no perΓ­odo raspado
  • Taxa mΓ©dia de crescimento em termos de nΓΊmero de pΓ‘ginas
df = df.group_by("tld").agg(
    pl.col("date").unique().count().alias("number_of_scrapes"),
    pl.col("domains").mean().alias("avg_number_of_domains"),
    pl.col("pages").sort_by("date").pct_change().mean().alias("avg_page_growth_rate"),
)
df = df.sort("avg_number_of_domains", descending=True)
df.head(10)
β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ tld ┆ number_of_scrapes ┆ avg_number_of_domains ┆ avg_percent_change_in_number_o… β”‚
β”‚ --- ┆ ---               ┆ ---                   ┆ ---                             β”‚
β”‚ str ┆ u32               ┆ f64                   ┆ f64                             β”‚
β•žβ•β•β•β•β•β•ͺ═══════════════════β•ͺ═══════════════════════β•ͺ═════════════════════════════════║
β”‚ com ┆ 101               ┆ 1.9571e7              ┆ 0.022182                        β”‚
β”‚ de  ┆ 101               ┆ 1.8633e6              ┆ 0.5232                          β”‚
β”‚ org ┆ 101               ┆ 1.5049e6              ┆ 0.019604                        β”‚
β”‚ net ┆ 101               ┆ 1.5020e6              ┆ 0.021002                        β”‚
β”‚ cn  ┆ 101               ┆ 1.1101e6              ┆ 0.281726                        β”‚
β”‚ ru  ┆ 101               ┆ 1.0561e6              ┆ 0.416303                        β”‚
β”‚ uk  ┆ 101               ┆ 827453.732673         ┆ 0.065299                        β”‚
β”‚ nl  ┆ 101               ┆ 710492.623762         ┆ 1.040096                        β”‚
β”‚ fr  ┆ 101               ┆ 615471.594059         ┆ 0.419181                        β”‚
β”‚ jp  ┆ 101               ┆ 615391.455446         ┆ 0.246162                        β”‚
β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Update on GitHub