😊

とりあえず突っ込んで見るデータ概要

2022/09/25に公開

どんなデータなのか一括で見たい

Kaggle しかり、他のデータ分析しかり、前処理は面倒だし同じ作業の繰り返しというのもつまらない。

サクッと見たいときに Jupiter Notebook をカタカタするのも面倒…

こんな気持なのはきっと私だけじゃないですよね?ということで、今のところ csv ファイルだけですが、全体を俯瞰するような Python コードを作成したので公開します。

公開先はここです。クローンしてご利用ください。

https://github.com/miris-mimitako/basic_analyzer

どんな入出力にしたか?

現在(2022/09/25)は入力として csv をリストで入力可能とし、複数のデータを一括で閲覧できるようにしました。

今後はモジュールとして pandas Dataframe も対応したいと考えています。

楽に入力できることが一番ですね。

出力は最初 Markdown を考えていましたが、表の見栄えやグラフの閲覧性を考えて HTML ファイルにしました。

HTML ファイルとしたことで CSS による見栄えの調整もできて良いです。なんちゃって TOC もあるので、見たいところへジャンプもできます。

出力結果はこんな感じです。

具体的なところは下記に記述します。

実行

今回のコードはクラス化されていますので、次の方法でインスタンスを作成します。

if __name__ =="__main__":
  BA = BasicAnalyze()
  BA.analyze(csv_files = [r".\test_train.csv"])
  del BA

インスタンスの作成後に、csv ファイルをリストで渡します。

処理が終了後に del でインスタンスを削除します。

del によるインスタンス削除時に html ファイルの最後の仕上げをしますので、ここまでが必須のコードです。

インスタンス作成時は、record フォルダと日時によるデータ保存用のフォルダが自動作成されます。実行後はこの中に生成された html ファイルを確認してください。

データ種別の分離

とりあえずデータに Nan があるのか?タイプは何なのか?を調べるために df.describe()や df.info()を利用するでしょう。これだけなら Jupiter Notebook が手っ取り早いです。

今回はここを工夫して、バイナリデータかカテゴリデータかそれ以外か、それも str なのか int なのかを識別して出力します。

これによって、単に str や int で定義されているということよりも多くの情報を獲得できます。

この結果を受けて、データラベリング、One-Hot などの選択をするのか、それともその他の処理をするのかについて検討がつけやすいです。

グラフ化

グラフはほとんど seaborn で構成しており、面白みもありませんが、データ種別でバイナリやカテゴリと自動識別されたものについては、それを利用して hue を設定しデータ分解能を上げています。

今回工夫したのはグラフ化の中でも、いろいろな組み合わせを一括で見ることができるという点です。pairplot で一括の情報をみるというのは常套手段でしょうが、散布図以外もいろいろとみたいですよね?

見ることができるのは、ヒートマップ(相関係数)、ヒストグラム、Q-Q プロット、バイオリンプロット、散布図です。hue が設定できるものは設定ありなし、それぞれを確認できます。

これがすべてとは考えていませんが、とりあえず見たいと思うようなグラフはひととおり確認できるはずです。

データ例としては次のとおりです。

ヒートマップ(相関係数)

まずはデータ全体を確認します。このヒートマップによってそれぞれのデータが相関関係にあるのかどうかを一目でわかります。

ヒストグラムと Q-Q プロット

次に、各列単位でデータの分布がどうなっているかを確認するため、ヒストグラムによりばらつきの程度を見える化します。

また、そのヒストグラムが正規分布にどれだけ近いかを確認するため Q-Q プロットで見える化しました。

そのうち、正規分布かどうかを判別するための検定も導入したいですね。

各列のデータ分析

各列のデータは単独ではばらつきのあるデータであっても、カテゴリ単位であれば何かしらの傾向が出てくることもあります。

ここでは、最初のデータ種別によって得られたバイナリ、カテゴリデータに該当するものをすべて検討します。

hue をカテゴリにもつヒストグラムと同じデータを示すことになりますが、見た目の印象を変えるためにバイオリンプロットも記載されます。

分散分析など

各列間の比較をするために散布図によって分布を確認します。

機能として乏しいですが、1 次元配列の分散分析なども参考程度に入れてあります。

各列間の情報を見たところで、更に hue でカテゴリを分けながら分散の状況を確認しています。

ここまでで、相当な数のグラフが表示されていますので、ざっとデータを眺めたときに、特徴のあるデータが有れば儲けものですね!

TOC

見やすさ、検索性向上のために TOC を自動生成できるようにしました。

地味に重要なのがこの機能で、出力される HTML ファイルは長く、大きいものになります。したがって、目的のデータへのアクセス性をよくするために独立した TOC が必要と判断しました。

今後の改善

まだ Titanic でしかデバッグしていませんので、いろいろと試してみたいです。また、細かいセッティングは setting.json で実施する設計としていますので、これもうまく使ってよりきめ細やかなデータリーディングができればと考えています。

よかったら使ってみて感想をください。


Revision:1.1 2022/09/29 グラフデータなどを追加しました。

見ていただいている人が多いので、少しでも興味を持ってもらえればと存じます。

Discussion