知人の店舗のレジデータを可視化した話
最初は知人の店のルーターの設定をするだけだったのだが、
レジデータがSQLで動いていることを知り、
これ、可視化したら面白いのでは?
という興味からデータを抽出しようと計画しました。
ただ、普段業務でTableauを使用する環境とは随分異なる環境で、
DBをろくに触ったことのない人間にはハードルが高かったです。
レジのDBはMicrosoft SQL Server2014でSSMSを使用しており、
レジ付近のPCからSSMSを使用してアクセスできる、というものです。
何が課題となったか?
① LANで構築されたDBに他のPCから接続できない
② SQLServerユーザーの作成方法がわからない
③ データをCSVで抽出してからpythonで各マスタと結合するとエラー
④ Tableauで描けるvizを作りたくても作れない
⑤ データが大きすぎてクレンジングが必要
…では一つずつ解説していきます。
①LANで構築されたDBに他のPCから接続できない
これは、自分の知識不足の問題です。
普段の業務の通り、レジデータを管理しているPCとは別のPCに
SSMS(別のアプリケーションでもOKですが)をインストールして、
IPアドレスを入れて…接続できないんだな、これが
結局は「SQL Server Browser」を無効から自動に設定したら無事
接続できました(2hくらいかかりました)
② SQLServerユーザーの作成方法がわからない
まずやろうとしたのは、
WireSharkを使ってパケットを解析
⇒パスワードを割り出す
という方法です。
最初は、DBの構成を変えたためにデータ作成の
トランザクションや日時処理に影響を出しやしないか、ということで、
既存のユーザーデータからSelect文でデータを抽出してしまえ、と思った
わけです。
ですが、これ結構危ない方法。(やったらダメな方法)
というのは、レジPCのSSMSのログイン情報でログインすると
管理者としてログインすることになることに後々気づきました。
結果として以下のサイトを参考にSelect文しか書けないユーザーを作成
して各種DBのデータを参照できるようにしました。
念には念を入れて、作業手順書を作成し作業しましたので
事なきを得ました。(わからないことは調べてから作業しよう)
③ データをCSVで抽出してからpythonで各マスタと結合するとエラー
さて、データをsqlarchemyで無事取り出してcsv化してpythonで結合
しよう…
(⇒ テーブル定義がなかったので全データを見て
何のコードがどのマスタに対応するか、とか割り出しました)
はい、結合できませんね。
なぜか、というと、csvにした時点で再度pandasで読み込むと
型がすべてobject型になっている
という地獄が発生しているのですね笑。
つまり、年月日やら、時刻やら、がない、テーブル定義も無い、抽出したときのDB情報も無い、ので再度お店に出向いて型を割り出しました。
上記の地獄の最中、マスタの結合、取得するカラム等、なるべくSQLで済むようにSQLクエリも作成しました。
SQLServerはあまり詳しくないのでこれも時間がかかりました。
④ Tableauで描けるvizを作りたくても、作れない
私はTableauユーザーなので
① TableauPublicでcsvを読み込みモックアップを作成
② python(plotly)コードに変換⇒streamlitに表示
とするのが、ビジュアライズには効率的かな、と考え作業しました。
ですが、ここでTableauの優秀さを認識
当然ですがTableauはビジュアライゼーションに特化したツール
なのでplotlyを使うと
① ダッシュボードアクションが使えない
② 二重軸のグラフがうまく描画できない
③ 色が細かく設定できない
④ シートの大きさ、配置を設定しづらい
という、Tableauでは当たり前にできていたことが、plotly*streamlit
だと難しい、という問題に直面してしまいました。(3週間くらいかかった)
plotlyはシンプルなVizに限るのかなぁ…。
⑤ データが大きすぎてクレンジングが必要
そもそもSelect文を書いてデータを抽出した時点から分かっていた
ことですが、レジデータは300MB以上あり、クレンジングは必須でした。
まずやったのは、
① NULL、0しか入っていないカラムを削除
② 値が2種類しか入っていないカラムを削除
の2点。
この時点で180MBくらいになりました。
さらに全データを見る&事前にもらっていた正解値と突き合わせて
10カラムくらい減らして、マスタと結合して…140MBくらいになりました。
クレンジングに使用したのはExcelとテキストエディタです。
まあ、日付は勝手に数値に変えるわ、コードを1900/1/2とかにするわ、Excelに対してはしばらく恨みを持ちますね。
おわりに
今回、実施したのは環境が整っていない&お金をかけない、という条件で
データを可視化した場合どうなるのか、の実験(?)でした。
感想としては、
Tableauは有能でDBが使える普段の環境に感謝
というもので、貴重な経験になりました。
(企業秘密だから無理なんだろうけどDB定義くらい用意しておいて欲しいナ)
この記事が気に入ったらサポートをしてみませんか?