2.やってみる

2_2 試行その2(2019/7/8)

1)試行(その2)の実行

もう少し、データ分析らしい分析をしてみましょう
試行その1では、simple1というフォルダで基礎の処理を行ってみました。今度は、同様にsimple2という名称のフォルダをssdseというフォルダの下に作成してください。c:\Python\ssdse\simple2を作成し、当該フォルダ下で分析を始めます。
そして、Warehouseの中の2.簡易処理手順の「試行その2」をダウンロードして解凍したsimple2.py(Pythonのプログラム)を格納してください。
これで準備は完了です。IPythonを稼働させて、simple1と同様に、simple2.pyをエディタで開き、コメントを無視して、1行ずつ状況を確認素ながら実行してみてください。要領が理解できてくれば、複数行を一度にコピペして実行しても問題ありません。
最初に実行するカレントフォルダ(IPythonで実行中のフォルダ)をsimple2に指定しています。ここに記載したフォルダ構成で実行していることを前提としていますので、格納しているフォルダが異なる場合は、適宜、simple2.pyのファイルを修正してから、実行してください。simple2.pyに記載している内容を変更して処理したのであれば、simple2.pyの内容も修正した内容で保存してください。また、simple2.pyに記載されていない処理を追加して行った場合も変更しておくことをお勧めします。但し、一時的に実行して確認してみただけであれば、記録に残す必要はありません。あくまで、処理の記録であり、再現性を確保するものであることに留意してください。

2)社会科学データの分析

本ブログでは、社会科学データの分析を主としています。自然科学系(物理、工学等)のデータ分析を前提としていません。社会科学データの分析では、論文を書くことを目的としないのであれば、多くの場合、一般の人が見て分かり易い分析結果が望まれると考えています。
高度な数学、統計等の基礎知識を必要とはしていませんが、一般の人が理解可能であろうと思われる程度の知識は必要です。また、間違った分析をしないための注意事項は、理解しておく必要があります。
分析対象のデータ(項目単位で見た場合)は、質的データと量的データの2種類に分類されます。更に、それぞれ、以下の様に2種類の尺度に分類できます。
<質的データ>
 ①名義尺度:単なる種類を示す尺度、性別(1:男、2:女)の様なデータ
 ②順序尺度:順序に意味がある尺度、アンケート等のカテゴリー(1:悪い、2:普通、3:良い)の様なデータ
<量的データ>
 ③間隔尺度:数値の間隔に意味のある尺度、気温(0度、10度、20度はそれぞれ10度刻みであるが、20度は10度の2倍熱い訳ではない)の様なデータ
 ④比例尺度:数値の比率にも意味のあるデータ、時間(2時間は、1時間の2倍長い)の様なデータ
 
分析対象のデータが、どの様な性質(①~④)であるかを理解した上で分析してください。
また、データ分析では、関係性を分析することがありますが、導き出された数値や図表から関係性が高いと言えるような結果であったとしても、実際にはそうではないこともあります。例えば、AとBの両事象に関係性が深いという結果が得られたとしても、実際には、AとBは相互の関係性は無く、第三のCが媒介役となり、AとCの関係性が深く、BとCの関係性も深い場合、数値や図表の結果としてAとBの関係が深いという事になる場合があります。この場合、Cという前提が無くなるとAとBの関係性が少なくなるという様なことが起こってしまいます。この様なミスを避けるためには、データ分析対象の理解を深める必要があります。つまり、分析結果を鵜呑みにせず、データに騙されないようにしなければならないという事です。

3)Pythonの作法

Pythonは、オブジェクトと操作の2つの組合せで処理します。一般的に以下の様にオブジェクトと操作をピリオドで結合して記述します。ブランクを空けないように注意してください。
 
 オブジェクト.操作
 
プログラミングでは、一般的に、値を格納するものを変数と言います。変数には、名前を付けます。例えば、以下の様に記載します。
 
 ondo = 27
 
