R-EDA1によるデータ分析 | Rによるデータ分析

R-EDA1のリリースノート

R-EDA1 のリリースノートです。 GitHubの https://github.com/ecodata22/R-EDA1 でバージョン管理しているので、そちらにも更新のコメントは入れていますが、英語ですし、 コードのどこが変わったのかよりも、できることの何が変わったのかに興味がある方の方が多いと思いますので、このページも作っています。

ちなみに、このサイトの更新は、 トップページ古い更新履歴 にあります。

リリースノート

2022/1/20:分割グラフで、軸の範囲を合わせるかどうかを選択

層別の分析をする時に、グラフを層別で分割できる機能があります。 このグラフの時に、今までは、グラフ毎にプロットが見渡せるように軸の範囲が違っていました。

データマイニング のような分析の時には、小さな領域で起きていることを拡大して見る目的では良かったのですが、 全体的な位置付けを見たい時には、わかりにくくなっていました。

そこで、軸の範囲を合わせるかどうかは、選べるようにしました。

R-EDA1

R-EDA1

2022/1/10:整数(Integer)を質的変数にして、ベイジアンネットワークを作る機能

ベイジアンネットワークによるデータの構造解析 では、整数の変数は、質的変数として扱うか、量的変数として扱うのかを選べるようにしました。

一般的な量的変数では、質的変数として扱う時に、区間で区切る方法を使いますが、 この機能で整数を質的変数として扱う時は、例えば、「1、2、5」という3つの整数があれば、これらの3つがそれぞれ質的変数として扱われます。

整数で表されている変数が原因系の変数の時は、ベイジアンネットワークでは、矢印の元の方に質的変数を置くので、 思ったような矢印になりやすくなります。
R-EDA1

2022/1/9:距離行列をスタートにする分析

有効次元数 の分析が一例ですが、距離行列をスタートにする分析方法があります。

この方法は、R-EDA1では 多次元尺度構成法 だけを使えるようにしていたのですが、t-SNE、UMAP、階層型クラスター分析でもできるようにしました。


t-SNE
t-SNEの場合は、次元数は3が最大値です。
R-EDA1


UMAP
UMAPの場合は、次元数はサンプルの数が最大値です。 ただ、ソフトとしては、大きな次元数でも分析できるようにしていますが、その結果の物理的な考察の仕方が多次元尺度構成法の時のようにはできず、 筆者としては使い道がわからないです。
R-EDA1


階層型クラスター分析
R-EDA1

2022/1/4:一般化線形混合モデルの結果のグラフ

一般化線形混合モデル の結果は、テキストだけだったのですが、ラベルの予測値をY軸、実測値をX軸にしたグラフも出力するようにしました。 R2やAICなどの指標で見るよりも、モデルの出来栄えがわかりやすいです。

一般化線形混合モデル(GLMM)は、2つの場所に入っていますが、両方にこの機能を追加しています。

R-EDA1

R-EDA1

2022/1/4:生データの表示

グラフにしたり、計算をするとわからなくなるのですが、 データ分析をする時は、生データ(分析対象のデータ)の具体的な値がどうなっているのかを確認すると、 良いことがあります。 何かの理論を使わなくても、データを見ただけで「これは変だ」とわかることもあります。

全部見る機能を付けるのは大変なので、さしあたって、一番上(Head)と一番下(Tail)の5行ずつを確認できるようにしました。

R-EDA1

2021/12/31:欠損値のある変数を目的変数にして、欠損値の有無の違いを分析する機能

欠損値を含む量的変数を目的変数に選んだ時に、 欠損値を「NA_data」、欠損値以外を「Numeric_data」という名前の質的変数に変換する機能を追加しました。

欠損値が欠損している理由を、他の変数との関係から調べられます。 また、他の変数と何も関係がなさそうな場合は、「欠損はランダムに発生している」という考察もできます。

まず、横軸に目的変数にして、縦軸をすべての他の変数にして、層別の1次元散布図を作る例です。
R-EDA1

決定木の例です。
R-EDA1

MT法の例です。 MT法の場合は、単位空間を欠損していないサンプルにしています。 「0」が欠損値ではないサンプルで、「1」が欠損値のサンプルです。
欠損している理由がいろいろある場合は、決定木よりもMT法の方が良いです。
R-EDA1

