SlideShare a Scribd company logo
sqldf for pandas
PyCon JP 2015
Ryoji Ishii
@airtoxin
自己紹介
• 石井遼司
• 株式会社ALBERT
• twitter/github/soundcloud→airtoxin
• Python/JavaScript/Scala?
みなさん
pandas使っていますか?
DataFrame便利ですよね
プロットとか
グルーピング
data.groupby(func, axis=0).mean()
df.groupby('g').boxplot()
グルーピング
自分で用意した集約関数では…?
data.groupby(func, axis=0).mean()
df.groupby('g').boxplot()
apply?
level?
<pandas.core.groupby.DataFrameGroupBy object at 0x10e4684d0>
sqldf for pandas
DataFrameの結合
http://pandas.pydata.org/pandas-docs/stable/merging.html
ordered_merge?
append?
merge?
concat?
conbine?
update?
sqldf for pandas
もうSQLでよくね…?
みんなだいすきSQL
airtoxin / pysqldf
forked from yhat/pandasql
pysqldf
yhat/pandasqlが既にDataFrameにSQL発行でき
るライブラリを公開していたが、メンテされてい
なかった。
pandasqlをベースに、クエリ発行が出来るデータ
形式を増やしたり、UDFを使えるようにしたり。
SQLite3の構文をサポート。
$ pip install pysqldf
Install
How to use
from pysqldf import SQLDF, load_iris
sqldf = SQLDF(globals())
iris = load_iris()
sqldf.execute("select * from iris;")
union
union
buyer1
buyer2
union
buyer1
buyer2
union
buyer = sqldf.execute("""
select name, sex, age
from buyer1
union all
select name, sex, age
from buyer2;
""")
union
buyer1
buyer2
buyer
join
purchase_log
join
buyer
purchase_log
join
buyer
join
purchaser_log = sqldf.execute("""
select *
from buyer as b
inner join
purchase_log as p
on b.name = p.buyer;
""")
join
purchaser_log
User Defined Function
UDF
表中の値1つを受け取り、値1つを返す
関数を定義する。
SQLDFのコンストラクタに辞書形式で
関数を渡す。→定義した関数が辞書の
keyで使えるようになる。
UDF
def is_royal_customer(name):
if name == "alice":
return True
else:
return False
sqldf = SQLDF(globals(), udfs={
"is_royal_customer": is_royal_customer
})
sqldf.execute("""
select
*,
is_royal_customer(name) as royal
from (
select name, sex, age
from buyer1
union all
select name, sex, age
from buyer2
)
""")
UDF
UDF
UDF(aggregate)
集約クラスか関数を作成。
集約クラスはsqlite3のドキュメントを参照。

関数はカラムの値のリストを受け取り、値1
つを返すようにする。
UDFと同じようにSQLDFのコンストラクタに
関数またはクラスを渡すと使えるようになる。
UDF(aggregate)
def is_royal_bought(royals):
if 1 in royals:
return True
else:
return False
sqldf = SQLDF(globals(), udafs={
"is_royal_bought": is_royal_bought
})
UDF(aggregate)
sqldf.execute("""
select
item,
sum(quantity),
is_royal_bought(royal)
from purchaser_log
group by item
""")
UDF(aggregate)
まとめ
purchaser_log = sqldf.execute("""
select *
from (
select *, is_royal_customer(name) as royal
from (
select name, sex, age
from buyer1
union all
select name, sex, age
from buyer2
)
) as b
inner join
purchase_log as p
on b.name = p.buyer;
""")
purchaser_log
sqldf.execute("""
select
name,
item,
sum(quantity) as cnt
from purchaser_log
group by name, item
""")
sqldf for pandas
sqldf.execute("""
select
name,
item,
sum(quantity) as cnt
from purchaser_log
group by name, item
""").pivot("name", "item", "cnt")
sqldf for pandas
sqldf.execute("""
select
name,
item,
sum(quantity) as cnt
from purchaser_log
group by name, item
""").pivot("name", "item", "cnt").fillna(0)
sqldf for pandas
import seaborn as sns
sns.heatmap(pivot, annot=True, linewidths=0.5)
sqldf for pandas
DataFrame meets SQL
💕
みんなつかってくれ!
おわり
Ad

Recommended

pandasによるデータ加工時の注意点やライブラリの話
pandasによるデータ加工時の注意点やライブラリの話
Masashi Shibata
 
pysqldf
pysqldf
airtoxin Ishii
 
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
SaitoTsutomu
 
Sphinx HTML Theme Hacks
Sphinx HTML Theme Hacks
Shoji KUMAGAI
 
今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQL
Soudai Sone
 
pythonでオフィス快適化計画
pythonでオフィス快適化計画
Kazufumi Ohkawa
 
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Yahoo!デベロッパーネットワーク
 
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
dcubeio
 
パッケージングの今と未来
パッケージングの今と未来
Atsushi Odagiri
 
