TECH BLOG

MENU

オンプレクラウド

Dr.Sum

Dr.Sum

Dr.SumにはPythonとの連携機能があります!Dr.Sumに蓄積された大量のデータに対して形態素解析や回帰・分類など、より高度な分析を行うことができます!

形態素解析とは例えば「これはペンです。」といった文章を「これ」や「ペン」など、品詞ごとに分割する手法です。ワードクラウドと組み合わせると、SNSの投稿からトレンドワードを視覚的に表現したり、飲食店のレビューから頻繁に取り上げられるメニューをピックアップするといった分析が可能です。

今回はとあるレストランのコメントを例にPython連携機能で形態素解析を行い、MotionBoardのワードクラウドで可視化する方法を紹介します。

本記事では上記の形態素解析を行うための方法を最短距離で紹介していきます。そのため、Pythonの基本や本来必要なデバッグ作業、Python連携機能特有の記述については深く触れずに紹介していきます。興味のある方はマニュアルに一連の流れを体験できるチュートリアルもありますので、こちらをご覧ください!

Python連携機能のチュートリアル

 

※注意点※

 

事前準備

本記事に必要なサンプルデータおよび、Pythonスクリプトはこちらからダウンロードください。

 

サンプルデータのインポート

今回はとあるレストランのコメントデータをサンプルとして使います。「restaurant_comments」というテーブルにZIPファイル内にある「restaurant_comments.csv」をインポートします。例では「Python連携」というデータベースに格納しています。

CSVの中身はこのようになっています。サンプルということで、一部文章が変ですがあしからず。。。

ID,年齢,性別,コメント
1,52,その他,感動的な魚料理が食べられて、完璧なサービスが最高の。リラックスできる雰囲気で、とても満足でした。次は友人と来たいです。- 田中
2,42,男性,最高のパスタが食べられて、迅速なサービスが豪華な。歓迎される雰囲気で、とても満足でした。また来たいです。- 山田
3,53,男性,最高のステーキが食べられて、素晴らしいサービスが豪華な。ロマンチックな雰囲気で、とても満足でした。また来たいです。- 木村
4,22,その他,最高のステーキが食べられて、フレンドリーなサービスが豪華な。ロマンチックな雰囲気で、とても満足でした。友人にもおすすめしたいです。- 鈴木
5,54,その他,素晴らしいパスタが食べられて、気配りのあるサービスが豪華な。居心地が良い雰囲気で、とても満足でした。次は友人と来たいです。- 佐藤
6,25,男性,美味しいスープが食べられて、迅速なサービスが美味しい。心地よい雰囲気で、とても満足でした。友人にもおすすめしたいです。- 田中

 

インメモリサーバーの設定

Pythonスクリプトはインメモリサーバー上で実行されます。そのため、インメモリサーバーの登録及び、対象テーブルのインメモリ化を行います。設定自体は難しくないのでご安心を!

まずはサービスの起動を行います。Windowsのサービスを起動し、「Dr.Sum X.X In-Memory Server」及び「Dr.Sum X.X Launch Server」が起動していることを確認します。

 

インメモリサーバーの登録を行います。※ インストール時に登録した場合は飛ばしてOKです。

インメモリサーバーをDr.Sum Serverに登録する

 

登録後、利用するインメモリサーバーをEnterprise Managerから選択します。

使用するインメモリサーバーを選択する

 

最後に、サンプルデータのテーブルをインメモリ化します。

  1. 「restaurants_comments」テーブルを右クリック-[プロパティ]-[インメモリ化する]にチェック-[OK]

  2. もう一度「restaurants_comments」テーブルを右クリック-[インメモリ]-[データをロード]

  3. データのロード後、[OK]をクリック

Pythonスクリプトの配置

ZIPファイルの中にある「morph_analysis.py」を「<Dr.Sum のインストールフォルダ>\Server\samples\udtf-py\script\」直下に配置します。

スクリプトの中身はこのようになっています。

import MeCab
import pandas as pd

# 結果表スキーマ取得関数
def schema_func(input_schema):
    # 形態素解析の結果を追加
    return input_schema + ["品詞 VARCHAR", "単語 VARCHAR", "基本形 VARCHAR"]

