Information
2024/7/24ïŒ
-
Ibis-Polars vs Native Polars
Ibis-Polars ãš Native Polars ã®åŠçéåºŠã®æ¯èŒèšäºãæžãããŠããæ¹ããããŸããã
Ibis çµç±ã§ Polars ã䜿çšããŠã Polars ãšåŠçé床ã«å€§ããªå·®ããªãããšã瀺ããŠããŸããã
ibis-frameworkã§PolarsãšSQLãã€ãã£ãŠã¿ã
2024/1/14ïŒ
-
Kaggle notebook for Ibis
Kaggle ã§ Ibis ã䜿çšããããã® Sample Notebook ãçšæããŸãããKaggle ã§ããã² Ibis ããæŽ»çšäžããã
ðŠ© [Ibis] Kaggle-Titanic-Tutorial
ãã -
Ibis 100 æ¬ããã¯è£è¶³èšäº
Ibis 100 æ¬ããã¯ã«ã€ããŠãããã¹ããŒããªæžãæ¹çã«ã€ã㊠@hkzm ãããè£è¶³èšäºãæžããŠãããŸããïŒãã®èšäºãåèã«ã³ã³ãã³ãã®ã»ãããã©ãã·ã¥ã¢ããããããšæããŸãïŒã
Ibis 100 æ¬ããã¯ã®èšäºãåããŠ
ã¯ããã«
ã©ããããã«ã¡ã¯ãkunishou ã§ãã
ã
ãã®åºŠ Ibis ãšãããPython ã®çµ±åããŒã¿åŠçã©ã€ãã©ãªãå¹ççã«åŠã¶ããã®ã³ã³ãã³ããšã㊠ã Python ååŠè
ã®ããã® Ibis 100 æ¬ããã¯ã ãäœæããã®ã§å
¬éããŸãããã¡ãã¯éå»ã«å
¬éããã Python ååŠè
ã®ããã® pandas 100 æ¬ããã¯ããã Python ååŠè
ã®ããã® Polars 100 æ¬ããã¯ãã®åé¡å
容ã Ibis ã®ã¡ãœããã«åãããŠä¿®æ£ãåç·šãããã®ã«ãªããŸããæ¬ã³ã³ãã³ãã«åãçµãããšã§ Ibis ãçšããã²ãšéãã®ããŒã¿æäœãããŒã¿åŠçã宿œã§ããããã«ãªããŸãããŸããæ¬ã³ã³ãã³ã㯠Google Colab äžã§å®æœã§ãããããPC ãšã€ã³ã¿ãŒãããç°å¢ãããã°ãPython ç°å¢ãæ§ç¯ããããšãªãããã« Ibis ã®åŠç¿ãå§ããããšãã§ããŸãã
以äžã«ãã³ã³ãã³ãã®ã€ã¡ãŒãžåç»ãèŒããŠãããŸã
â»åç»ã¯éå»ã«äœæãã pandas 100 æ¬ããã¯ã®ãã®ã§ãããä»åã©ã³ãã ããã¯çã¯äœæããŠããŸãã
Why Ibis ïŒ
ãããªã Ibis 100 æ¬ããã¯ã®ç޹ä»ããå ¥ããŸãããæ¬èšäºã§ã¯ããªã Ibis ãå¿ èŠãªã®ããããŒã¿åŠçã©ã€ãã©ãªãšããŠã©ãããç¹ãåªããŠããã®ãã«ã€ããŠãããŒã¿åŠçã®çŸç¶ã課é¡ã«è§Šããªãã説æããèšäºåŸåã« 100 æ¬ããã¯ã®å 容ã«ã€ããŠèª¬æããããšæããŸãã
æ¬èšäºã®æ§æ
- èšäºåå
ããŒã¿åŠçã®çŸç¶ãšèª²é¡ãIbis ã®ç¹åŸŽã«ã€ã㊠- èšäºåŸå
Ibis 100 æ¬ããã¯ã«ã€ããŠ
ããŒã¿åŠçã®çŸç¶1
ããŒã¿åæã«ãããŠæ®æ®µãçããã¯ã©ã®ã©ã€ãã©ãªãçšããŠããŒã¿åŠçãè¡ã£ãŠããŸãã§ããããïŒãããã pandas ã䜿ã£ãŠãããšãã人ãå§åçã«å€ããšæããŸããå®éãããŒã¿åŠçãããäžã§ pandas ã¯éåžžã«åªç§ã§ãæ°å¹ŽåãŸã§ã¯ pandas ã Python ãšã³ã·ã¹ãã å ã®ããããããŒã¿ãæ±ãããã®æé©ãªã©ã€ãã©ãªã§ãããããããè¿å¹ŽãããŒã¿åæãããŒã¿ãšã³ãžãã¢ãªã³ã°åéã®é²åã倿§åãæ¥éã«é²ã¿ pandas ãåžžã«æé©ãªã©ã€ãã©ãªã§ã¯ãªããªã£ãŠããŸããã
-
ããŒã¿åæåé
æ°å¹ŽåãŸã§ã¯ pandas ã ãã§ããããããŒã¿åæãè¡ãããšãã§ããŸãããããããããŒã¿åæã«æ±ãããããã®ãé«åºŠåããããæ±ãããŒã¿ã®å€§èŠæš¡åãé²ãäžãpandas ã§ã¯æºè¶³ã®ããããŒã¿åŠçãã§ããªãã·ãŒã³ãå€ããªã£ãŠããŸããããã®ããè¿å¹Žã§ã¯ Dask ã Polars ãšèšã£ããããé«éã«ããŒã¿åŠçãè¡ãªããã©ã€ãã©ãªã䜿ãããããã«ãªã£ãŠããŸãããã§ã¯ã Dask ã Polars ã䜿ããããã«ãªãã°åé¡ãªãã®ã§ããããïŒ ä»åŸãããŒã¿åæãžã®èŠæ±ã®é«åºŠåãããŒã¿ã®å€§èŠæš¡åã¯é²ã¿ãæ°å¹ŽåŸã«ã¯ãŸãæ°ããããŒã¿åŠçã©ã€ãã©ãªãç»å Žãããšäºæ³ãããŸãããã®ãããããŒã¿åæåŸäºè ã¯ãä»åŸãæ°ããªã©ã€ãã©ãªã䜿ãããã®ç¶ç¶çãªåŠç¿ãå¿ èŠã«ãªããšèããããŸãã
-
ããŒã¿ãšã³ãžãã¢ãªã³ã°åé
èªç€Ÿã®ããŒã¿åºç€ã«å¿ããŠããŒã¿åŠçã©ã€ãã©ãªãåŠç¿ããå¿ èŠããããŸããããŒã¿åºç€ã®æè¡ãæ¥ã é²åã倿§åããŠãããèªç€Ÿã®ããŒã¿åºç€ã Hadoop ã§ããã° PySpark ãåŠã¶å¿ èŠããããŸãããããããåºç€ã Google Cloud ã«ç§»è¡ã䜵çšããããã«ãªãã°ã BigQuery ãåŠã°ãªããŠã¯ãããªãã éçºã§äœ¿ãããŒã¿åºç€ã«åãããŠããŒã¿åŠçã®ææ®µãåŠç¿ãç¶ããªããŠã¯ãããŸããããŸãããŒã¿åºç€ãç§»è¡ããå Žåã¯ãããŸã§äœ¿çšããŠããããŒã¿åŠçãã€ãã©ã€ã³ã®ã³ãŒããæžãæããå¿ èŠããããŸãã
ããŒã¿åŠçã«ä»åŸæ±ããããããš1
-
ããŒã¿åŠçãã¬ãŒã ã¯ãŒã¯ã®ã¢ãžã¥ãŒã«åãžã®ã·ãã
ããŒã¿åæãããŒã¿ãšã³ãžãã¢ãªã³ã°åéã®é²åã倿§åãèžãŸããåŸæ¥ã®ããã« pandas ã®ãããªç¹å®ã®ã©ã€ãã©ãªã«äŸåããã®ã§ã¯ãªããæ§ã ãªãŠãŒã¹ã±ãŒã¹ã«åãããŠæé©ãªãã¬ãŒã ã¯ãŒã¯ïŒã©ã€ãã©ãªãææ®µïŒãã¢ãžã¥ãŒã«ãšããŠæè»ã«éžæã§ããäœã³ã¹ãã§éçºãç¶ç¶ã§ããããšãéèŠã«ãªããŸãïŒãã㯠pandas ã³ã¢éçºè ã® Marc Garcia æ°ãæå±ããŠããŸãïŒã
ããŒã¿åŠçã®èª²é¡ãŸãšã
- ããŒã¿åŠçã©ã€ãã©ãªãããŒã¿åºç€ãé²åã倿§åããããšã«æ°ããããŒã¿åŠçã©ã€ãã©ãªãåŠç¿ããå¿ èŠãããã ç¶ç¶çãªåŠç¿ã³ã¹ããçºç
- ããŒã¿åŠçã©ã€ãã©ãªã®å€æŽãããŒã¿åºç€ã®ç§»è¡ã®éœåºŠã ããŒã¿åŠçãã€ãã©ã€ã³ã®ã³ãŒãæžãæãäœæ¥ã³ã¹ããçºç
ãããŸã§ã®èª¬æã§ãããŒã¿åŠçã®çŸç¶ã課é¡ãçè§£ã§ããããšæããŸãã以éã§ã¯ããããã®èª²é¡ã解決ããã®ã« Ibis ãéåžžã«æå¹ã§ããããšã説æããŠãããããšæããŸãã
çµ±åããŒã¿åŠçã©ã€ãã©ãªãšããŠã® Ibis
Ibis ã¯çµ±åçã«ããŒã¿åŠçãå®è¡å¯èœãªã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããã©ã€ãã©ãªã§ã çŸåšãµããŒãããŠãã18ãè¶ ããããŒã¿åŠçã©ã€ãã©ãªãåäžã®èšæ³ã§äœ¿çšããããšãã§ããŸãã
â» ã¡ãªã¿ã« Ibis ã¯è±èªã§ããããã®ããšãæããŸãã
- å ¬åŒ Reference
- Github
2024幎1æçŸåšãµããŒãããŠãããšã³ãžã³
BigQuery , ClickHouse , Dask , DataFusion , Druid ,
DuckDBïŒ MotherDuck ãžã®æ¥ç¶ããµããŒãïŒ , Exasol ,
Flink , Impala , MSSQL , MySQL , Oracle , pandas ( CuDF ) , Polars ,
PostresSQL , PySpark , Snowflake , SQLite , Trino