Postgre sqlから見るnosql
Postgre sqlから見るnosql
Soudai Sone
 
Road to success System.IO.Compression.ZipArchive Feedback
Road to success System.IO.Compression.ZipArchive Feedback
Kazushi Kamegawa
 
日本のオープンデータプラットフォームをPythonでつくる
日本のオープンデータプラットフォームをPythonでつくる
Yuta Kashino
 
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門
Hironori Sekine
 
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
 
パッケージングの今
パッケージングの今
Atsushi Odagiri
 
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
aoshiman
 
Tokyo Webmining #12 Hapyrus
Tokyo Webmining #12 Hapyrus
Koichi Fujikawa
 
20140120 presto meetup
20140120 presto meetup
Ogibayashi
 
2分でパッケージを作ってインストールする
2分でパッケージを作ってインストールする
TokorosawaYoshio
 
パッケージングの今と未来
パッケージングの今と未来
Atsushi Odagiri
 
とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。
Kouhei Maeda
 
Pentaho CTools 20140902
Pentaho CTools 20140902
Teruo Kawasaki
 
メタな感じのプログラミング(プロ生 + わんくま 071118)
メタな感じのプログラミング(プロ生 + わんくま 071118)
Tatsuya Ishikawa
 
実務で役立つデータベースの活用法
実務で役立つデータベースの活用法
Soudai Sone
 
ldapvi & python-ldap で stress-free life
ldapvi & python-ldap で stress-free life
Kouhei Maeda
 
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
Nagi Teramo
 
Webクローリング&スクレイピングの最前線 公開用
Webクローリング&スクレイピングの最前線 公開用
Lumin Hacker
 
SekainoKAO by TeamKAO
SekainoKAO by TeamKAO
Hideki
 
PyLadies Tokyo - 初心者向けPython体験ワークショップ開催の裏側
PyLadies Tokyo - 初心者向けPython体験ワークショップ開催の裏側
Katayanagi Nobuko
 

More Related Content

What's hot (20)

パッケージングの今と未来
パッケージングの今と未来
Atsushi Odagiri
 
Postgre sqlから見るnosql
Postgre sqlから見るnosql
Soudai Sone
 
Road to success System.IO.Compression.ZipArchive Feedback
Road to success System.IO.Compression.ZipArchive Feedback
Kazushi Kamegawa
 
日本のオープンデータプラットフォームをPythonでつくる
日本のオープンデータプラットフォームをPythonでつくる
Yuta Kashino
 
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門
Hironori Sekine
 
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
 
パッケージングの今
パッケージングの今
Atsushi Odagiri
 
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
aoshiman
 
Tokyo Webmining #12 Hapyrus
Tokyo Webmining #12 Hapyrus
Koichi Fujikawa
 
20140120 presto meetup
20140120 presto meetup
Ogibayashi
 
2分でパッケージを作ってインストールする
2分でパッケージを作ってインストールする
TokorosawaYoshio
 
パッケージングの今と未来
パッケージングの今と未来
Atsushi Odagiri
 
とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。
Kouhei Maeda
 
Pentaho CTools 20140902
Pentaho CTools 20140902
Teruo Kawasaki
 
メタな感じのプログラミング(プロ生 + わんくま 071118)
メタな感じのプログラミング(プロ生 + わんくま 071118)
Tatsuya Ishikawa
 
実務で役立つデータベースの活用法
実務で役立つデータベースの活用法
Soudai Sone
 
ldapvi & python-ldap で stress-free life
ldapvi & python-ldap で stress-free life
Kouhei Maeda
 
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
Nagi Teramo
 
Webクローリング&スクレイピングの最前線 公開用
Webクローリング&スクレイピングの最前線 公開用
Lumin Hacker
 
パッケージングの今と未来
パッケージングの今と未来
Atsushi Odagiri
 
Postgre sqlから見るnosql
Postgre sqlから見るnosql
Soudai Sone
 
Road to success System.IO.Compression.ZipArchive Feedback
Road to success System.IO.Compression.ZipArchive Feedback
Kazushi Kamegawa
 
日本のオープンデータプラットフォームをPythonでつくる
日本のオープンデータプラットフォームをPythonでつくる
Yuta Kashino
 
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門
Hironori Sekine
 
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
 
パッケージングの今
パッケージングの今
Atsushi Odagiri
 
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
aoshiman
 
Tokyo Webmining #12 Hapyrus
Tokyo Webmining #12 Hapyrus
Koichi Fujikawa
 
20140120 presto meetup
20140120 presto meetup
Ogibayashi
 
2分でパッケージを作ってインストールする
2分でパッケージを作ってインストールする
TokorosawaYoshio
 
パッケージングの今と未来
パッケージングの今と未来
Atsushi Odagiri
 
とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。
Kouhei Maeda
 
Pentaho CTools 20140902
Pentaho CTools 20140902
Teruo Kawasaki
 
