Skip to content

command line tools to handle CSV(Comma Separated Value) file by python and bash script

License

Notifications You must be signed in to change notification settings

maundergit/csv_tools

Repository files navigation

Table of Contents

csv_tools

PythonやBashシェルスクリプで作成したCSV(Comma Separated Value)ファイルを取り扱うコマンドラインツール集。

主な機能は以下の通り。

  • CSVファイル内のデータを可視化するチャートの作成(Plotly Expressによる)
  • Pythonのpandasの機能を用いたCSVの処理
  • csvkit,xsvなどのCSV用ツールを用いた処理

収録しているツールのリストはコマンドリストに示した。

なぜこれを作ったか

製造現場での品質管理や、深層学習適用を考えた場合、既存の製造現場の状況確認は必須となる。 本来均質であることを前提にする部分 ー例えば検査装置の同種複数のセンサーの出力ー が実際には偏りを持っていた場合、均質前提でデータを収集し、深層学習の学習データとすることはいい結果を産まない。 またこの種の不均質性は、本来あってほしくないものでありながら、経年変化や機材の更新により生じやすいものであり、監視すべき項目となる。

この均質さを確認するために、現場で使用されているPLC(Programable Logic Controler)などから出力される比較的巨大なCSVファイルを表計算ソフトなどで処理を行おうとすると、データサイズ的な問題や、処理速度、機能面で問題が発生する。大体この手のCSVファイルは、行数とはともかく、列数がやたら多く、数千列というのもザラで、そのままデータベースへ登録することもままならない。

このため、できるだけ高速で且つ柔軟に処理することを目的として、複数のコマンドライン型ツールをパイプ接続した形で、試行錯誤しながら使うことを目的にここにあるツールを作成した。

特に plotly express のデータに対する柔軟性や、チャート種別の豊富な点は、どこに偏りがあるか探しながらデータ解析を行う上では非常に強力な手段となる。

ここで作成したコマンドツールの組み合わせで、様々な処理や可視化を行い、特徴を把握しやすい有望そうな処理手順、可視化形式を決めて、シェルスクリプト化、又は単独アプリケーションとすることで、 再現性を持たせた上で、状況(均質性)の監視に用いる。

スタートガイド

プロジェクトをローカルに複製して、検証、実行する手順を説明します

必要条件

OSは Ubuntu 18/20 において開発、動作確認を実施している。 その他の必要なパッケージは以下の通り。

  • python 3.8.6
  • python packages
    • Pillow 8.0.1
    • plotly 4.12.0
    • openpyxl 3.0.5
    • lmfit 1.0.1
    • numpy 1.19.2
    • pandas 1.1.4
    • scipy 1.5.2
    • seaborn 0.11.0
    • statsmodels 0.12.0
    • csvtotable
  • csvkit 1.0.5
  • csvtool 1.5.1
  • nkf 2.1.4
    csv_wc.shにて使用
  • sqlite3 3.34.0
    csv_sqlite_insert.sh,csv_to_db_csvkit.sh,csv_to_db_shell.shにて使用
  • xsv 0.13.0
    csv_join.sh,csv_status_xsv.sh,csv_tool_list.shにて使用
  • jp
    csv_hist_console.shにて使用
sudo apt install csvtool nkf sqlite3
conda install pillow openpyxl lmfit numpy pandas scipy seaborn statsmodels
pip install --upgrade csvtotable

plotly,xsv,jpについては、以下を参照してインストールを行う。

インストール

git cloneでダウンロードした後に、csv_utilityディレクトリとcsv_plotディレクトリにPATHを設定する。 又は選択したものをPATHの設定されたディレクトリにコピーして使用する。

git clone https://github.com/maundergit/csv_tools.git

examplesディレクトリに移動して、以下のコマンドを実行することにより、ビット情報の20秒毎のヒストグラムが散布図 形式で得られる

csv_trimtime.py --change_timefreq='D=ABC002:%Y-%m-%d %H\:%M\:%S:floor:20s' bit-pattern-headers.csv|\  
	csv_status.py --mode sum --group D -|csv_uty.py --drop_columns=ABC000,ABC001 - |\  
    csv_uty.py --stack=D - |csv_plot_scatter.py --output=bit-pattern_time_histogram.html --size=stacked_result - D category

bit-pattern_time_histogram

チャート描画のサンプルはexamplesディレクトリーへ移動して、csv_plot/csv_plot_sample.shを実行することで、チャートの例が生成される。 その他のサンプルについては、各コマンドのHelp出力(--help)を参照のこと。

ツールのリスト

収録しているツールのリストはコマンドリストに示した。

各コマンドのヘルプメッセージを csv_plot_helpcsv_utility_helpにまとめている。

例用例

主として利用しているライブラリなど

作者

ライセンス

This project is licensed under the MIT License - see the LICENSE file for details

このプロジェクトは MIT License のもとで公開しています。詳しくはLICENSE を参照してください。

謝辞

  • CSVを取扱ための様々なツールを開発、提供してくれている方々に感謝!
    特に、 csvkitは、パイプ接続を用いた組み合わせによる柔軟さと強力さを教えてもらいました。
  • Pandas+Plotlyの組み合わせは、データの方を気にせず、多次元データの表示が容易にできるばかりでなく、 インタラクティブ型のチャートを他の人と配布、共有できる点で、議論がしやすくなり、非常に強力な環境を構築できました。
  • Data Processing Resources: Command-line Interface (CLI) for CSV, TSV, JSON, and XML | FZ Blogs には様々なCSV取扱ツールの最新情報があり、CSVの処理で大変参考になりました。

参考サイト

About

command line tools to handle CSV(Comma Separated Value) file by python and bash script

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published