# 処理関数
def proc_func(context, input, *args):
    keitaisoStyle = "-Owakati" #"mecabrc" "-Ochasen" "-Owakati"
    mecab = MeCab.Tagger(keitaisoStyle)
    targetKey = args[0]

    df_bf = pd.DataFrame(columns = input.columns)
    addColumnName = ["品詞", "単語", "基本形"]
    extWordClass = ["名詞", "動詞","形容詞"]

    dropColumnName = []
    df_bf = df_bf.drop(columns=dropColumnName)

    for cname in addColumnName:
        df_bf[cname] = ""

    for recordIdx, requestSentence in enumerate(input[targetKey]):
        mecab.parse('')
        node = mecab.parseToNode(str(requestSentence))
        # print(recordIdx, mecab.parse(requestSentence).split(" "))

        while node:
            if(node.surface==""):
                node = node.next
                continue
            keitaisoList = node.feature.split(",")
            # print(keitaisoList)
            if(keitaisoList[0] in extWordClass):
                # print(node.surface, keitaisoList)
                tmp = [keitaisoList[0], node.surface, keitaisoList[6] if len(keitaisoList)>=8 else node.surface]
                add_df = pd.DataFrame([input.iloc[recordIdx].to_list() + tmp], columns = df_bf.columns)
                df_bf = pd.concat([df_bf, add_df], axis=0)
            node = node.next
    return df_bf

スクリプトでは、以下の2つの処理を行っています。

 

必要なライブラリのインストール

今回は形態素解析でよく使われる「MeCab」と呼ばれるライブラリを使用します。事前にMeCab本体のインストールが必要です。下記からうまくダウンロードできない場合はミラーサイトなどをご利用ください。

公式ダウンロードページ(MeCab: Yet Another Part-of-Speech and Morphological Analyzer)

 

通常、Python環境構築時はpipと呼ばれるコマンドを使って各種ライブラリをインストールします。Python連携機能においてもpipで直接インストールすることが可能ですが、Python Developer Toolと呼ばれるツールがあり、GUI操作でインストールが可能です!

Enterprise ManagerのアイコンからPython Developer Toolを起動してみましょう!

 

 

  1. [設定]-[パッケージ管理]-[pipコマンドの実行]をクリック

  2. [pipコマンド]のプルダウンメニューから「インストール(pip install)」を選択

  3. パラメーターに「mecab-python3」と入力

  4. [実行]をクリック

  5. 同様に以下のライブラリもインストールします。「パラメーター」に下記の文字列をそれぞれ入力し[実行]をクリック

    • pandas

    • unidic-lite

実行結果の最後に「Successfully installed MeCab=[Version]」などと表示されれば、問題なくインストールできています。以上で準備完了です!

 

Pythonスクリプトを実行

実行方法

事前準備は以上です。では、早速Pythonを実行してみましょう!と言いたいところですが、どうやってPythonスクリプトを実行すればよいでしょう?

外部のアプリケーション(特にMotionBoardなど)はDr.SumとSQLを通じてデータをやり取りします。この仕組みに則り、PythonスクリプトもSQLから実行できるようになっています。普段見慣れているSELECT文やUPDATE文と比べると特殊な書式になりますが、下記のようなSQL文になります。

SELECT * 
FROM
udtf::serial_py(
    restaurant_comments, 
    py_file_path='PY_SCRIPT_ROOT/morph_analysis.py', 
    func_name='proc_func', 
    args = ["コメント"],
    schema_func_name='schema_func' 
) TU

Pythonスクリプトも併せて見ると記述内容をイメージしやすいです。

# 結果表スキーマ取得関数
def schema_func(input_schema):
    ### <--- 省略 ---> ###

# 処理関数
def proc_func(context, input, *args):
    ### <--- 省略 ---> ###

serial_py()の中身に渡す情報は下記のようになります。

 

SQL Executorから実行

では、実際に形態素解析されたデータ(テーブル)が取得できるか確認してみましょう。SQL Executorを開き、「接続先データベース」にrestaurant_commentsテーブルを格納したデータベース(例では「Python連携」)を選択後、以下のSQLをコピー&ペーストして実行します。

SELECT * 
FROM
udtf::serial_py(
    restaurant_comments, 
    py_file_path='PY_SCRIPT_ROOT/morph_analysis.py', 
    func_name='proc_func', 
    args = ["コメント"],
    schema_func_name='schema_func' 
) TU

 

