Tableau Prepで半角カナを全角カナに変換(Pythonを利用)

Tableau Prep Builderはデータクリーニングのために様々なクリーニング作業ができますが、「半角カナから全角カナに変換」というメニューは有りません(2020年2月現在)。今回のブログでは、前回作ったPython環境を使って、半角全角変換処理を実施したいと思います。



なお、今はまだTableau Prep Builderだけでは半角全角変換はできませんが、こちらの投票サイトより機能リクエストができるので、是非標準機能として搭載されるよう皆さん投票をお願いします。

では手順をご紹介します。

Tableau Prepを起動し、半角カナが含まれているファイルやデータベースを入力として定義します。

今回はサンプルスーパーストアのデータで、製品名の一部を半角にしてみました。半角にしたのは「パック」と「コンロ」だけで、その他のカナは全角です。











Pythonを呼び出すには、「スクリプト」を配置します。+をクリックして「スクリプト」を選択します。最初は赤い!アイコンが出ますが、気にせず設定を続けます。
「接続タイプ」の「Tableau Python(Tabpy) Server」を選択します。つぎに「サーバー」の「Tableau Python(Tabpy) Serverに接続」ボタンをクリックします。




「サーバー」にlocalhost、「ポート」に9004を入力します。ユーザやパスワードは空欄でかまいません。「サインイン」ボタンをクリックします。






スクリプトを準備します。下記青字を全部コピーし、メモ帳やエディタに貼り付けて保存してください。今回は「製品名」というフィールドを半角から全角に変換するスクリプトを用意しました。単純に1列のデータで半角を全角に変更するだけなら、2箇所あるdf['製品名']をご自身のデータの列名に変更するだけでOKです。任意のフォルダに名前をつけて保存します。今回私はc:\python\hankaku_zenkaku.pyという名前で保存しました。

import mojimoji
def hankaku_zenkaku(df):
    df['製品名'] = df['製品名'] .apply(mojimoji.han_to_zen, ascii=False, digit=False)
    return df



最後にPythonのスクリプトを参照します。先程保存した.pyのファイルを参照し、「関数名」には先程のスクリプトの関数名、defの後の「hankaku_zenkaku」を入力します。









すべてを入力すると自動的にスクリプトが実行され、アイコンの上の!マークが消えます。「製品名」の値を確認すると、もう全角に変換されています。





今回のテストでは少し意地悪に「パック」という文字で変換してみました。半角カナは「パ」等の文字を2文字にしてしまうため、それを全角に変換するのは処理として難しいのですが、ちゃんと1文字の「パ」に変換してくれていました。

半角全角の変換には「mojimoji」を利用しました。前回の手順でpython上にmojimojiと、mojimojiを動作させるために必要なものをインストールしていました。そうするとスクリプトを数行用意するだけで文字の変換をPythonに実行させることができました。

今回はTableau Prep BuilderとPythonを連携させ、半角カナを全角カナに変換する処理を作りました。古いシステムからデータを取ったら半角カナばっかりで困っている、という方、クリーニングのフローの途中で半角を全角に変換する、などに是非活用してみてください。



Tableau+Python連携環境(Tabpy)をDockerで作ろう

Tableau Desktop、Tableau Server、Tableau PrepとPythonを連携できる、というのをご存知の方もいらっしゃると思いますが、連携させるための環境をつくるのに尻込みされている方々、こちらの手順で簡単に環境をつくることができます。コンテナ技術のDockerを使って、Tabpyサーバを作ってみましょう。


まず、環境を作りたいマシンにDockerをインストールします。今回は私のPC(Windows 10)に環境を作ります。



Dockerのダウンロードはこちらから。

インストーラーを実行します。選択項目はすべて初期値のままでOKを押下。



再起動が完了すると以下のような画面があらわれ、Dockerの環境が整います。




再起動が完了すると以下のような画面があらわれ、Dockerの環境が整います。



次にDockerファイルを準備します。DockerファイルはDocker上につくるコンテナイメージを定義したテキストファイルです。メモ帳やエディタ等を使って作成します。



今回はCent OSにPython3とTabpy、そしてTabpyを使って全角半角の文字変換を行いたかったのでそのライブラリを入れるように書きました。よくわからなければとりあえずこのままの状態で、下記青字部分をコピーし、メモ帳に貼り付けてPC内のフォルダにDockerfileという名前で保存しましょう。

