Hub documentation
Veri setinizi dönüştürme
Veri setinizi dönüştürme
Bu sayfada, veri analizi sırasında kullanılan en yaygın işlemlerden bazılarını adım adım ele alacağız. Bu, Polars ile yapılabilenlerin yalnızca küçük bir alt kümesidir. Daha fazla bilgi için lütfen Dokümantasyon sayfasını ziyaret edin.
Örnek olarak Common Crawl istatistikleri veri setini kullanacağız. Bu istatistikler şunları içerir: sayfa sayısı, üst düzey alan adlarının dağılımı, tarama örtüşmeleri vb. Daha ayrıntılı bilgi ve grafikler için lütfen resmi istatistik sayfasını ziyaret edin.
Okuma
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 │
└─────┴────────┴───────────────────┴────────────┴───┴───────┴──────┴───────┴─────────┘Sütun seçimi
Veri seti, ihtiyaç duymadığımız bazı sütunlar içeriyor. Bunları kaldırmak için select yöntemini kullanacağız:
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 │
└────────┴───────────────────┴────────────┴─────┴───────┴─────────┘Filtreleme
Veri setini filter yöntemiyle filtreleyebiliriz. Bu yöntem karmaşık ifadeleri kabul eder, ancak tarama tarihine göre filtreleyerek basit başlayalım:
import datetime
df = df.filter(pl.col("date") >= datetime.date(2020, 1, 1))Birden çok öngörüleyi & veya | operatörleriyle birleştirebilirsiniz:
df = df.filter(
(pl.col("date") >= datetime.date(2020, 1, 1)) |
pl.col("crawl").str.contains("CC")
)Dönüştürme
Veri setine yeni sütunlar eklemek için with_columns kullanın. Aşağıdaki örnekte, alan başına toplam sayfa sayısını hesaplayıp alias yöntemiyle pages_per_domain adında yeni bir sütun ekliyoruz. with_columns içindeki tüm ifadeye bir expression denir. Expression'lar hakkında ve bunların nasıl kullanılacağı hakkında daha fazla bilgi için Polars kullanıcı kılavuzuna göz atın.
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 │
└────────┴─────────────────┴────────────┴─────┴───────┴─────────┴──────────────────┘Toplama & Sıralama
Verileri bir arada toplamak için group_by, agg ve sort yöntemlerini kullanabilirsiniz. Toplama bağlamında ifadeleri birleştirerek güçlü ve yine de okunması kolay ifadeler oluşturabilirsiniz.
Öncelikle, tüm verileri kazıma tarihine göre üst düzey alan adı tld altında birleştiriyoruz:
df = df.group_by("tld", "date").agg(
pl.col("pages").sum(),
pl.col("domains").sum(),
)Şimdi üst düzey alan adı başına birkaç istatistik hesaplayabiliriz:
- Benzersiz kazıma tarihlerinin sayısı
- Taranan dönemde ortalama alan adı sayısı
- Sayfa sayısı açısından ortalama büyüme oranı
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 │
└─────┴───────────────────┴───────────────────────┴─────────────────────────────────┘