2021/12/25:前処理の組合せを追加

主成分に標準化や正規化 の技を3つの手法で使えるようにしました。

高次元を2次元に圧縮して可視化 の方法を使う時に、上記の方法を単独や、組合せて使えるようにしてあります。 組み合わせた場合は、主成分分析が先に処理されます。
R-EDA1

1クラス最小距離法 でも、組合せられます。
R-EDA1

時系列解析 でも、組合せられます。 時系列解析 では、主成分分析(PCA)だけでなく、 独立成分分析(ICA)や 因子分析(Factor_analysis)とも組合せられます。
R-EDA1

2021/12/25:因子分析を引越し

因子分析を、サンプルの類似度の分析から、多対多の分析に引越しました。 サンプルの類似度の分析の方法は、基本的に変数とサンプルの関係は見ないのですが、この点が、ここに配置した他の方法と合わないので、 より適切な場所に移動しました。
R-EDA1

2021/12/17:「HDBSCANを追加」

HDBSCANを追加しました。 DBSCANと似ていますが、密度の差があるクラスタがある時に、うまく分けてくれるようになっています。

R-EDA1

R-EDA1

2021/12/13:「UMAPを追加」

MDS(多次元尺度構成法)とt-SNEが選べるようになっている所に、「UMAP」も選べるようにしました。

R-EDA1 

2021/12/11:「ネットワークグラフを散布図でも表示」

相関係数、グラフィカルラスー、クラメールの連関係数をネットワークグラフで見る方法を入れていましたが、 グラフは散布図にもなるようにしました。

見方はネットワークグラフと似ていて、位置が近い変数同士は係数も高いです。

ネットワークグラフだと「AとBは近い。AとCは近い。BとCはすごく遠い」という場合に、リンクの有無で簡単に表現できるのですが、 散布図だと、「BとCはすごく遠い」ということが表せません。 そういう弱点はあるのですが、散布図はグラフが軽いので、その点はネットワークグラフよりも良いです。

R-EDA1 

2021/12/11:「全変数のクラスター分析の前に主成分分析」

クラスター分析をする時に、前処理として正規化を選べるようにしていたのですが、 正規化の前に主成分分析(PCA)をして、主成分を変数として使えるようにもしました。 正規化をする・しないと、主成分分析をする・しない、で4通りの組合せができます。 どういう多次元データで、どういう風に見たいのかで選べるようになっています。

R-EDA1 

2021/12/07:「1クラスの手法の分割」

1クラスの手法は、変数全部でモデルを作って分析するものと、1〜3個の変数の全部の組合せでモデルを作って、組合せの違いを分析するものがあり、一緒になっていたのですが、分割しました、

R-EDA1 

2021/11/21:「ラジオボタンからセレクトボックスへ」

画面スクロールを行ったり来たりする必要があったので、 手法の選択にラジオボタンを使っていたところは、すべてセレクトボックスに変えました。

画面スクロールがゼロにはなりませんが、かなり改善しました。
R-EDA1 

2021/11/06:「クラスター分析で正規化による前処理」

クラスター分析をする時は、必ず正規化を前処理として行うようになっていたのですが、 正規化するかどうかは選べるようにしました。

単位の異なる変数が混ざっている場合は正規化が必要ですが、 データの元々の値の大きさが重要な場合は正規化をするとそれが見えなくなるので、正規化はしない方が良いです。

2021/11/03:「A-A型の分析」

多対多の分析 の内、 A-B型の分析 については、 行と列の項目の、項目同士の類似度の分析 に入っている方法を、R-EDA1に入れていたのですが、 今回、 A-A型の分析 を追加しました。

隣接行列をスタートにした時のネットワークグラフによる分析、 距離行列をスタートにした時の多次元尺度構成法(MDS)による分析、 相関行列や一対評価のデータをスタートにした時の固有値、固有ベクトルによる分析ができるようにしてあります。
R-EDA1 

2021/10/23:「SVD」

リコメンドや、テキストデータの分析方法として、行と列の項目のクラスター分析がよく行われているようです。 SVD (Singular Value Decomposition:特異値分解)はそのひとつですが、R-EDA1に追加しました。