# Cent OSをベースイメージとして使用
FROM centos:latest

# Tabpyとその前提パッケージ、半角変換のためのmojimojiとその前提パッケージをインストール
RUN yum install -y python3
RUN yum install -y gcc-c++
RUN yum install -y python3-devel
RUN python3 -m pip install --upgrade pip
RUN pip install tabpy
RUN pip install pandas
RUN pip install mojimoji

# コンテナのポート9004をホストに開示
EXPOSE 9004

# Tabpyを実行
CMD ["tabpy"]
                   

私はCドライブの下にdockerというフォルダを作成し、その中にDockerfileを作成しました。




コマンドプロンプトを起動します。コマンドプロンプトはWindowsアイコンを押してcmdと入力すると候補が出てきます。コマンドプロンプトが起動されます。黒い画面にコマンドを打ちますが、もうすぐ完了ですのでめげずに頑張ってください。

Dockerファイルを保存した場所へ移動します。cd (シー、ディー、スペースキー)と入力し、保存先フォルダをドラッグ・アンド・ドロップします。フォルダの場所が自動入力されるので、キーボードのEnterキーを押します。

次に、以下の青字をコピーし、コマンドプロンプトの上で右クリックします。コマンドが貼り付けらえるのでEnterキーを押します。(最後のピリオドまでコピーします)

docker build -t tabpy/tabpy .

Dockerイメージを作成する処理が始まります。しばらく待って処理が終わると、最初の画面のようにC:\docker> 等のように入力できるようになります。



イメージが正しく作成されたか確認します。以下の青字を貼り付けます。

docker image list


tabpy/tabpyがリストの中にあればイメージ作成は成功です。


作成したイメージをつかってコンテナを起動します。以下のコマンドを貼り付けます。

docker run -it -d -p 9004:9004 tabpy/tabpy


これでTabpyサーバが起動ができました。


動作確認してみましょう。

Tableau Desktopを起動し、ヘルプメニューから「設定とパフォーマンス」>「外部サービス構成の管理」を選択します。










外部サービスはTabpyを選択し、サーバーにはlocalhostと入力、ポートには9004と入力し、左下の「テスト接続」をクリックします。












接続が成功するとこのようなメッセージが出ます。



これでご自身のPC上にTabpyが動く環境ができました。PCを再起動したりするとTabpyは停止するので、docker runコマンドで再度実行してください

今回はTabpyを動作させる環境をつくる手順をご紹介しました。次回はこの環境を使ってTableau Prepで半角文字を全角文字に変換する処理を作りたいと思います。

なお、2020.1リリースとともに、Tabpyはバージョン1.0となり、Tableauからのサポートが受けられるようになりました。より安心してお使いいただけます。


Tableau Prep Conductor を使って見よう!

みなさん、こんにちは bashii です。

Tableau 2019.1 の発表にて、Prep Conductorが発表になりました。さて、”Prep Conductor"とはいったいどのようなものなのでしょうか?

(以下資料はβ版の画面を利用しています。実際の2019.1の画面とは異なる可能性があります。当資料はTableau社の正式なレビューを受けていません。最新技術情報の共有を目的とした一技術文書としての公開となります。)

◇ Prep Conductor とは何ですか?

Tableau はTableau Prepというデータ準備のツールを提供しており、PC上で複雑なデータ前処理をフロー化してバッチ実行するプロダクトを提供しています。前処理した結果は、CSV、Tableau の抽出、またはTableau Serverにデータソースとしてパブリッシュし、Tableau Desktopから可視化、分析をすることができます。可視化をする際に複雑な前準備を完了した状態の結果に対してアクセスすることで、大元のデータソースへのアクセス処理を回避し、分析処理のパフォーマンス向上が望めます。

一言でいえば、「Prep Conductor 」はいままでPC上で実行していたPrepフローをサーバー側で一括管理、スケジュール実行する機能です。

例えば…

① 当日の売り上げを夜間に締めて、マスターデータや他のデータと結合して前処理し、分析用のデータソースを作成、パブリッシュしておく (Prep Conductorでバッチのスケジュール実行)

② 翌日の朝、ユーザーに①で前処理しておいたデータソースを提供し自由に分析してもらう (Tableau Desktop または Tableau Server の Web-Edit を利用する)といった運用を考えるとイメージが付きやすいでしょうか。



