FAQ
< All Topics

Pythonによるビッグデータ解析

Table of Contents

回答

df にデータを格納した上で、下記コードを実行しても中の数字は表示されませんでしょうか。

 

import matplotlib.pyplot as plt

import seaborn as sns

 

colormap = plt.cm.RdBu_r

 

sns.heatmap(df.corr(numeric_only=True), linewidths=0.1, linecolor=’white’,

            vmax=1.0, vmin=-1.0, cmap=colormap, annot=True, annot_kws={‘fontsize’:8}, fmt=’.2f’)


上記コードの annot=True が箱内への数字を出力するためのオプションです。

また、もしかするとその後の数値書式設定(annot_kws)が悪さをしている可能性もあるので、annot_kws={‘fontsize’:8}, fmt=’.2f’ 部分を削除した上で改めて実行してみてください。

 

上記でうまくいかない場合、ご指摘の通り、バージョンの問題の可能性があります。

この場合、Jupyter Notebookというよりは、当該描画機能のseabornのバージョンの問題の可能性が高いです。バージョン確認のために以下を実行してみてください。

 

import seaborn as sns

print(sns.__version__)

 


私は “0.12.2” でしたので、これよりもかなり古そうであれば、バージョンアップデートをしていただいた方が良いかと思います。

(Anaconda環境→ Jupyter Notebook上で !conda update seaborn / それ以外の環境→ Jupyter Notebook上で ! pip install seaborn –upgrade)

回答

コードを全部覚える必要は全くありません。
例えば今回配布したコードは、dfという変数名でデータを入れ替えるだけで(別のExcelデータをdfという変数にread_excelするだけで)先程の相関行列も含め、多くの部分がそのまま動作します。
私もそうですが、多くの分析者は、過去に自分が作ったコードや、Web上に掲載されているコードを流用しています。
逆に言えば、都度、流用しやすいようにコードを作っておく工夫はした方が良いかと思います。(例えば、dfのように、大元となるデータの変数名は共通化しておく、など)


一方で、まさにご指摘の通りで、pairplotやgroupbyなど、非常に有名かつ頻度の高いものは(自ずと)覚えてしまっているケースが多いです。裏を返せば、使っていく中で覚えていけば良いかと思います。
プログラミング言語も、あくまで「言語」の一種なので、継続的、日常的に使っていくことが何よりも大切です。(使用頻度が低いと英語が上手くならないのと類似)
できる限り、毎日に近いくらい触れていくことと、これも自然言語同様、そのままリピート実行するのではなく少し自分でアレンジして実行してみることが極めて重要です。

回答

大変良いご指摘です。第一のお答えとしては、お好みになるかなと思います。
これは非常に深い話にも繋がり、そもそもカテゴリー値(名義尺度、順序尺度)の相関係数にどれほど意味があるか?という点にも繋がります。


通常の相関係数(ピアソンの積率相関係数)は本来、数値間の間隔に意味を持つ、数値データ(間隔尺度、比例尺度)が前提です。

したがって、性別の0/1や、順序尺度(アンケート回答の1~5など)では、本来間隔に意味を持たないので、この相関係数自体、あまり意味をなさないことになります。

しかしながら、数値化(ダミー変数化)していれば、とりあえず相関係数の算出自体はできてしまいますし、その算出値には(定量的な厳密性はなくとも)ある程度の傾向は反映されていますので、参考値にはなります。

ただ、そこから得られる情報は、後述するクロス集計でも十分読み取れるため、わざわざ相関係数を出さなくても問題ないケースも多いです(無論、別途カテゴリー値を対象としたデータ観察を丁寧に行うことが前提です)。


一方で、出港地(Embarked)に関しては、講義では手始めとして、C, Q, Sを0, 1, 2と連続値化しましたが、

本来これらには大小関係が定義できないはずですので、この相関係数自体、意味を持ちません。

※1 ただし、出港地の時間的順序関係がC→Q→Sの順で、かつ、この順序関係が目的変数に影響を与えているという前提があれば、相関係数にもある程度意味が出てくるかと思います

※2 なお、この出港地という変数に関しては、厳密には、C or not (0/1), Q or not (0/1), S or not (0/1) といった、0/1フラグ(one-hotベクトル形式)でのダミー変数化が有効となります

したがって、出港地については、講義でも扱ったように、ダミー変数化した後にクロス集計などで観察するのが一般的です。


ヒストグラムも同様で、カテゴリー値のヒストグラムは単なる棒グラフに他ならない(カテゴリーごとの頻度集計)ので、カテゴリー値を対象としたデータ観察の中で、棒グラフで確認すれば十分です。

ただ、例えばdf.hist()などで、数値データと合わせて一括して確認したい場合には、あらかじめダミー変数化しておく必要があります。


まとめると、カテゴリー値を対象としたデータ観察(クロス集計、棒グラフなど)を丁寧に行なっていれば、事前にダミー変数化する必要は特にありませんが、

先述のように、数値データと一緒くたにして俯瞰的に観察したい場合には、ダミー変数化を事前にしても良いかと思います。

プロセスを定型化するよりも、「何をどう観察するか」の目的意識が重要です。


また、ご参考までに、相関係数の代わりに、カテゴリー値で用いられる類似指標として下記のようなものがあります。

こちらのサイト(https://www.neclearning.jp/sample_text/DB101-1.pdf)が非常にわかりやすいですので、参考にしていただければと思います。

l 数値データ×数値データ・・・ ピアソンの積率相関係数
(順序尺度×順序尺度・・・ スピアマンの順位相関係数)

l 数値データ×カテゴリー値・・・ 相関比

l カテゴリー値×カテゴリー値・・・ クラメールの連関係数

申し込み