下のグラフの赤い字は、各列の名前(変数の名前)で、青い字は、各行の名前(サンプルの名前)です。 変数に「温度」と「湿度」がある場合など、変数毎に物理的な意味が異なるデータでは、こんな分析はできません。 しかし、すべての変数がカウントデータ(数えて得られる数。頻度など)だったり、点数だったりして、物理的に同じ意味の場合は、 この方法が使えます。

SVDと、コレスポンデンス分析を使い分けられるようにしてあります。 SVDは、負の値があっても扱えますが、コレスポンデンス分析は正の値しか扱えません。

SVDやコレスポンデンス分析で生成するデータは、多次元になりますが、 MDS(多次元尺度構成法)やt-SNEを使って、2次元の散布図で見えるようにしてあります。 「コレスポンデンス分析・SVD」の片方と、「MDS・t-SNE」の片方を選べるので、2×2=4通りの組合せができるようにしています。
R-EDA1 

この機能は、もともとコレスポンデンス分析とMDSの組合せの一択でした。 今回、SVDとt-SNEを増やすことで、4通りの方法ができるようになりました。

2021/10/23:変数の類似性の分析に、「t-SNE」の追加

PCA(主成分分析)、Factor analysis(因子分析)、Correspondence analysis(コレスポンデンス分析)で、変数の類似性を分析する方法は、 多次元を2次元で見る方法として、MDSだけを採用していましたが、t-SNEでもできるようにしました。
R-EDA1 

2021/10/15:「時系列解析」

「Analysis」に「Time series(時系列)」を加えました。 今までは時系列解析をやろうとすると、ヒートマップや、折れ線グラフしかなかったのですが、だいぶ増えています。
R-EDA1 

全体に共通することとして、「2021/10/19 13:30」のような時刻のデータは使わないです。 時刻のデータは、表記の仕方が様々で全部に対応するツールは作りきれないためです。 その代わり、データは「1分おき」などの等間隔の時間で収集されたことを想定しているので、 データの個数で「時間」の分析ができるようにしてます。 1分間隔の場合、「n = 12」は「12分」です。

「Multi_variable(多変量)」の中の「Stratifeid_graph(層別グラフ)」は、注目したい変数の折れ線グラフです。 他の変数を使って色分けしたり、グラフを分割することができます。
R-EDA1 

「Multi_variable(多変量)」の中の「Dimension_reduction(次元削減)」は、次元削減の方法で変換した変数の全部を見るためのグラフです。 下図は、「PCA(主成分分析)」を選んだ場合です。 「ICA(独立成分分析)」や「Factor(因子分析)」でもできます。 「None」を選ぶと、元の多変量全部を一緒に見るグラフになります。
R-EDA1 

「One_variable(一変数)」の中の「Difference_previous(前との差)」は、直前のデータとの差(差分)の分析です。 一番上のグラフは、元のデータで、その下が差分をグラフにしたものです。 差分に傾向がなく、ランダムな場合は、 ランダムウォークモデル と考えられますので、予測する時は、直前の値が一番確からしい予測値になります。
R-EDA1 

「One_variable(一変数)」の中の「Quasi_periodic(準周期)」は、工場のセンサーデータのように、 繰り返しはあるものの、周期の長さが一定ではないデータの分析をするためのツールです。 この機能は、グラフの出力はなく、 1.5次データの解析 や、 2次データ(特徴量)の解析 をするためのデータがダウンロードできるようになっています。
必要に応じて、このデータをさらに分析に使うことを想定しています。
準周期性が、1と0の数字で表されている変数があれば、それを使うことができます。 こういった変数がない場合、特定の変数について、「1列目が、40より大きければ1、40以下なら0」というようにして、こうした変数を作ることもできます。
R-EDA1  

「One_variable(一変数)」の中の「fft(高速フーリエ変換)」は、 スペクトル解析 のツールです。正確な周期性がある場合の分析方法になります。 横軸は、Wavelength(波長)にしてあります。 下図の場合は、波長が20のところにピークがありますので、20行おきに周期性のあるデータであることがわかります。
R-EDA1 

2021/10/09:「木を複数作る決定木分析」

「Decision_Tree(決定木)」に、「C5.0_based_RandomForest(C5.0を使ったランダムフォレスト)」を追加しました。