ç»ååŒçšïŒhttps://voltrondata.com/resources/ibis-cudf-pandas
Ibis ã¯å¿ èŠãªæã«ãã€ã§ãããã¯ãšã³ãã®åŠçãšã³ãžã³ãåãæ¿ããããšãã§ããã©ã€ãã©ãªã§ãããæ§ã ãªãŠãŒã¹ã±ãŒã¹ã«æè»ã«ãäœã³ã¹ãã§å¯Ÿå¿ããããšãã§ããŸãã以äžã®ããã«ç°ãªããã¬ãŒã ã¯ãŒã¯ããã¹ãŠåãèšæ³ã§ããŒã¿æäœããããšãã§ããŸãã
- ããã¯ãšã³ãã®åŠçãšã³ãžã³ãšã㊠pandas ã䜿çšããå Žå
ibis.set_backend("pandas") # pandas ãããã¯ãšã³ãã«æå®
t = (
ibis.read_csv("titanic.csv")
.select("name", "sex", "age", "fare")
.filter(t["sex"] == "female")
.mutate(
# age ãš fare ã®åå·®å€éèš
s.across(["age", "fare"] , {"zscore": lambda x: ((x - x.mean()) / x.std()) * 10 + 50}))
.order_by(ibis.desc("age")) # age åã§éé ãœãŒã
)
t.execute() # ã¯ãšãªã®å®è¡
- ããã¯ãšã³ãã®åŠçãšã³ãžã³ãšã㊠Polars ã䜿çšããå Žå
ibis.set_backend("polars") # polars ãããã¯ãšã³ãã«æå®
t = (
ibis.read_csv("titanic.csv")
.select("name", "sex", "age", "fare")
.filter(t["sex"] == "female")
.mutate(
# age ãš fare ã®åå·®å€éèš
s.across(["age", "fare"] , {"zscore": lambda x: ((x - x.mean()) / x.std()) * 10 + 50}))
.order_by(ibis.desc("age")) # age åã§éé ãœãŒã
)
t.execute() # ã¯ãšãªã®å®è¡
äžèšã®ã³ãŒãäŸã®ããã« åé 1è¡ç®ãä¿®æ£ããã ãã§ããã¯ãšã³ãã®åŠçãšã³ãžã³ã pandas ãã polars ã«åãæ¿ããããšãã§ããŸããã
æ°å¹ŽåŸã«ä»®ã«ãneo-pandas ãšããæ°èŠã©ã€ãã©ãªãç»å Žããããã Ibis ããµããŒãããå Žåã以äžã®ããã«ããã¯ãšã³ããæå®ããã°ããã«å©çšããããšãã§ããŸãïŒæ¢åã³ãŒãã®æžãæãã¯äžèŠã§ãïŒã
ibis.set_backend("neo-pandas") # neo-pandas ãããã¯ãšã³ãã«æå®
ãã®ããã« Ibis ãå©çšããããšã§ãããŒã¿åæãããŒã¿ãšã³ãžãã¢ãªã³ã°åéã®é²åã倿§åã«äŒŽãçºçãã æ°ããã©ã€ãã©ãªã®åŠç¿ã³ã¹ããã³ãŒãæžãæãã®äœæ¥ã³ã¹ããéããªãå°ãªãããããšãã§ããŸãã
Ibis ã®æŠèŠãç¹åŸŽ
ãã®ç« ã§ã¯ Ibis ã®æŠèŠãç¹åŸŽã«ã€ããŠç޹ä»ããŠãããŸãã
- æ§ã ãªããŒã¿åŠçã©ã€ãã©ãªãåäžã®èšæ³ã§æžããçŸåš18ãè¶ ããã©ã€ãã©ãªããµããŒãããŠããã 2023幎12æã«ã¯ CuDF ã«ã察å¿ããCuDF æ¡åŒµãèªã¿èŸŒãããã®ã³ãŒã1è¡ã远å ããã ãã§ããã¯ãšã³ãã CuDF ã«ããŠããŒã¿æäœãããããšãã§ããã ããã¯ãšã³ãã CPUç°å¢ã§ã¯ Polars ãGPUç°å¢ã§ã¯ CuDF ãšããå ·åã«ç°å¢ã«å¿ããŠåããã€ãã©ã€ã³ã䜿ãåããããšãã§ãããã§ããIbis ã§ã® CuDF ã®äœ¿ç𿹿³ã«é¢ããèšäºã¯ä»¥äžãåç §ããŠäžããã
- Ibis ã¯ã çµ±äžããã API ã€ã³ã¿ãŒãã§ãŒã¹ã®æäŸãšãå ¥åãããAPIãåãšã³ãžã³ã§åŠçããããã®åœ¢åŒã«å€æããåŠçãšã³ãžã³ã«æž¡ã圹å²ãæ ã£ãŠããã Ibis èªäœãããŒã¿åŠçãããŠããããã§ã¯ãªãïŒäººéã®èšèªã§äŸãããšãIbis㯠IbisèªãåããŒã¿ãã¬ãŒã èšèªã«ç¿»èš³ããŠãããéèš³ã®ãããªã€ã¡ãŒãžã ããŒã¿åŠçã©ã€ãã©ãªãšèšãããã€ã³ã¿ãŒãã§ãŒã¹ãšèšã£ãã»ããè¯ãããã§ãïŒã
- çŸåšã ã¹ãã³ãµãŒãä»ããŠãããéçºã¯éæé²è¡äž ã§ããµããŒããããã¬ãŒã ã¯ãŒã¯ãå¢ããŠããïŒ2023幎ã«ã¯ SnowFlake , Trino , Polars, CuDF çã«å¯Ÿå¿ïŒã
- 2015幎ããéçºãããŠããç Žå£çãªå€æŽãå°ãªãã äŸãã°ãçŸåšãCPUç°å¢ã§ã®åŠçé床ãéããšèšãããŠãã Polars ã¯äžèšèšäºã®éãæ¥éã«éçºãé²ããããŠããé¢ä¿ã§ç Žå£çãªå€æŽãå€ãã仿§å€æŽãåžžã«ãã£ããã¢ããããå¿ èŠãããã Ibis ã§ã¯ãã®å¿é ã¯å°ãªãã
- pandasã®ã³ã¢éçºè ã§ãã Marc Garcia æ°ãéçºã«æºãã£ãŠããïŒåè¿°ã§ã¢ãžã¥ãŒã«åãæå±ããŠãã人ã§ãïŒã
- Google ã® DVTïŒããŒã¿æ€èšŒããŒã«ïŒã®ããã¯ããŒã³ã«æ¡çšãããŠããã2 è€æ°ã®ç°ãªãããŒã¿ããŒã¹ã«åææ¥ç¶ã§ããIbisã䜿ãããšã§ã¯ãã¹ããã¯ãšã³ãã§ã®ããŒã¿æ¯èŒæ€èšŒãå¯èœã«ãªãã顧客ã®ç°å¢ãã Google Cloud ãžã®ç§»è¡æã®æ€èšŒã«æŽ»çšãããŠããã
The Data Validation Tool is an open sourced Python CLI tool based on the Ibis framework that compares heterogeneous data source tables with multi-leveled validation functions.
Ibis ã®ç¹åŸŽãŸãšã
- Ibisã¯ãåäžã®ããŒã¿åŠçãã¬ãŒã ã¯ãŒã¯ã«äŸåããããããããŠãŒã¹ã±ãŒã¹ã«å¯ŸããŠææ®µãæè»ã«éžæã§ããããšãå¿åããçµ±åããŒã¿åŠçã©ã€ãã©ãªã§ããã
- Ibis ã§ã¯ããã¯ãšã³ããåãæ¿ããã ãã§18ãè¶ ããããŒã¿åŠçãã¬ãŒã ã¯ãŒã¯ãå°ãªãã³ãŒãä¿®æ£ã§å©çšããããšãã§ããæ°ããã©ã€ãã©ãªã®åŠç¿ã³ã¹ãããããŒã¿åŠçãã€ãã©ã€ã³ã®ã³ãŒãæžãæãäœæ¥ã³ã¹ããéããªãå°ãªãããããšãã§ããã
- ã¹ãã³ãµãŒãä»ãçŸåšãéçºãéæé²è¡ããŠããããšãpandas ã®ã³ã¢éçºè ãéçºã«æºãã£ãŠããããšãGoogle ã® DVTïŒããŒã¿æ€èšŒããŒã«ïŒã«æ¡çšãããŠããããšããã ã©ã€ãã©ãªãšããŠã®å°æ¥æ§ã¯æããã
Ibis ã®å©çšã·ãŒã³
ãã®ç« ã§ã¯ãå®éã©ããã£ãã·ãŒã³ã§ Ibis ãæå¹ã§ãããã®æ³å®äºäŸã玹ä»ããŸãããªãããããŸã§ãäžäŸã§ããã以å€ã«ã掻çšã·ãŒã³ã¯ãããšæããŸãã
ããŒã«ã«ç°å¢ãšã¹ããŒãžã³ã°ç°å¢ä»¥éã§ããŒã¿åŠçææ®µãå€ããã3
äŸãã°ãHadoop ãã PySpark ã§ããŒã¿æœåºãå¿ èŠãªãããã¯ãéçºããã£ãå ŽåãããŒã«ã«ç°å¢ã§ã®éçºãã PySpark ã䜿çšãããšå°é£ã«ãªãããšããããŸããããã¯ãPySpark ãå€§èŠæš¡ãªããŒã¿ã»ãããšåæ£ã³ã³ãã¥ãŒãã£ã³ã°ç°å¢ã«æé©åãããŠããããã§ãããã®ãããªã±ãŒã¹ã§ã¯ããŸãããŒã«ã«ç°å¢ïŒåäžããŒãïŒã§ã®éçºã¯ãäŸãã° DuckDB ã§è¡ããã¹ããŒãžã³ã°ç°å¢ïŒè€æ°ããŒãïŒä»¥éã§ãã€ãã©ã€ã³ã PySpark ã«æžãæããããšãå€ãããšæããŸãããã®ãããªã±ãŒã¹ã§ Ibis ã䜿ããã°ãã¹ããŒãžã³ã°ç°å¢ä»¥éã§ã®ã³ãŒãæžãæãã¯çºçãããéçºãã§ãŒãºã«å¿ããŠããã¯ãšã³ãã DuckDB ãã PySpark ã«åãæ¿ããã ãã§æžãŸããããšãã§ããŸãã
è€æ°ã®ããŒã¿åºç€ã暪æãããããã¯ã
äŒæ¥ã«ãã£ãŠã¯ãããŒã¿ã®ã»ãã¥ãªãã£ã¬ãã«ã«ãã£ãŠããŒã¿ã管çããåºç€ã䜿ãåããŠãããšãããå€ãããšæããŸããäŸãã°ã ããŒã¿ X 㯠ãªã³ãã¬ç°å¢ã® Hadoop ãã PySpark ã§æœåºããããŒã¿ Y ã«ã€ããŠã¯ Google Cloud ãã BigQuery ã§æœåºãããããªã±ãŒã¹ããã£ãå Žåãæ åœè ã¯äž¡æ¹ã®ããŒã¿åŠçãã¬ãŒã ã¯ãŒã¯ãåŠç¿ããå¿ èŠããããŸãããããã¯ãPySpark ã䜿ãã A ãããš BigQuery ã䜿ãã B ããã®äºäººã§éçºãæ åœããã±ãŒã¹ãããããã§ããåŸè ã®å Žåã¯ãéçºã®æ åœãå±äººåããå¯èœæ§ããããŸãããã®ãããªã±ãŒã¹ã§ Ibis ã䜿ããã°ãäœèšãªåŠç¿ã³ã¹ããæãããããŸããIbis ã䜿ããéçºã¡ã³ããŒã§ããã°èª°ã§ããã€ãã©ã€ã³ãéçºã»ä¿å®ããããšãã§ããå±äººåã鲿¢ã§ããŸãã
Ibis ç§»è¡ã«ãã㊠SQL ã³ãŒããæµçšããã
ããŒã¿åŠçææ®µã Ibis ã«ç§»è¡ããéã®ã³ãŒãæžãæããæå°éã«æããããšãå¯èœã§ããIbis ã§ã¯å®è¡ã³ãŒãã« SQL ãå«ããããšãã§ãããããå ã®ããŒã¿åºç€ã§ SQL ã§ããŒã¿æœåºããŠããå Žåããã® SQL ããã®ãŸãŸæµçšããããšãå¯èœã§ãã以äžã¯ãDuckDB ã«ãããŠããŒã¿åŠçææ®µã SQL ãã Ibis ã«ç§»è¡ããéã« SQL ãæµçšããã³ãŒãã®äŸã§ãã .sql() ã« DuckDB ã® SQL ãæž¡ãã°å ã® SQL ãæµçšããŠããŒã¿åŠçãè¡ãããšãã§ããŸãããã®æ¹æ³ã«ãããIbis ãå°å ¥ããå Žåã® SQL ã Ibis ã¡ãœããã«æžãæããäœæ¥ã¯äžèŠã«ãªããŸãã
ibis.set_backend("duckdb") # ããã¯ãšã³ãã« DuckDB ãæå®
t = ibis.read_csv("titanic.csv", table_name="titanic")
(
t.sql("""
select
*
from titanic
where sex = 'male'
and name like '%Allison%'
""")
)
ããŒã¿åºç€ç§»è¡ã«ãã㊠SQL ã³ãŒããæµçšããã
ããŒã¿åºç€ã®ç§»è¡ã«äŒŽãã³ãŒãæžãæããæå°éã«æãããå Žåãããã Ibis ã§å®çŸã§ããå ŽåããããŸããäŸãã°ãå ã ã MySQL ãå©çšããŠã㊠DuckDB ã«ç§»è¡ããããšã«ãªã£ãå ŽåãMySQL ã§äœ¿çšããŠãã SQL ããã®ãŸãŸæµçšããããšãã§ããŸãã Ibis ã§ã¯å®è¡ã³ãŒãã« SQL ãå«ããããšãã§ããã〠SQL æ¹èšãåžåãããæ©èœããããŸãã以äžã®ããã« .sql() ã® dialect åŒæ°ã§ SQL ã®çš®é¡ãæå®ããããšã§ ããã¯ãšã³ã㯠DuckDB ã ãã©ã MySQL ã® SQL ã§ããŒã¿åŠçãè¡ãããšãå¯èœã§ãããã®æ¹æ³ã«ãããããŒã¿åºç€ç§»è¡ã«äŒŽã SQL ã® DuckDB æ§åŒãžã®æžãæãäœæ¥ããSQL ã Ibis ã¡ãœããã«æžãæããäœæ¥ã¯äžèŠã«ãªããŸãã
ibis.set_backend("duckdb") # ããã¯ãšã³ãã« DuckDB ãæå®
t = ibis.read_csv("titanic.csv", table_name="titanic")
# MySQL ã® SQL
sql = """
select
`name`,
`sex`,
`age`,
`fare`
from `titanic`
where `age` >= 30
"""
t.sql(sql, dialect="mysql") # dialect ã§ SQL ã®çš®é¡ãæå®
ãã®ä»ã®æ©èœ
Ibis ã«ã¯äžèšã§èª¬æããæ©èœä»¥å€ã«ããæ©æ¢°åŠç¿ãžã®ããŒã¿ã®ãã€ããã·ãŒã ã¬ã¹ã«è¡ãããã® IbisML ããdbt ã¢ãã«ã Ibis ã§äœæããããã® dbt-ibis ãªã©ã䟿å©ãªããŒã«ã倿°çšæãããŠããŸããç§ãè©³çŽ°ãææ¡ã§ããŠããªãããæ¬èšäºã§ã¯èª¬æããŸããããèå³ã®ããæ¹ã¯ãã²èª¿ã¹ãŠã¿ãŠäžããã
import ibis
import ibisml as ml
# Load some training and testing data
train = ibis.read_csv("training.csv")
test = ibis.read_csv("testing.csv")
# A recipe for a feature engineering pipeline that:
# - imputes missing values in numeric columns with their mean
# - applies standard scaling to all numeric columns
# - one-hot-encodes all nominal columns
recipe = ml.Recipe(
ml.ImputeMean(ml.numeric()),
ml.ScaleStandard(ml.numeric()),
ml.OneHotEncode(ml.nominal()),
)
# Fit the recipe against the training data
transform = recipe.fit(train, outcomes=["outcome_col"])
# Transform the training data and train a scikit-learn model
from sklearn.svm import LinearSVC
model = LinearSVC()
df_train = transform(train).to_pandas()
X = df_train[transform.features]
y = df_train[transform.outcomes]
model.fit(X, y)
# Transform the testing data and use the model to predict results
df_test = transform(test).to_pandas()
X = df_test[transform.features]
y = df_test[transform.outcomes]
y_pred = model.predict(X)
以äžããããŸã§ã§ Ibis ã®æŠèŠãã¡ãªãããã©ãããã·ãŒã³ã§æŽ»çšã§ããããã玹ä»ããŸããã ç¡é§ãªéçºã³ã¹ãã®æå¶ã¯æç¶çãªéçºã®å®çŸã«ãç¹ãã ããããããã¡ãªãããããããã ãªãšæããŠããã ããã®ã§ããã°ãæ¯é Ibis 100 æ¬ããã¯ã®æ¹ã«ããã©ã€ããŠã¿ãŠäžããïŒ
Ibis 100 æ¬ããã¯ã«ã€ããŠ
Ibis_100_knocks
çµ±åããŒã¿åŠçã©ã€ãã©ãª Ibis ãå¹ççã«åŠç¿ããããã®ã³ã³ãã³ãã§ãããããã Ibis ã®äœ¿ç𿹿³ãç¶²çŸ çã«ãŸãšããåœå åã® Ibis åŠç¿ã³ã³ãã³ãã ãšæããŸãïŒã¡ãªã¿ã«æµ·å€ã§ãããŸãåŠç¿ã³ã³ãã³ãããªãããã ã£ãã®ã§ä»åã¯è±èªçãäœæããŸããïŒã
ã³ã³ãã³ãæŠèŠ
- Notebook äžã®ã»ã«ã«èšèŒããã Ibis ã¡ãœããã«é¢ããèšå 100 åãè§£ããŠãããŸãïŒã¿ã€ã¿ããã¯å·ã®ä¹å®¢ããŒã¿çã®å®åšããããŒã¿ã«å¯Ÿã㊠Ibis ã¡ãœããã§åŠçãå®è¡ããŠãããŸãïŒã
- Githubã®ã¬ããžããªã«ã¯ Google Colab çãçšæããŠãããPython ç°å¢ã®æ§ç¯äžèŠã§ãããã«ã³ã³ãã³ããå©çšããããšãå¯èœã§ãã
- ã»ã¯ã·ã§ã³ã¯ãåºç€ (1-16)ãæœåº (17-33)ãå å·¥ (34-61)ãããŒãžãšé£çµ (62-67)ãçµ±èš (68-80)ãã©ããªã³ã° (81-82)ãSQL (83-85)ãã°ã©ã (87-88)ããã®ä» (89)ãã¿ã€ã¿ããã¯å·ä¹å®¢ã®çåäºæž¬(90-100)ã® 10 åã«åãããŠããŸãã
äŸãã°ãNotebook ã®ã»ã«ã«ä»¥äžã®ãããªåé¡ãèšèŒãããŠããŸããããã«è§£çã³ãŒããèšå ¥ããå®è¡ããŠåŠççµæã確èªããŸãã
# ã8ã
# t ã fare ã®åã§æé ã«äžŠã³æ¿ããŠè¡šç€ºããŸããã
# print(ans[8]) # è§£ç衚瀺
t = initialize1() # åæå
# -----------------------------------------
è§£çã確èªãããå Žåã¯ãã# print(ans[8])ãã®ã#ããåé€ããŠå®è¡ãããšä»¥äžã®ããã«è§£çã®ã³ãŒãã Tips ã衚瀺ããããšãã§ããŸãããŸãããã¹ãŠã®è§£çã« pandas ã§æžãå Žåã®èšæ³ãèŒããŠããŸãã
[answer8]
t.order_by("fare") # æé ãœãŒã
# t.order_by(ibis.desc("fare")) # éé ãœãŒã
----------------------------------------------
[Tips]
ã».order_by() ã¡ãœããã䜿çšããããšã§ãç¹å®ã®åã§ããŒã¿ããœãŒãã§ããã
ãããã©ã«ãã§ã¯æé ã«ãªã£ãŠããã
ã»éé ã§ãœãŒããããå Žå㯠t.order_by(t["fare"].desc()) ã®ããã«æžãã
ã»t.order_by(ibis.desc("fare")) ãšæžããŠãéé ãœãŒããã§ããã
ã»è€æ°åã§ãœãŒãããããšãå¯èœ
ex1) fareåã§æé ãœãŒãããåŸã«ageåã§æé ãœãŒããããå Žå
â» ãªã¹ãå
ã§ageåãå
ã«æžãç¹ã«æ³šæ
t.order_by(["age", "fare"])
ex2) fareåã§éé ãœãŒãããåŸã«ageåã§éé ãœãŒããããå Žå
â» ãªã¹ãå
ã§ageåãå
ã«æžãç¹ã«æ³šæ
t.order_by([ibis.desc("age"), ibis.desc("fare")])
ex3) fareåã§éé ãœãŒãããåŸã«ageåã§æé ãœãŒããããå Žå
â» ãªã¹ãå
ã§ageåãå
ã«æžãç¹ã«æ³šæ
t.order_by([ibis.asc("age"), ibis.desc("fare")])
----------------------------------------------
[åè] pandasèšæ³
df.sort_values('fare')
å©ç𿹿³
Google Colab äžã§å®æœã§ãããã Python ç°å¢ãæ§ç¯ããããšãªãå©çšå¯èœã§ãããªããåé¡ãè§£ãåã«ãå šè§£ç衚瀺çããèŠãŠäžåºŠã¡ãœãããææ¡ããããšãæšå¥šããŸãã
Google Colab
GitHubã®ããŒãžã«ç§»åãã以äžã®ãªã³ã¯ãã Colab ã®ããŒãžã«ç§»åã§ããŸãã
- Ibis 100 æ¬ããã¯
- å šè§£çè¡šç€ºæ¿ ïŒåãã¯ãã¡ãã®é²èŠ§ãæšå¥šïŒ
- ipynbãã¡ã€ã«ãéããåŸã«ãå é ã®ã»ã«ãå®è¡ãããšè§£çãã¡ã€ã«ãåé¡ã§äœ¿çšããããŒã¿ã»ããã®ããŠã³ããŒãããã³èªã¿èŸŒã¿ããããŸãã䜿çšããããŒã¿ã»ããã¯ãã¿ã€ã¿ããã¯å·ã®ä¹å®¢ããŒã¿çã«ãªã£ãŠããŸãã
- åèšåã®ã»ã«å ã«èšåã«å¯Ÿããã³ãŒããå ¥åããŠãããŸãã
- çããåãããªãå Žåã¯ãèšåã»ã«å ã®ã#print(ans[])ããšããèšè¿°ããã#ããæ¶ããŠå®è¡ããããšã§ãè§£çäŸã衚瀺ãããŸãã
- å šè§£ç衚瀺æ¿ã§ã¯ããã¹ãŠã®è§£çãšåºåçµæãæåãã衚瀺ããŠããŸããè§£çãåºåçµæããŸãšããŠç¢ºèªããããšãã«ã掻çšäžãããIbis ãäžåºŠãè§Šã£ãããšã®ãªãæ¹ã¯ãŸããã¡ãã®å šè§£ç衚瀺çã®ã»ããæµãèŠããŠã²ãšéãã¡ãœããã確èªããŠã¿ããšè¯ããšæããŸãã
ãã£ã¬ã¯ããªæ§æ
Ibis_100_knocks
ãâ input_ja/ âŠã100 ååã®è§£çãã¡ã€ã«ãåé¡ã§äœ¿çšããããŒã¿ã»ãããæ ŒçŽïŒæ¥æ¬èªçïŒ
â input_en/ âŠã100 ååã®è§£çãã¡ã€ã«ãåé¡ã§äœ¿çšããããŒã¿ã»ãããæ ŒçŽïŒè±èªçïŒ
ãâ output/ âŠãåé¡ã§ãã¡ã€ã«åºåããéã«ããã«æ ŒçŽ
ãã®ä»
- 100 æ¬ããã¯åŠç¿åŸã«ãIbis ãããŒã«ã«ç°å¢ã§äœ¿çšããããšãã¯
pip install ibis-frameworkã§èªèº«ã®ç°å¢ã«ã€ã³ã¹ããŒã«ããããªããpip install ibisãšãããšãŸã£ããéãã©ã€ãã©ãªãã€ã³ã¹ããŒã«ãããããæ³šæããããšã - Ibis ã€ã³ã¹ããŒã«æã¯ããã¯ãšã³ãã§äœ¿çšããã©ã€ãã©ãªããªãã·ã§ã³ã§æå®ãããDuckDB ãããã©ã«ãã®ããã¯ãšã³ããªã®ã§ åºæ¬ã¯
pip install ibis-framework[duckdb]ãšãªãã
pip install ibis-framework[duckdb] # éåžžã®ã€ã³ã¹ããŒã«
pip install ibis-framework[duckdb,pandas] # pandas ãããã¯ãšã³ãã§äœ¿çšãããå Žå
- Ibis ã§ãµããŒãããŠãã18è¶ ã®åŠçãšã³ãžã³ã«ãããŠããšã³ãžã³ããšã«ãµããŒãããŠããªãã¡ãœãããååšããå ŽåããããŸããäŸãã°ãDuckDB ããã¯ãšã³ãã§ã¯ã³ãŒãäžã§ SQL ãå®è¡ãã .sql() ã¡ãœããã䜿çšã§ããŸããã pandas ããã¯ãšã³ãã§ã¯ SQL ã«ã¯å¯Ÿå¿ããŠããªãã®ã§ .sql() ã¡ãœããã¯äœ¿çšã§ããŸãããåŠçãšã³ãžã³ãšãµããŒãã¡ãœããã®å¯Ÿå¿ã«ã€ããŠä»¥äžã®è¡šãåèã«ããŠäžããã
Ibis 100æ¬ããã¯å©çšã«ããã£ãŠã®çæç¹
- Python ååŠè ãå©çšããããšãåæã«äœæããŠãããããå å®¹ã¯æ¯èŒçç°¡æãªãã®ã«ãªã£ãŠããŸãã
- pandas 100 æ¬ããã¯ãããšããšã Python3 ãšã³ãžã㢠èªå®ããŒã¿åæè©Šéšãã®åºé¡å å®¹ã«æ²¿ã£ãŠäœæããŠããããåé¡ã«åãããããŸããããIbis çã¯å 容ãç¶²çŸ çã«ãªãããåç·šããŠããŸãã
- Ibis ã«ã¯ãã²ãšã€ã®åŠçãããå Žåã§ããããããªæžãæ¹ããããããããã«èšèŒããŠãè§£çãå¯äžã®è§£çã§ã¯ãããŸãã ïŒ äŸãã°ãselect ãçšããŠããŒã¿éžæããåé¡ã¯ãt["åå"] ã®ããã«æžããããšãã§ããŸãïŒã
- å ¬åŒãªãã¡ã¬ã³ã¹ã®å 容ãå®å šã«ææ¡ã§ããŠããããã§ã¯ãªãããããã¹ããã©ã¯ãã£ã¹ãªæžãæ¹ã確èªã§ã次第ãè§£çã鿿޿°ããŠãããŸãã
䜿çšç¯å²ïŒæ³šæäºé
-
䜿çšç¯å²
åäººã»æ³äººãåãã誰ã§ã䜿çšå¯èœ
(æå¿ã®å匷äŒã瀟å ã®ç ä¿®ã§äœ¿ãéããäžå ±ããã ãããšäœè ã®ã¢ãããŒã·ã§ã³ãäžãããŸã) -
泚æäºé
ã³ã³ãã³ãã®åé åžã»æ¹ç·šã¯äžå¯
ãããã«
ä»åãIbis 100 æ¬ããã¯ãšããã³ã³ãã³ãã«ã€ããŠç޹ä»ãããŠããã ããŸããã
æ¬ã³ã³ãã³ãã«é¢ããŠè³ªåã»èŠæãããã°ãé£çµ¡äžããã