メタな感じのプログラミング(プロ生 + わんくま 071118)
メタな感じのプログラミング(プロ生 + わんくま 071118)
Tatsuya Ishikawa
 
実務で役立つデータベースの活用法
実務で役立つデータベースの活用法
Soudai Sone
 
ldapvi & python-ldap で stress-free life
ldapvi & python-ldap で stress-free life
Kouhei Maeda
 
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
Nagi Teramo
 
Webクローリング&スクレイピングの最前線 公開用
Webクローリング&スクレイピングの最前線 公開用
Lumin Hacker
 

Viewers also liked (20)

SekainoKAO by TeamKAO
SekainoKAO by TeamKAO
Hideki
 
PyLadies Tokyo - 初心者向けPython体験ワークショップ開催の裏側
PyLadies Tokyo - 初心者向けPython体験ワークショップ開催の裏側
Katayanagi Nobuko
 
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
Takayuki Shimizukawa
 
Ry pyconjp2015 karaoke
Ry pyconjp2015 karaoke
Renyuan Lyu
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
Tetsuya Morimoto
 
アドネットワークのデータ解析チームを支える技術
アドネットワークのデータ解析チームを支える技術
hagino 3000
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
Shinya Takamaeda-Y
 
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
cocodrips
 
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
Shinichi Nakagawa
 
Django から各種チャットツールに通知するライブラリを作った話
Django から各種チャットツールに通知するライブラリを作った話
Yusuke Miyazaki
 
3分でサーバオペレーションコマンドを作る技術
3分でサーバオペレーションコマンドを作る技術
Kei IWASAKI
 
フリーでやろうぜ!セキュリティチェック!
フリーでやろうぜ!セキュリティチェック!
zaki4649
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
 
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
Masayuki Ishikawa
 
初心者のためのWeb標準技術
初心者のためのWeb標準技術
Shogo Sensui
 
Behat Driven Development
Behat Driven Development
Ryo Tomidokoro
 
コードレビューのススメ
コードレビューのススメ
kawahira kazuto
 
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
Koichi Sakata
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Tomoki Hasegawa
 
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
ichikaway
 
SekainoKAO by TeamKAO
SekainoKAO by TeamKAO
Hideki
 
PyLadies Tokyo - 初心者向けPython体験ワークショップ開催の裏側
PyLadies Tokyo - 初心者向けPython体験ワークショップ開催の裏側
Katayanagi Nobuko
 
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
Takayuki Shimizukawa
 
Ry pyconjp2015 karaoke
Ry pyconjp2015 karaoke
Renyuan Lyu
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
Tetsuya Morimoto
 
アドネットワークのデータ解析チームを支える技術
アドネットワークのデータ解析チームを支える技術
hagino 3000
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
Shinya Takamaeda-Y
 
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
cocodrips
 
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
Shinichi Nakagawa
 
Django から各種チャットツールに通知するライブラリを作った話
Django から各種チャットツールに通知するライブラリを作った話
Yusuke Miyazaki
 
3分でサーバオペレーションコマンドを作る技術
3分でサーバオペレーションコマンドを作る技術
Kei IWASAKI
 
フリーでやろうぜ!セキュリティチェック!
フリーでやろうぜ!セキュリティチェック!
zaki4649
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
 
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
Masayuki Ishikawa
 
初心者のためのWeb標準技術
初心者のためのWeb標準技術
Shogo Sensui
 
Behat Driven Development
Behat Driven Development
Ryo Tomidokoro
 
コードレビューのススメ
コードレビューのススメ
kawahira kazuto
 
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
Koichi Sakata
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Tomoki Hasegawa
 
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
ichikaway
 
Ad

Recently uploaded (8)

OWASP ASVS5.0 overview 20240607_owaspnagoya
OWASP ASVS5.0 overview 20240607_owaspnagoya
OWASP Nagoya
 
色について.pptx .
色について.pptx .
iPride Co., Ltd.
 
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
NTT DATA Technology & Innovation
 
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
 
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
 
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
 
Protect Your IoT Data with UbiBot's Private Platform.pptx
Protect Your IoT Data with UbiBot's Private Platform.pptx
ユビボット 株式会社
 
AI技術共有会2025-06-05_DeepResearchの理解と実践.pdf
AI技術共有会2025-06-05_DeepResearchの理解と実践.pdf
Takuma Oda
 
OWASP ASVS5.0 overview 20240607_owaspnagoya
OWASP ASVS5.0 overview 20240607_owaspnagoya
OWASP Nagoya
 
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
NTT DATA Technology & Innovation
 
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
 
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
 
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
 
Protect Your IoT Data with UbiBot's Private Platform.pptx
Protect Your IoT Data with UbiBot's Private Platform.pptx
ユビボット 株式会社
 
AI技術共有会2025-06-05_DeepResearchの理解と実践.pdf
AI技術共有会2025-06-05_DeepResearchの理解と実践.pdf
Takuma Oda
 
Ad

sqldf for pandas