「C5.0」では、木は1つできますが、これは全変数、全サンプルを使って作られます。

C5.0_based_RandomForestでは、変数やサンプルの1部について、複数の組合せを選ぶことで、複数の木を作ります。 これによってデータの多様性や、似たような結果になる変数がわかるようになります。

1部のデータの選び方は、ランダムサンプリングです。 行数や列数の平方根の数を選ぶようにしてあります。 例えば、10000行のデータなら、100行が選ばれます。

「Random sampling of samples (columns)」にチェックを入れて、 「Random sampling of variables (rows)」のチェックを外すと、サンプルは1部を使って、変数は全部使う形で、複数の木を作ります。 これは「バギング」という言われている手法になります。

逆に「Random sampling of samples (columns)」のチェックを外して、 「Random sampling of variables (rows)」にチェックを入れると、変数は1部を使って、サンプルは全部使う形で、複数の木を作ります。 サンプル数が少ない場合や、因果関係の分析では、このやり方の方が知りたいことに到達しやすくなります。

R-EDA1  R-EDA1 

2021/10/09:「ロバストな決定木」

決定木を作る時の木の細かさは、デフォルトにお任せにしていたのですが、巨大な木(枝分かれが細かい木)になることがあります。 因果関係の分析では、3番目くらいまでの枝分かれがどうなるのかが重要で、巨大な木は不要なことが多いです。 また、巨大な木をOKにすると、計算時間が非常に長いことがあります。 さらに、巨大な木は、過学習とも言えることがあり、ロバストではないので使いにくいです。

そこで、枝分かれ先の最小の大きさを設定できるようにしました。 「Use minimum size of splits」にチェックを入れると、設定できるようになります。 チェックを外すと、デフォルトにお任せになります。
例えば、「Ratio of the number of minimum size」を「0.1」にすると、最小になる枝分かれは、全体の0.1になります。 1000行のデータでしたら、100よりも小さくはならなくなります。
R-EDA1

下の2つの図は、同じデータに対して、設定値を変えた場合の例です。
R-EDA1  R-EDA1

2021/10/09:「ヒートマップ」

今までは、「Similarity_of_Variables_and_Categories(変数とカテゴリの類似度))」と、 「Similarity_of_Names_in_Rows_and_Columns(行と列の名前の類似性)」のそれぞれの中に、 ヒートマップを使って、データの表全体を可視化する方法を入れていました。 それぞれで少し機能を変えていました。

データの表全体を可視化する方法は、「Similarity_of_Samples(サンプルの類似度)」でも役立つのですが、入っていませんでした。

データの表全体を可視化する方法は、EDAの基本になるものですし、3種類のSimilarityの全部を分析できる方法としても他の方法とは違いますので、 「Heat_map(ヒートマップ)」は、3種類のSimilarityの分析から独立させてひとまとめにしました。
R-EDA1

「Add clustering methods for rows」にチェックを入れると、似た変数が近くになるように並び変えられます。 「Add clustering methods for columns」にチェックを入れることで、似たサンプルを近くにすることもできます。
R-EDA1

似たサンプルを近くにする方法は、もうひとつあります。 「Use decreasing the columns(行の降順を使う)」にチェックを入れると、任意の変数について降順で並べられます。
R-EDA1

2021/10/09:「サンプル名の使い方の改善」

「Heat_map(ヒートマップ)」、「Similarity_of_Samples(サンプルの類似性)」、「Similarity_of_Names_in_Rows_and_Columns(行と列の名前の類似性)」の3つの分析の機能には、今まで、「データには、サンプル名の列がなければならない」、「サンプル名の列は1列目でなければならない」、という前提がありました。

今回、この2つの前提を不要にしました。

「Use one of the row as sample name」のチェックを外すと、サンプル名の列がない場合に、行番号をサンプル名の代わりにして、分析することができます。

「Row number of sample name(サンプル名の列番号)」に入れた数字の列がサンプル名として扱われます。

R-EDA1

2021/10/03:「階層的な方法によるクラスター分析」

階層的な方法によるクラスター分析は、サンプルの種類が少ない時は良いのですが、ある程度多くなると、グラフに字が重なるようになり、 解読不能になります。