ondoという変数には、27度という値が格納されたという事を意味します。27度というのは固定値ですが、ondoという変数には、どの様な値でも格納することができますので、変数と呼ばれます。また、変数は、オブジェクトの1種です。
Pandasには、シリーズとデータフレームという2種類のデータタイプがあります。いずれもオブジェクトの1種です。シリーズは、1次元のデータであり、複数のデータを格納することができます。データフレームは、2次元のデータ(表形式)であり、2つの次元の表データ(例えば、①試験日毎の②各科目の点数の様なデータであり、横方向に算数、国語、理科、社会の4種類の試験の結果が縦方向に試験日毎に並んでいるようなもの)であり、行列と呼ばれる形式であり、横方向を列方向、縦方向を行方向と言います。
Pandasには、シリーズとデータフレームのそれぞれのオブジェクトに対して、予め多くの操作が設定されています。多くの操作は、シリーズとデータフレームで共通ですが、一方でのみ有効な操作もあります。
また、前述した、オブジェクト.操作の結果はオブジェクト(シリーズやデータフレーム)になります。つまり、操作を続けて処理したい場合は、以下の様に記述することもできます。
Pythonは、オブジェクトと操作の2つの組合せで処理します。一般的に以下の様に記述します。
 
 オブジェクト.操作1().操作2()
 
これは、以下の様に記載しても同じ結果になります。
 
 オブジェクト2 = オブジェクト1.操作1()
 オブジェクト2.操作2()
 
いずれも、オブジェクトに対して操作1を行い、その結果のオブジェクトに対して操作2を行います。

4)分析の基本

多くの数値の集合であるシリーズやデータフレームのデータについては、誰もが見て分かるようにしなければなりません。最も分かり易いのが、平均値ですが、質的変数の場合は、値の感覚に意味はありませんので、
その取り扱いには注意が必要です。例えば、名義尺度で、1:りんご、2:ミカン、3:スイカ等の複数のデータがあった場合、その平均値に意味はありません。データの性質にあった以下の様な分析を行います。
 質的変数の分析を行う場合は、取りうる値毎の度数を分析します。
 複数の質的変数がある場合は、2つの項目毎のクロス集計表で分析します。
 量的変数の分析を行う場合は、ヒストグラムで取り得る値の度数分布を分析します。
 複数の量的変数の分析を行う場合は、散布図で2つの項目毎の分布の関係性を分析します。また、相関係数でその関係性の強さを数値で表します。
本項のsimple2.pyでは、これらの基本的な分析をしています。

5)本ブログの注意事項

本ブログでは、データ分析の事例を提供し、それを実際に実行してみることでデータ分析のできる化を測ろうと考えています。一応、データ分析の目的を記載していますが、本来の目的は、データ分析のやり方を理解することです。
事例に記載したデータ分析の目的を達成するには、十分ではないケースもありますが、学習する事例があまり煩雑にならないようにしています。例えば、全ての組合せの分析がなされていないという事がありますが、皆さんが実際にこの事例を実行してみる時にご自分で考えて色々と分析を進めてください。
また、「オブジェクト.操作()」の形式で記述していますが、この「操作()」には多くのオプションが存在するにも拘らず、最低限の条件のみ記載しています。実際には、他にどの様なオプション設定があるのか等をネットで調べて試してみてください。
この事例では、クロス集計の事例がありません。クロス集計は、以下のような記載になります。
 
 pd.crosstab(データフレーム[“項目1”],データフレーム[“項目2”])
 
「crosstab pandas」の様に指定してネット検索すれば使用方法が分かるはずです。「クロス集計 pandas」としても見つかります。処理結果を新たなオブジェクトに格納して、格納した結果をcsvファイルに出力することも可能です。実際に2つの質的データでやってみてください。
Pythonの世界は、どんどん新しくなっています。例えば、本事例では、Seabornというライブラリを活用してグラフを描いています。散布図を描くのには、「jointplot()」という操作を実行していますが、これは、本ブログを始めた時のSeabornの環境ではこれが最適であったからです。本事例を作成している時点では、「scatterplot()」、「lineplot() 」の様な操作も追加されています。これらは、Seabornを最新にバージョンアップすることで使えるようになります。しかし、これらのライブラリは、相性の様なものが存在します。例えば、Pandasのこのバージョンには、Seabornのこのバージョンの相性が良いという様なものです。Anacondaでは、この様な相性を考慮して複数のライブラリをパッケージ化しています。Anacondaのバージョンをアップするのは問題ないと思いますが、個別のライブラリのバージョンだけをアップする場合は、相性の問題が発生する可能性があるという事に留意してください。もし、問題が発生すれば、バージョンをダウンする等の対応をとってください。問題がある場合は、特定のオプションが動作しない、処理した結果が正しく表示されない、グラフが表示されない等の影響が出ます。
尚、本ブログでは、項目の指定等にダブルコーテーションを使用していますが、シングルコーテーションでも問題ありません。ダブルコーテーションの方がキーボード入力が容易であるという理由で使用しているだけです。