Hub documentation

تحويل مجموعة البيانات الخاصة بك

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

تحويل مجموعة البيانات الخاصة بك

في هذه الصفحة سنرشدك عبر بعض أكثر العمليات شيوعًا المستخدمة عند إجراء تحليل البيانات. هذا مجرد جزء صغير مما هو ممكن في Polars. لمزيد من المعلومات، يرجى زيارة التوثيق.

للسيئة، سنستخدم مجموعة بيانات إحصاءات Common Crawl. تتضمن هذه الإحصاءات: عدد الصفحات، وتوزيع النطاقات من المستوى الأعلى، وتداخلات الزحف، وغيرها. لمزيد من المعلومات التفصيلية والرسوم البيانية، يرجى زيارة صفحة الإحصاءات الرسمية الخاصة بهم.

قراءة

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   │
└─────┴────────┴───────────────────┴────────────┴───┴───────┴──────┴───────┴─────────┘

اختيار الأعمدة

تحتوي مجموعة البيانات على بعض الأعمدة لا نحتاج إليها. لإزالتها، سنستخدم طريقة 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   │
└────────┴───────────────────┴────────────┴─────┴───────┴─────────┘

التصفية

يمكننا تصفية مجموعة البيانات باستخدام طريقة filter. تقبل هذه الطريقة تعبيرات معقدة، لكن لنبدأ ببساطة عن طريق التصفية بناءً على تاريخ الزحف:

import datetime

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

يمكنك دمج عدة شروط باستخدام عوامل & أو |:

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

التحويل

لإضافة أعمدة جديدة إلى مجموعة البيانات، استخدم with_columns. في المثال أدناه، نحسب إجمالي عدد الصفحات لكل نطاق ونضيف عمودًا جديدًا pages_per_domain باستخدام طريقة alias. يُطلق على العبارة الكاملة داخل with_columns اسم التعبير. اقرأ المزيد عن التعبيرات وكيفية استخدامها في دليل مستخدم 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              │
└────────┴─────────────────┴────────────┴─────┴───────┴─────────┴──────────────────┘

التجميع والترتيب

لجمع البيانات معًا يمكنك استخدام الطرق group_by وagg وsort. في سياق التجميع يمكنك دمج التعبيرات لإنشاء عبارات قوية تظل سهلة القراءة.

أولاً، نجمع جميع البيانات إلى النطاق الأعلى tld لكل تاريخ زحف:

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

الآن يمكننا حساب عدة إحصاءات لكل نطاق من المستوى الأعلى:

  • عدد تواريخ الزحف الفريدة
  • متوسط عدد النطاقات خلال فترة الزحف
  • متوسط معدل النمو من حيث عدد الصفحات
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