なお、Prep ConductorはTableau Server / Tableau Online のコンポーネントとして含まれます。(別途ライセンスを有効化することで利用可能となります。)ですので、Prep Conductor用の製品を別途インストールする必要はありません。


◇ Prep Builderとは何ですか?

今までのTableau Prep(デスクトップ製品) は Prep Conductorが登場したことで、Prep Builderに名称変更になります。ちょっとややこしいですが、デスクトップ環境で稼働する製品をPrep Builder、サーバーで稼働する製品をPrep Conductorと呼び方を分けることになりました。

◇ Prep Conductorの利用ケース例

Prep Conductor の利用構成として以下のようなケースが考えられます。

① フローの作成
Prep BuilderからCloud上のデータソースを入力とした前準備を行い、出来上がった結果をTableau Serverに共有のデータソースとしてパブリッシュするフローを作成。

② フローのパブリッシュ
Prep Builder から Prep Conductor (実際はTableau ServerまたはTableau Online)にフロー自体をパブリッシュする。

③ フローのスケジュール実行
Prep Conductor上で定期的にフローがスケジュール実行され、パブリッシュされたデータソースの内容が更新される。

④ データの可視化分析
ユーザーは定期的に更新される、パブリッシュされたデータソースを利用して日々の分析を行う。



◇ それでは実際に触ってみましょう

今回は、クラウド上のデータソース(Google Cloud SQL)に売上データが毎日入ってくる想定で、一日の終わりにこれを集計し、分析用のデータソースを作るフローを定期実行し、Tableau Serverにパブリッシュして分析に利用するというシナリオを考えます。

① まずはPC上のPrep Builderでフローを作成し、Tableau Server にパブリッシュします。



パブリッシュが完了するとPrep Conductor(Tableau Server上)にパブリッシュされたフローがブラウザの画面に表示されます。



Scheduleから"Every night End of the Day" のスケジュールを作成します。(午前2:00に実行するためのスケジュールを作成します。)



FlowのCreate new task で先ほど作成したSchedule(実行タイミング)でTaskを作成します。



タスクがスケジュールされたことを確認します。



ブラウザから即時実行することもできますので、動くかどうか一回確認してみます。



成功しました。



Run History でフローが実行された履歴、所用時間を確認します。




後はこのフローが定期的に実行されるのを待ちます。

ここで、Tableau Desktopに戻ってデータの分析をしてみましょう。

Tableau DesktopからTableau Serverに接続し、フローによってパブリッシュされたデー
タソースに接続します。



次に可視化を行います。この時点では2019/04/02までのデータが入っています。



この間にもトランザクションデータベースにはその日のトランザクションが更新されています。営業時間が終わり、夜中のフローが流れ、実行履歴が追加されます。ここでは疑似的にGoogle Cloud SQLのMySQLに2019/04/03 のデータを追加してみます。



夜中にTableau Server上のバッチが実行されます。



次の日の朝に、データ分析ユーザーはTableau Desktop 上でデータソースの更新を行います。



すると、夜間に更新された前日の更新を含むデータソースが参照できるようになります。以下のエリアチャートで、2019/04/03 の日付のデータが入ってきていることが分かります。



また、Server Status -> Flow Performance History より、パブリッシュされたフロー全体を見て、いつ何時にどのフローが成功、失敗したか、また処理時間にどれだけ所要したかを一覧で見ることができます。



また、ユーザーごとにフローを実行できるか、編集できるかなど異なるパーミッション設定を行えることも特徴です。




◇ Prep Conductorを使うメリット

最後に、Prep Conductorを使うメリットについて、まとめます。

① フローをサーバー側でスケジュール実行
フロー実行のためにクライアントPCを常時起動しておく必要がない

② スケーラビリティ
サーバーまたはクラウドのリソースをフロー実行時に有効活用できる
(多くの場合、クライアントPCよりリソースが潤沢)

③ フローの一括管理
個々に作成していたフロー成果物を一括管理できる

④ セキュリティ
フローの実行、ビュー、ダウンロード可否などのをユーザーごとに設定できる

⑤ フロー実行のモニタリング
フローの実行の履歴、実行時間をモニターし集中管理できる


以上、Tableau Prep Conductor を使ってみた報告でした!! 参考になれば幸いです。