スポンサードリンク



こんにちは。sinyです。

この記事では、DjangoでPandas(DataFrame)を活用する方法についてご紹介します。

django-pandasを利用する。

下記リンクのdjango-pandasを利用すると、Djangoのモデルクラス(テーブルに格納されているデータ)を簡単にDataFrame形式に変換することができます。

 

まずは、基本的な使い方を具体例で説明します。

以下のような家計簿テーブルとカテゴリテーブルを例に説明します。

 

この家計簿テーブルには以下のようなデータが登録されているとします。

普通に全レコードを取得する場合は以下のコードで取得できます。

 

kakeibo_dataはQuerySet形式のデータですが、django-pandasのread_frameを使うことで一発でDataFrame形式に変換することができます。

使い方はめちゃくちゃ簡単で以下の通り。

 

read_frameの第1引数にQuerSetデータを指定し、fieldnamesに取得したいテーブルクラスのカラム(属性)をリスト形式で指定するだけです。

dfを表示してみると、以下の通りDataFrame形式に変換されていることが確認できます。

 

django-pandasの応用事例

 

データフレームに変換できることはわかったけど、何かうれしい使い方はないかな・・・
ということで、django-pandasの活用方法を考えてみました。

テーブルデータの内容をDataFrame形式に簡単に変換できるなら、to_csvメソッドを組み合わせて「画面のボタンポチ!」でcsv形式のデータを生成→ダウンロード出来たらうれしいかも!
ということで作ってみました。
簡単なデモ動画です。
テーブルに格納されているデータ一覧をcsv形式でダウンロードする機能がほしい!」なんていう要件がある場合は、django-pandasを活用することで上記のような機能を簡単に実装できます。
具体的な実装方法は以下の通りです。

CSV生成用のボタンを定義する。

例えば、一覧表示画面用のテンプレートに以下のようなCSV生成ボタンを定義し、CSVファイル生成ボタンを押すと、URLパターン「kakeibo:export_kakeibo」をCALLするようにしておきます。

 

urls.pyの設定

CSV生成ボタンが押された際にCALLされるURLパターンを定義します。

例えば、アプリケーション配下のurls.pyのurlpatternsに以下のような定義を追加しておきます。

 

また、プロジェクト直下のurls.pyには以下を追加してCSVが生成されるメディアファイルパスを定義しておきます。

 

ビューの設定

次にviews.pyの設定です。

CSV生成ボタンを押した際にCALLされるexport_kakeibo関数を定義します。

※エラー処理等は一切考慮していない簡単なコード例になってます。

 

django-pandasのread_frameでDataFrame形式に変換したデータ(qs)を、以下to_csvメソッドを使ってメディアファイルパスにcsv形式で保存しています。

 

日本語文字化け対策のために「encoding='utf_8_sig'」、DataFrameのIndexを除外するために「index=False」を指定しています。

これで、メディアファイルパスにcsvファイルが生成されます。

settings.pyには以下のメディアファイルの設定をしておきます。

 

テンプレートの設定

最後に、csvファイル生成ボタンを押した後に表示されるCSVダウンロード画面を定義します。

 

非常に簡素に作っていますが、これで以下のような画面が表示されてkakeibo_list.csvをクリックするとメディアディレクトリ上からcsvファイルをダウンロードできるようになります。

一旦メディアディレクトリにcsvを格納しているのが微妙(手間をかけている)な気がしますが、突貫で作ったのでご了承ください。
(ほんとはメモリ内で完結させられれば良いと思いますが・・・)

あと、pandas自体はフィルタリングや集計処理なんかも簡単にできるので、その辺の機能をうまく組み合わせればほしい情報だけを
csvに落とすなんてこともできると思います。

以上、django-pandasの基本操作と活用事例についてでした。

少しでも参考になれば幸いです。

 

おすすめの記事