FC2ブログ

白旗製作所

tableauを使ってみた

tableau(タブロー)というBIソフトウエアを触ってみました.
きっかけはこの辺のツイート↓

少し興味を持って調べてみるとアカデミックライセンスは無償とのこと.
それならと気軽にインストールして試しに使ってみることにしました.

インストールしたのはTableau Desktop本体と,データ前処理ソフトのTableau Prepの2つです.
インストーラは前者が370MBで後者が450MBほど.まあそんなもんですよね.

とりあえず私がよく使用する気象データ・室温データ・空調消費電力データなどをぶっこんでみました.
使い方については他にも記事がいろいろあるので割愛しますが
使ってみた感想を一言で言うなら,「データの可視化がExcelよりも早くできる」という感じです.

私の用途ではそこまで膨大なデータを取り扱うわけではありませんでしたので,こんな感想になってしまいました.
Excelって意外と優秀で,そこまで膨大なデータでなければ意外と分析に使える可視化はそこまで大変ではないです.
一方データ量が増えたりそもそもデータがDBに入っていたりすると取得の手間があるので,
その点データへのアクセスのしやすさとスケールへの対応力としては,Tableauも十分利用価値があると思います.

それから,少し詳しい分析や補間,複数データの繰り返し処理をしようとすると
Tableauでは手が出ない領域となってしまうのでPythonやRなどが必要になってきます.
要は使い所に応じて使い分けましょうね,という感じですね.

このあたりはTakashi Kandaさんのツイートにぶら下がってるところでも言及されています.
>PythonとRはもちろん使えた方が良い
>のですが、わりと簡単な可視化は
>Tableau使った方が効率が良い

Tableauを導入する場合,経営者層や総務部門などへの導入が効果的なんじゃないかと感じます.
Pythonなどのプログラミング知識がない人でも効率的に大規模データを取扱い分析できるツールであるためです.
開発部門や情シ部門でも企画系の方には有用でしょう.導入コスト(年間ライセンス費,学習コスト)がかかりますが,
ソフトの機能に対しては安いと思います.

個人的にはもう少し画像出力が豊富だと良いなあと思ってしまいました.
まあスクショして貼れば良い用途ならそれで良いので,これも使い分けですかね.
将来的に分析できる内容も充実してくると更に良いと思います.

スポンサーサイト
  1. 2018/09/14(金) 20:23:24|
  2. Python
  3. | トラックバック:0
  4. | コメント:0

pythonのエラー「Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.」

Pythonで書いたスクリプトをWindowsコマンドラインから実行しようとした際,
("python hogehoge.py"を実行)
「Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.」
というエラーが発生して,スクリプトが実行できませんでした.
Pythonスクリプトの中身はChainerでNNモデルを作成し,
学習済みモデルを読み込んで実行するものです.

環境は以下です.
Python 3.5.4 Anaconda
OS:Windows 7 Ultimate 64bit

以下のサイトには,Intel MKLをダウンロード・インストールして
System32フォルダにmkl_のつくdllをコピーすれば解決すると記載がありましたが,
私の環境では改善しませんでした.
pythonで機械学習:windowsで「Intel MKL」DLL エラー
pythonのエラー「Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.」が解決

その後,エラーメッセージに出ていたlibiomp5md.dllというライブラリを
以下からダウンロードしてpythonのスクリプトファイルと同じフォルダに置くことで解決しました.

libiomp5md.dll-Dll ファイルダウンロード
このlibiomp5md.dllというライブラリですが,IntelのOpenMPというライブラリ群の一つで
Intel IPP7.0で提供が終了しているそうです.
今(2018/5),最新版はIPP9.0のようなので,最新版のMKLでは含まれていなかったのかも知れません.

  1. 2018/05/27(日) 15:43:22|
  2. Python
  3. | トラックバック:0
  4. | コメント:0

紙の英文をテキストとして読み込み日本語翻訳する方法

紙でしか入手できなかった本や論文をPCに取り込むのですが、
PDF化だけでなく英文を日本語に翻訳して表示したいことが良くあります。

スキャナでPDF化したあとPDFソフトに付属するOCR機能を使ってテキスト化したあと
Google翻訳にかけるのも手ですが、PDFのOCRだと改行が無駄に入って文書として翻訳できなかったり
OCRの性能によって読み取れたり読み取れなかったりします。
また、OCR機能の付属するPDFソフトは優良だったりします。

以下の方法では、無料で手軽に英文誌をPCに取り込んで日本語に翻訳できます。

①英語文書を写真撮影するかスキャナで取り込む
 なるべく高画質なデジカメか、スキャナで文書を取り込みます。
 取り込み形式は画像(JPEG)やPDFどちらも大丈夫です。
 複数枚取り込むなら連続して同一のPDFファイルにしておくのが良いです。

②GoogleDriveにアップロード
 GoogleDriveの適当なフォルダにアップロードします。

③GoogleDocsで開く
 アップロードした写真orPDFファイルを右クリックで選択し、
 Open with→Google Docsとします。
 すると、少し読み込みに時間がかかりますが、
 クラウド上のOCR機能で文字認識されたテキストがGoogle Docsで表示されます。

④Google翻訳にかける
 Google Docs上部のメニューバーから、Tools→Translate Documentを選択します。
 するとポップアップが表示されます。言語をJapaneseとしてファイル名を指定してTransrateすると
 翻訳されたテキストがGoogle Docsの別ファイルとして保存されます。
 便利!
  1. 2018/05/17(木) 19:07:10|
  2. 自炊
  3. | トラックバック:0
  4. | コメント:0