そのため、R-EDA1には入れていなかったのですが、インタラクティブなタイプのグラフにするのなら、解読不能ということもなくなりますので、 追加しました。

「Similarity_of_Samples(サンプルの類似性)」
→「Dimension_All"(全次元)」

と進んだ中にある「hclust」になります。

R-EDA1

下図がインタラクティブの機能を使って、一部を拡大したものです。
R-EDA1

2021/10/03:「サンプルの因子分析」

2021/09/25に因子分析のリリースをしましたが、変数の関係を分析するための機能として作っていました。 そのため、「Similarity_of_Variables_and_Categories(変数やカテゴリの類似性)」の中に組み込まれていました。

因子分析は、サンプルの類似性を因子との関係も含めて調べたい時にも使いますので、そのための機能も作りました。

「Similarity_of_Samples(サンプルの類似性)」
→「Dimension_2"(2次元)」

と進んだ中にある次元削減の種類に、「Factor(因子)」を追加しました。 2次元散布図の軸が、因子になります。

R-EDA1

2021/10/03:「インタラクティブなグラフ」

ほぼすべてのグラフが、インタラクティブなタイプに変わりました。 見た目は同じでも、見たい場所だけ拡大表示したり、マウスで個々のプロットの情報を確認できたりします。 ネットワークグラフの場合は、グラフをつまんでグリグリ動かせます。

散布図やヒストグラム:ggplotlyでplotly化
ヒートマップ:heatmaplyに変更
ネットワークグラフ:無向グラフはnetwork3D、有向グラフはvisnetwork

R-EDA1

R-EDA1

2021/10/03:「言葉の散布図」

「Similarity_of_Samples(サンプルの類似性)」
→「Dimension_2"(2次元)」

と進んだ中にある次元削減の種類に、「None(なし)」を追加しました。

任意の2つの変数について、サンプル名の散布図を作れます。
R-EDA1

2021/10/03:「3次元の散布図」

「Similarity_of_Samples(サンプルの類似性)」
→「Among_all_columns(すべての列同士)」
→「Stratifeid_graph(層別グラフ)
と進んだ中にあるグラフの種類に、「3D-scatter(3次元散布図)」を追加しました。

3次元の軸以外で、層別できるのは、色だけです 2次元散布図のようにグラフの分割はできません。
R-EDA1

2021/09/26:「line_graph(折れ線グラフ)」

「Similarity_of_Variables_and_Categories(変数やカテゴリの類似性)」
→「Dimension_2(2次元)」
と進んだ中にある次元削減の種類に、「line_graph(折れ線グラフ)」を追加しました。

ラベルの変数の変化の中に、他の変数のカテゴリがどのように入っているのかがわかります。
R-EDA1 R-EDA1

2021/09/25:「Factor_Analysis(因子分析)」

「Similarity_of_Variables_and_Categories(変数やカテゴリの類似性)」
→「Among_all_columns(すべての列同士)」
と進んだ中にあるMethod(方法)に、「Factor_Analysis(因子分析)」を追加しました。

データとして見えている変数の背後に共通因子を仮定して、それがどのようにデータに関わっているのかを調べることができます。

回転は、7種類から選べます。
R-EDA1

2021/09/20:「prediction interval(予測区間)」

「Similarity_of_Variables_and_Categories(変数やカテゴリの類似性)」
→「Between_label_column_and_others(ラベルのと他の変数の関係)」
→「Stratifeid_graph()
と進んだ中にある「histgram(ヒストグラム)」と「scatter(散布図)」のそれぞれで予測区間を出すようにしました。 ただし、いずれもグラフを層別した時には、計算されません。

ヒストグラムは、区間が数字で表示されます。 散布図は、グラフに赤い線で表示されます。
R-EDA1

R-EDA1

2021/09/16:「PCRA__Regression_analysis(主成分回帰分析)」

「Similarity_of_Variables_and_Categories(変数やカテゴリの類似性)」
→「Between_label_column_and_others(ラベルの変数と、他の変数の関係)」
と進んだ中にあるMethod(方法)に、「PCRA__Regression_analysis(主成分回帰分析)」を追加しました。

説明変数と主成分の相関関係は、ネットワークグラフで確認できるようにしています。
R-EDA1




Tweet データサイエンス教室