数秒程度の処理に時間を要しますが、問題がなければ元データに「品詞」、「単語」、「基本形」の3項目が追加されたテーブルが表示されます。

 

MotionBoardで可視化

SQLを実行することでPythonの処理結果を取得できることを確認できました。最後に、このSQLをMotionBoardから実行・グラフ化する方法を紹介します。MotionBoardではユーザーが自由にSQLを記述し実行する機能として「カスタムビュー」があります。接続先のデータソースによって利用可否が異なりますが、Dr.Sumは利用可能です。

 

カスタムビューの作成

  1. MotionBoardを起動

  2. [管理]-[システム設定]-[接続/認証]-[外部接続]

  3. メニューからDr.Sumの接続を選択-[カスタムビュー]タブをクリック-[新規作成]

  4. [名前]には「データベース名.***」の書式で入力(***は任意でOK、例では「Python連携.形態素解析」)。[クエリー]欄には前章で紹介したSQLを貼付

  5. [実行確認]を押して解析結果が取得できることを確認し、[OK]を押します。外部接続画面に戻ったら[保存]をクリック

 

ワードクラウドアイテムの作成

  1. アイテムツールバーから「ワードクラウド」アイテムを選択・配置

  2. データソースを作成します。データソース選択画面で[接続先]に対象のDr.Sumを選択

  3. 「CustomView」の中から、外部接続画面で作成したビューを選択

  4. データソース編集画面では、件数をカウントするためカスタム項目を作成

  5. [追加項目作成]-[カスタム項目]にチェックし[OK]をクリック。[項目名]は「件数」、[データ型]は「数値」、[計算式]は「1」を入力

  6. ワードクラウド表示方法の変更のため、ワードクラウド上でクリック後、[プロパティ]をクリック

    1. [単語スタイル]タブ-[単語]に「単語」

    2. [フォントサイズ重み]に「件数」を選択

    3. [データポイント]タブ-[データポイント項目]にて「単語」及び「件数」以外のチェックを除外

以上の操作で、形態素解析の結果がワードクラウドアイテムに表示されることを確認します。

 

まとめ

本記事ではPython連携機能を使ってコメントを形態素解析し、MotionBoardで可視化する方法を紹介しました。

Dr.Sumは大量のデータを蓄積できるため、例えば機械学習タスクを実行する上で非常に都合がよく、自由度高い分析を実現できます!一方で、データ量が多くなると解析に時間がかかるため、常に新しいデータに対してのみ学習を行う(オンライン学習)の仕組みを導入するのもよいですね。

この記事にリアクションしてみませんか?

  • 分かりやすい (2)
  • 問題が解決した (1)
評価いただいてありがとうございます!
プロフィールへ

宇根 昌和

新卒でウイングアーク1stへ入社、プリセールス活動を行っています。Pythonをベースに様々なツールからデータをDr.Sumへ集約しMotionBoardで可視化する仕組みを作ったり、Web APIを使ったデータ蓄積ノウハウをテーマにイベント登壇したりしています。Dr.Sum及びMotionBoardを中心とした役立つ情報を発信していきます!

Related article

Related article関連記事

Pick up

Pick upおすすめ記事

特定の文字列で分割して階層構造をつくりたい!~DS Scriptで分割する~1

  • #データ加工
  • #DS Script

2023.07.17

Dr.Sum

DS Scriptで必要なテーブルだけ再構築(リビルド)をしよう

  • #DS Script

2023.07.06

Dr.Sum

「データポイント数が、しきい値をオーバーしました」というエラーの解決方法【データベースで処理をしよう】

  • #データ加工

2023.06.13

MotionBoard

Ranking

Rankingランキング

1

Excelのデータを加工したい。~変換(横持ち⇔縦持ち)について~

  • #データ取り込み
  • #データ加工

2021.01.19

Dr.Sum

2

【Excelの取り込み】データベースにExcelデータをインポートしよ…

  • #データ取り込み

2020.08.14

Dr.Sum

3

【実は動く】フリーのSQL実行ツールでDr.SumのSQLを書こう

  • #外部接続
  • #SQL

2023.11.13

Dr.Sum

Info

Information

ウイングアーク1stからのお知らせ