Ibis — это портативная библиотека фреймов данных Python:
См. документацию «Почему Ibis?» чтобы узнать больше.
Вы можете pip install
Ibis с помощью бэкэнда и примеров данных:
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 тесно связаны со своим механизмом выполнения. Многие базы данных поддерживают только SQL без API Python. 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 — это независимый проект сообщества с открытым исходным кодом, целью которого является создание и поддержка переносимой библиотеки фреймов данных Python. В Ibis участвуют представители различных информационных компаний и учреждений.