Ibis เป็นไลบรารี Python dataframe แบบพกพา:
ดูเอกสารประกอบเรื่อง "ทำไมต้องเลือก Ibis" เพื่อเรียนรู้เพิ่มเติม
คุณสามารถ pip install
Ibis ด้วยแบ็กเอนด์และข้อมูลตัวอย่าง:
pip install ' ibis-framework[duckdb,examples] '
เคล็ดลับ
ดูคู่มือการติดตั้งสำหรับตัวเลือกการติดตั้งเพิ่มเติม
จากนั้นใช้ไอบิส:
> >> import ibis
> >> ibis . options . interactive = True
> >> t = ibis . examples . penguins . fetch ()
> >> t
┏━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━┓
┃ species ┃ island ┃ bill_length_mm ┃ bill_depth_mm ┃ flipper_length_mm ┃ body_mass_g ┃ sex ┃ year ┃
┡━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━┩
│ string │ string │ float64 │ float64 │ int64 │ int64 │ string │ int64 │
├─────────┼───────────┼────────────────┼───────────────┼───────────────────┼─────────────┼────────┼───────┤
│ Adelie │ Torgersen │ 39.1 │ 18.7 │ 181 │ 3750 │ male │ 2007 │
│ Adelie │ Torgersen │ 39.5 │ 17.4 │ 186 │ 3800 │ female │ 2007 │
│ Adelie │ Torgersen │ 40.3 │ 18.0 │ 195 │ 3250 │ female │ 2007 │
│ Adelie │ Torgersen │ NULL │ NULL │ NULL │ NULL │ NULL │ 2007 │
│ Adelie │ Torgersen │ 36.7 │ 19.3 │ 193 │ 3450 │ female │ 2007 │
│ Adelie │ Torgersen │ 39.3 │ 20.6 │ 190 │ 3650 │ male │ 2007 │
│ Adelie │ Torgersen │ 38.9 │ 17.8 │ 181 │ 3625 │ female │ 2007 │
│ Adelie │ Torgersen │ 39.2 │ 19.6 │ 195 │ 4675 │ male │ 2007 │
│ Adelie │ Torgersen │ 34.1 │ 18.1 │ 193 │ 3475 │ NULL │ 2007 │
│ Adelie │ Torgersen │ 42.0 │ 20.2 │ 190 │ 4250 │ NULL │ 2007 │
│ … │ … │ … │ … │ … │ … │ … │ … │
└─────────┴───────────┴────────────────┴───────────────┴───────────────────┴─────────────┴────────┴───────┘
>> > g = t . group_by ( "species" , "island" ). agg ( count = t . count ()). order_by ( "count" )
> >> g
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓
┃ species ┃ island ┃ count ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━┩
│ string │ string │ int64 │
├───────────┼───────────┼───────┤
│ Adelie │ Biscoe │ 44 │
│ Adelie │ Torgersen │ 52 │
│ Adelie │ Dream │ 56 │
│ Chinstrap │ Dream │ 68 │
│ Gentoo │ Biscoe │ 124 │
└───────────┴───────────┴───────┘
เคล็ดลับ
ดูบทแนะนำการเริ่มต้นใช้งานสำหรับข้อมูลเบื้องต้นเกี่ยวกับ Ibis
สำหรับแบ็กเอนด์ส่วนใหญ่ Ibis ทำงานโดยรวบรวมนิพจน์ dataframe ลงใน SQL:
> >> ibis . to_sql ( g )
SELECT
"t1" . "species" ,
"t1" . "island" ,
"t1" . "count"
FROM (
SELECT
"t0" . "species" ,
"t0" . "island" ,
COUNT ( * ) AS "count"
FROM "penguins" AS "t0"
GROUP BY
1 ,
2
) AS "t1"
ORDER BY
"t1" . "count" ASC
คุณสามารถผสมโค้ด SQL และ Python ได้:
> >> a = t . sql ( "SELECT species, island, count(*) AS count FROM penguins GROUP BY 1, 2" )
> >> a
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓
┃ species ┃ island ┃ count ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━┩
│ string │ string │ int64 │
├───────────┼───────────┼───────┤
│ Adelie │ Torgersen │ 52 │
│ Adelie │ Biscoe │ 44 │
│ Adelie │ Dream │ 56 │
│ Gentoo │ Biscoe │ 124 │
│ Chinstrap │ Dream │ 68 │
└───────────┴───────────┴───────┘
>> > b = a . order_by ( "count" )
> >> b
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓
┃ species ┃ island ┃ count ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━┩
│ string │ string │ int64 │
├───────────┼───────────┼───────┤
│ Adelie │ Biscoe │ 44 │
│ Adelie │ Torgersen │ 52 │
│ Adelie │ Dream │ 56 │
│ Chinstrap │ Dream │ 68 │
│ Gentoo │ Biscoe │ 124 │
└───────────┴───────────┴───────┘
สิ่งนี้ทำให้คุณสามารถรวมความยืดหยุ่นของ Python เข้ากับขนาดและประสิทธิภาพของ SQL สมัยใหม่ได้
Ibis รองรับแบ็กเอนด์เกือบ 20 รายการ:
Python dataframes ส่วนใหญ่เชื่อมโยงอย่างแน่นหนากับกลไกการดำเนินการ และฐานข้อมูลจำนวนมากรองรับเฉพาะ SQL เท่านั้น โดยไม่มี Python API Ibis แก้ไขปัญหานี้ด้วยการจัดเตรียม API ทั่วไปสำหรับการจัดการข้อมูลใน Python และรวบรวม API นั้นเป็นภาษาแม่ของแบ็กเอนด์ ซึ่งหมายความว่าคุณสามารถเรียนรู้ API เดียวและใช้กับแบ็กเอนด์ที่รองรับ (กลไกการดำเนินการ)
Ibis รองรับแบ็กเอนด์สองประเภทในวงกว้าง:
หากต้องการใช้แบ็กเอนด์ที่แตกต่างกัน คุณสามารถตั้งค่าแบ็กเอนด์ที่ Ibis ใช้:
> >> ibis . set_backend ( "duckdb" )
> >> ibis . set_backend ( "polars" )
> >> ibis . set_backend ( "datafusion" )
โดยทั่วไป คุณจะสร้างวัตถุการเชื่อมต่อ:
> >> con = ibis . duckdb . connect ()
> >> con = ibis . polars . connect ()
> >> con = ibis . datafusion . connect ()
และทำงานกับตารางในแบ็กเอนด์นั้น:
> >> con . list_tables ()
[ 'penguins' ]
> >> t = con . table ( "penguins" )
คุณยังสามารถอ่านจากรูปแบบไฟล์ทั่วไป เช่น CSV หรือ Apache Parquet ได้ด้วย:
> >> t = con . read_csv ( "penguins.csv" )
> >> t = con . read_parquet ( "penguins.parquet" )
สิ่งนี้ทำให้คุณสามารถวนซ้ำในเครื่องและปรับใช้จากระยะไกลโดยการเปลี่ยนโค้ดเพียงบรรทัดเดียว
เคล็ดลับ
ดูบล็อกเกี่ยวกับอาร์เรย์ผู้ไม่เชื่อเรื่องพระเจ้าแบ็กเอนด์เพื่อดูตัวอย่างหนึ่งที่ใช้โค้ดเดียวกันใน DuckDB และ BigQuery
Ibis เป็นโครงการโอเพ่นซอร์สและยินดีรับการมีส่วนร่วมจากทุกคนในชุมชน
เข้าร่วมชุมชนของเราโดยการโต้ตอบบน GitHub หรือพูดคุยกับเราบน Zulip
ดูข้อมูลเพิ่มเติมได้ที่ https://ibis-project.org/
โครงการ Ibis เป็นโครงการชุมชนโอเพ่นซอร์สที่ได้รับการควบคุมโดยอิสระ เพื่อสร้างและบำรุงรักษาไลบรารี Dataframe Python แบบพกพา Ibis มีผู้มีส่วนร่วมในบริษัทและสถาบันข้อมูลต่างๆ