Hub documentation

Mentransformasi dataset Anda

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Mentransformasi dataset Anda

Pada halaman ini, kami akan memandu Anda melalui beberapa operasi paling umum yang digunakan saat melakukan analisis data. Ini hanyalah sebagian kecil dari apa yang mungkin dilakukan di Polars. Untuk informasi lebih lanjut, silakan kunjungi Dokumentasi.

Untuk contoh ini, kami akan menggunakan dataset statistik Common Crawl. Statistik ini mencakup: jumlah halaman, distribusi domain tingkat atas, tumpang tindih crawl, dan sebagainya. Untuk informasi dan grafik yang lebih detail, silakan kunjungi halaman statistik resmi mereka.

Membaca

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   β”‚
β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Memilih kolom

Dataset ini berisi beberapa kolom yang tidak kami butuhkan. Untuk menghapusnya, kami akan menggunakan metode 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   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Penyaringan

Kita dapat memfilter dataset menggunakan metode filter. Metode ini menerima ekspresi yang kompleks, tetapi mari kita mulai dengan sederhana dengan memfilter berdasarkan tanggal pengunduhan:

import datetime

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

Anda dapat menggabungkan beberapa predikat dengan operator & atau |:

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

Transformasi

Untuk menambahkan kolom baru ke dataset, gunakan with_columns. Pada contoh di bawah, kami menghitung total jumlah halaman per domain dan menambahkan kolom baru pages_per_domain menggunakan metode alias. Seluruh pernyataan di dalam with_columns disebut ekspresi. Baca lebih lanjut tentang ekspresi dan cara menggunakannya di panduan pengguna 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              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Agregasi & Pengurutan

Untuk mengagregasi data, Anda dapat menggunakan metode group_by, agg, dan sort. Dalam konteks agregasi, Anda dapat menggabungkan ekspresi untuk membuat pernyataan yang kuat namun tetap mudah dibaca.

Pertama, kami mengagregasi semua data ke domain tingkat atas tld per tanggal pengikisan:

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

Sekarang kita dapat menghitung beberapa statistik per domain tingkat atas:

  • Jumlah tanggal scraping unik
  • Rata-rata jumlah domain dalam periode pengikisan
  • Laju pertumbuhan rata-rata dalam hal jumlah halaman
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