ArrayListを使った行列(配列の配列)の取扱い

Javaで行列計算を行なうとき,普段は固定長でのためdouble[][]型としていたのですが,
DBからのデータ取得時などに可変長としたいことがあり,ArrayListを使用しました.
ArrayListと行列(double[][])データへの変換がわかりにくかったのでメモしておきます.

①ArrayListからdouble[][]への変換
ArrayListで行列データを定義するには,以下を行います.

ArrayListの入れ子にしてしまうと,行列へのキャストが面倒になりますし,
データ構造もわかりにくくなるので,double[]配列をArrayList化します.

ArrayListにはデータを以下のように追加していきます.

データを追加し終わった後,double[][]行列に変換するには,以下を行います.

toArray()することでArrayListの中身がObject[]クラスで配列化されますので,
実体としてはdouble[]の配列でdouble[][]となります.これをキャストして
double[][]型の変数に入れます.

引数なしのtoArray()を使うと,返り値がObject[]型のままとなり
キャストができずClassCastExceptionで例外となってしまいます.
そのため,引数には必ず変換先の配列を入れておきます.
事前に変換先を用意していない場合は同じ型のデータをnewして入れます.


②double[][]配列からArrayListへの変換
この場合,java.util.Arrays.asList()を使用します.
このメソッドはstaticなため,インスタンスは必要なく使用できます.

asList()で得たListはそのままだと従前のArrayList<>とは別クラスであり
add()などの関数が使用できません.そこで,asList()で得たListでさらに
ArrayListのインスタンスを定義してやる必要があります.

こうすることでadd()も使えるdouble[]のArrayListが作成できます.


参考文献:
Listから配列への変換,配列からListへの変換
http://www.dab.hi-ho.ne.jp/sasa/biboroku/java/toArray.html


Arrays.asList() で生成した ArrayList が add() を使えないワケ - Qiita
https://qiita.com/chooyan_eng/items/08f977525e5f4e4acd7e

  1. 2018/05/13(日) 12:23:40|
  2. Java
  3. | トラックバック:0
  4. | コメント:0

python matplotlibからベクタ形式画像ファイルの出力

Python matplotlibで描画した画像のベクタ形式での画像出力に
少し手間取ったので,方法をメモしておきます.


(1)通常のpngファイル出力
通常のPNGファイルであれば,出力先ファイルの拡張子をpngにしておけば
plt.savefig()で勝手にPNGで出力してくれます.

import matplotlib.pyplot as plt
plt.plot(x, y)
file = figure.png
plt.savefig(file)


(2)Windowsメタファイル(EMF)出力
plt.savefigが対応している出力形式にemfは含まれないため,
拡張子をemfにしても出力されません.

plt.savefigが対応する画像形式のうち,svgというベクタ形式ファイルで出力すると,
別途Inkscapeというソフトでsvg→emfに変換出来るようです.
Pythonから使いやすいように,inkscapeを呼び出すスクリプトを作成しておきます.

①Inkscapeのインストール
https://inkscape.org/ja/download/windows/より,installer(exe)をダウンロードして
Inkscapeをインストールします.

②スクリプトの作成
以下の内容をテキストファイルに入力し,"svg2emf.cmd"という名前で
パスの通った場所に保存しておきます.
内容としては,"inkscape.exe SVGファイルのフルパス名 -M 拡張子をemfに変えたフルパス名"を
コマンドプロンプトで実行させるものになります.

@echo off
set inkscape="C:\Program Files\inkscape\inkscape.exe"
%inkscape% %1 -M %~dpn1.emf

③pythonで以下を記述します.
import matplotlib.pyplot as plt
import os
plt.plot(x, y)
file = C:\Users\User\figure.svg
plt.savefig(file)
os.system("svg2emf "+file)

これでsvg出力した後emf変換まで出来るようになりました.


(3)PostScriptファイル(EPS)出力
通常,plt.savefigで拡張子をpsまたはepsにすると,PostScriptファイルを出力できます.

しかしながら,私の環境では以下のようなエラーが出て出力することができませんでした.

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 18-19: ordinal not in range(256)

恐らく図に利用している文字列等のエンコードエラーだと思うのですが,解決法がわかりませんでした.
どのみちPPT等で作成したemf画像もepsに変換して利用しようと思っていたため,
汎用的なemf→eps変換ソフトで対応することにしました.
どうやらMetafile to EPS Converterというソフトで変換できるようです.

①Metafile To EPS Converterのインストール
http://wiki.lyx.org/Windows/MetafileToEPSConverterからインストーラをダウンロードし
インストールします.

②スクリプトの作成
以下の内容を"emf2eps.cmd"という名前でパスの通った場所に保存します.

@echo off
set metafile2eps="C:\Program Files (x86)\Metafile to EPS Converter\metafile2eps.exe"
%metafile2eps% %1 %~dpn1.eps

③pythonでの実行
svgファイルを出力してemfに変換した後,以下を実行すればepsが作成されます.
os.system("emf2eps "+os.path.splitext(file)[0]+".emf")

これでめでたくEPSファイルも作成できました.

参考:
Windows版 Inkscape の入手
matplotlibのグラフをemfファイル形式に変換
SVG ファイルを EMF ファイルに変換して PowerPoint に貼り付ける
Metafile to EPS Converter
Metafile to EPS Converter で Windows Metafile を EPS に変換
バッチファイルでファイルパスからファイル名や拡張子を自由に取り出す方法
  1. 2018/01/04(木) 13:13:44|
  2. Python
  3. | トラックバック:0
  4. | コメント:1
次のページ