Ibis는 이식 가능한 Python 데이터프레임 라이브러리입니다.
"Why Ibis?"에 대한 문서를 참조하세요. 자세히 알아보기
백엔드 및 예제 데이터를 사용하여 Ibis를 pip install
수 있습니다.
pip install ' ibis-framework[duckdb,examples] '
팁
추가 설치 옵션은 설치 가이드를 참조하세요.
그런 다음 Ibis를 사용하십시오.
> >> 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는 데이터프레임 표현식을 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 데이터프레임은 실행 엔진과 긴밀하게 연결되어 있습니다. 그리고 많은 데이터베이스는 Python API 없이 SQL만 지원합니다. Ibis는 Python에서 데이터 조작을 위한 공통 API를 제공하고 해당 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 프로젝트는 이식 가능한 Python 데이터 프레임 라이브러리를 구축하고 유지 관리하기 위해 독립적으로 관리되는 오픈 소스 커뮤니티 프로젝트입니다. Ibis는 다양한 데이터 회사 및 기관에 기여자를 보유하고 있습니다.