【書評】『最短コースでわかる Pythonプログラミングとデータ分析』〜データ分析の最初の一歩はこの本から!学び直しにもおすすめ!

アイキャッチ

本書ではタイタニックデータセットの分析があるので、

“a tuxedo cat dressed in a sailor’s uniform, sitting on the deck of a luxurious cruise ship, depicted in a watercolor style.”

というプロンプトでDALL・Eにお願いし、Canvaで文字を入れてトリミングしました。

Amazonにおける本の紹介

身近なデータをPythonで分析できるようになるための知識を、最短コースで身に付けられる本です。Pythonのホントの基本から、データ分析に必要なPythonライブラリの使い方、データ分析の実践例までを一気に学べます。プログラミングの経験がない方もこの1冊を読めば、実際のデータ分析を始められます。

ベストセラーの「最短コースでわかる ディープラーニングの数学」「Pythonで儲かるAIをつくる」などを執筆した著者が送るデータ分析&AI書籍の第4弾。いつもの平易な解説で、初学者も安心して学べます。

amazon.co.jp

感想

同じ著者の『最短コースでわかるPyTorch&深層学習プログラミング』を持っていて、ぱらぱら読んでみてわかりやすかったので、こちらも購入してみました。

とてもわかりやすかった!

初心者がつまづきやすいところがちゃんとおさえられていて、コード一文一文に対して丁寧に解説が載っていますし、演習問題もあります。

この一冊で、Pythonの基礎から、データ分析ライブラリ、タイタニックデータセットの分析までカバーしていて、かなり密度が高いです。

全くのプログラミング初心者の方は苦労するでしょうが、それでも繰り返し読んで演習問題を解けば、データ分析に必要な知識の土台ができるのではないかと思います。

「最短コースでわかる」というタイトルに偽りなしです。

ただ、scikit-learnやニューラルネットワークを用いた分析モデルの作成は取り扱っておらず、「データを見て分析するために必要最低限の技術」が濃縮されている本です。

しかし、データ分析の7割以上はデータの前処理や集計、データの中身を理解するところにあると言っても過言ではないので、この本は「データサイエンスはじめの一歩」としてとても良いと思いました。

分析モデル作成についてはそれぞれのライブラリやフレームワークの参考書があると思いますので、本書で基本的なデータの取り扱いを学んだ上で各自勉強されるといいでしょう。

わたしはデータサイエンスをやるようになって2,3年で、pandasやnumpy, matplotlibは業務で使うことも多いので、簡単かなと思ったのですが、crosstab()やread_csv()を使った高度な読み込みなど、知らなかったことも多くとても勉強になりました。そうか、読み込みの時にオプションを指定しておけば前処理こんなに楽になるのね…

データサイエンス系学部を出ていない新人さんや、データ分析をやることになったがpythonもライブラリもよくわからないという人にはもちろんですし、わたしのようにそこそこ使っているけど、知識の整理と確認をしたい人にもとてもおすすめです。

同じ著者(赤石雅典さん)の『最短コースでわかるディープラーニングの数学』も購入済みなので勉強するのが楽しみ。

この方は最近、『Pythonでスラスラわかるベイズ推論超入門』も出されていて、こちらもとても気になっています。

読んだらまた書評を書きます!

勉強メモ

まえがき

「学問に王道なし」という言葉があるように、Pythonでのデータ分析にも簡単な道はありませんが、最小限の学習内容に絞り、実践を通じて、そして試行錯誤を重ねることで効率的に学ぶことはできます。

具体的には、必要最小限の知識項目に絞ること、演習問題を解くこと、そしてGoogle Colabでの実践的な体験を通じて学ぶことが効率的な学習の鍵であると述べています。このアプローチを通じて、読者はPythonプログラミングからデータ分析の基礎までをカバーし、最終的にはDX人材としてのスキルを身につけることができます。

1章 Python プログラミング入門

1.1 Python とその実行環境

このセクションではPythonとその実行環境について説明しています。Pythonが初心者にとって使いやすい言語である理由は、インタプリタ型であること、Google Colabとの組み合わせによる自動保存機能、そして豊富な外部ライブラリによる多様な機能の提供にあります。Google Colabはクラウド上の開発環境で、Gmailユーザーはセットアップ作業なしでPythonプログラミングを始めることができ、ライブラリ間の相性問題も自動的に解決します。また、Pythonの基本的な操作やGoogle Colabの利用方法について具体的な例を通じて解説しています。

1.2 Google Colab の基本操作

この節では、Google Colabの基本操作に焦点を当て、プログラムの文法解説は行わず、シンプルなコードを用いた実験を通じて、プログラミングの驚くべき結果を体験します。教材としてのNotebookは指定のURLからアクセス可能で、読者はこれらのNotebookを自分のGoogleドライブにコピーして実行することを推奨します。操作にはセルのコピー、値の変更、そしてその実行が含まれ、このプロセスを通じて、プログラミングの基本的な理解を深めることができるようになります。

1.3 変数

変数はプログラミング言語において値を保存し、後でその値を参照するための「入れ物」として機能します。Pythonにおいて変数への値の代入は「=`記号を使って行い、代入された値は変数名を使って参照されます。変数とリテラルの区別は重要であり、変数には値を代入できますが、リテラル(直接記述された値)には代入できないという点がプログラミング初心者が最初に学ぶべき重要な概念の一つです。

1.4 データ型と算術演算

Pythonのプログラミングでは、データの型(整数型、浮動小数点数型、文字列型、ブール型)を意識し、それぞれの型に応じた操作を行います。type関数を用いることで変数のデータ型を調べることができ、基本的な算術演算(加算、減算、乗算、除算)を行う際には、演算子(+, -, *, /)を使用します。Pythonでは文字列同士の加算で連結が可能であり、除算の結果は自動的に浮動小数点数型で返されます。また、累乗計算には**演算子を使用し、特殊な代入演算子(累算代入演算子)を用いて、変数の値に対して直接演算を行い再代入することが可能です。

1.5 条件分岐

Pythonにおける条件分岐は、プログラム内で「もしAならばBをする」という形の処理を実現するために使用されます。これを実現するには、比較演算を用いて条件を設定し、if文を使ってその条件がTrueの場合に特定の操作を行うようにプログラムを記述します。加えて、elseelifを使うことで、複数の条件分岐や「そうでない場合」の処理を記述することが可能です。このプロセスにおいて、比較演算子や論理演算子を活用して条件を詳細に指定し、プログラムの実行フローを制御します。

1.6 関数呼び出しとメソッド呼び出し

Pythonにおける関数は、特定の処理を実行し、結果を返すか副作用を持つためのプログラムの一部です。関数は、引数を取り結果を返すものと、副作用のみを持つもの(例: print関数)に大別され、typelenintfloatなどがその例です。メソッド呼び出しは関数呼び出しの一種で、特定のオブジェクト(変数)に属する関数を呼び出す形式を取り、このオブジェクトが操作対象となります。メソッドと関数の主な違いは、メソッドがオブジェクトに紐づいている点であり、オブジェクト.メソッド名(引数)の形で使用されます。

1.7 リストとループ処理

Pythonでは、リストは複数の要素を直線状に並べた構造で、各要素はインデックスを用いてアクセス可能です。リストは、大量のデータを効率的に扱うために設計されており、インデックスの基点は0から始まります。リストの要素へのアクセス、スライスによる範囲指定、要素の追加や特定の要素の存在チェックなど、多様な操作が可能です。また、ループ処理と組み合わせることで、リストの各要素に対する繰り返し計算を簡単に実行できます。

1.8 タプルと集合、辞書

Pythonのタプルは、リストと似ているが一度定義すると変更できない(イミュータブルな)データ構造です。タプルのアンパック代入は、x, y = (1, 2)のように、タプルに含まれる複数の値を同時に複数の変数に割り当てる文法です。

集合は重複を許さない要素の集まりで、リストやタプルの要素から重複を排除してユニークな項目だけを保持するのに便利です。

辞書はキーと値のペアでデータを格納し、検索やデータの追加、更新、削除が容易に行えるデータ構造です。これらのデータ型は、データの整理、アクセス、管理を効率的に行うためにPythonで広く利用されています。

1.9 関数定義

Pythonにおける関数定義は、コードの再利用性を高め、保守性を向上させるための重要な機能です。関数は、ある入力(引数)に対して定義された処理を行い、結果(戻り値)を返すものと、単に一連の操作を実行するものの二種類があります。

関数定義はdefキーワードに続いて関数名と括弧内に引数を記述することで行われ、処理内容はインデントを用いてブロックを形成します。

戻り値がある場合はreturn文を用いて指定し、値を返さない場合はreturn文を省略します。この仕組みを利用することで、複雑なプログラムも簡潔に、読みやすく保守しやすい形で記述できます。

1.10 やや高度なループ処理

Pythonのenumerate関数は、リストの要素とそのインデックス情報を同時に取得できる便利な機能で、ループ処理において要素の位置情報が必要な場合に特に有効です。for index, element in enumerate(some_list):の形式で使用し、リストの各要素とそのインデックスを同時にループ内で扱えるようにします。

一方、リスト内包表記は、リストの各要素に対して一定の操作を施し、その結果を新たなリストとして簡潔に生成するPython特有の文法です。これにより、コードの記述が簡潔になり、読みやすさと効率性が向上します。リスト内包表記は、[expression for item in iterable]の形式で、イテラブルなオブジェクトの各要素に対して指定した表現を適用し、結果を新たなリストとして生成します。

2章 データ分析ライブラリ入門編

2.1 ライブラリ入門

Pythonのデータ分析では、NumPy、pandas、Matplotlib、seabornなどの外部ライブラリが広く使用されます。これらのライブラリは、数値計算、データの操作や集計、グラフの描画など、データ分析に必要な様々な機能を提供します。NumPyはベクトルや行列計算を効率的に行い、pandasは表形式のデータを扱う際に中心的な役割を果たします。Matplotlibとseabornはデータの可視化を支援し、より理解しやすい形でデータを表現することができます。これらのライブラリを組み合わせることで、Pythonを強力なデータ分析ツールとして活用することが可能になります。

2.2 NumPy 入門

NumPyは、ベクトルや行列などの多次元配列に対する高速な数学演算を提供するPythonライブラリです。主な機能には、配列の生成(array関数)、ブロードキャスト機能、ユニバーサル関数(np.sqrtなど)、集約関数(sum, mean, max, min, stdなど)があります。これらの機能を用いることで、複雑な数学的処理を簡潔かつ効率的に記述できます。例えば、配列間の演算は要素ごとに自動的に適用され(+, -, *, /等)、特定の条件に基づくデータの選択や集約が容易に行えます。また、linspacearange関数を利用して数値のシーケンスを生成し、科学計算やデータ分析に欠かせない操作をサポートします。

2.3 Matplotlib 入門

Matplotlibは、Pythonでグラフを描画するためのライブラリであり、簡単なグラフから複雑なグラフまで幅広く対応できます。散布図はscatter関数で、関数グラフはplot関数で簡単に描画可能です。より複雑なグラフや複数のグラフを同一の描画領域に配置する場合は、subplot関数を用いてサブ領域を作成し、それぞれの領域に個別のグラフを描画する方法が用いられます。また、japanize_matplotlibライブラリを用いることで、Matplotlibでの日本語表示の問題を解決することができます。

2.4 pandas 入門

PandasはPythonで表形式のデータを分析するためのライブラリであり、ExcelやSQLと類似の機能を持ち、特に大量データの扱いや集計処理の試行錯誤に優れています。主要なデータ構造にはデータフレーム(DataFrame)とシリーズ(Series)があり、これらを使ってデータを効率的に扱うことができます。データフレームから特定のデータを選択するには、列名や行インデックスを指定してdf['column']df.loc[index]を用います。また、PandasではCSVやExcelファイルからデータを読み込む(pd.read_csv(), pd.read_excel())、列や行の追加(df.append(), df.concat())・削除(df.drop())といった多様なデータ操作が可能です。

3章 データ分析ライブラリ中級編

3.1 データ分析の主要タスク

Pythonを用いたデータ分析タスクは、データの読み込みから始まり、データの確認・加工(前処理)、集計、可視化、データ検索・結合、日付データの処理、そして仮説立案・検証に至るまで、多岐にわたります。データ読み込みでは、pandasread_csvread_excel関数を使用して、データを効率的に取り込みます。前処理では、データの状態を確認し、分析しやすい形に加工します。集計と可視化を通じて、データから洞察を得ることが目指され、pandasや可視化ライブラリseabornが活用されます。また、データ検索・結合では、SQLとほぼ同等のデータ処理がpandasで可能になり、日付データの処理では、pandasで扱いにくい日付データを簡単に扱うためのテクニックが紹介されます。

3.2 データ読み込み

Pythonにおけるファイルの読み込みは、データ分析の初歩的なステップであり、pandasライブラリを用いて行います。read_csv関数やread_excel関数を活用して、CSVファイルやExcelファイルからデータを読み込むことができます。これらの関数には多くのオプションがあり、データを読み込む際にヘッダー行の有無、不明値の取り扱い、特定の列をインデックスとして扱うかどうかなど、データの形式に応じて適切な処理を施すことが可能です。また、データを読み込んだ後は、display関数を使って内容を確認し、必要に応じてさらに前処理を行います。このプロセスを通じて、データ分析のためのデータセットを効率的に準備することができます。

3.3 データ確認・加工(前処理)

Pythonでのデータ前処理は、pandasライブラリを用いて幅広く行われます。データセットの理解を深めるために、まずdescribe()メソッドを使用して、数値データの統計量を取得します。これにより平均、中央値、最小値、最大値などの統計的要約を簡単に確認できます。

次に、value_counts()メソッドを使って特定の列の値の出現回数を調べ、データの分布を理解します。欠損値の確認にはDataFrame.isnull()を用い、DataFrame.sum()メソッドと組み合わせて欠損値の総数を列ごとに計算します。欠損値の取り扱いにはdropna()メソッドで行を削除したり、特定の値で埋めたりします。

データ型の確認と変換にはDataFrame.dtypesでデータ型を確認し、DataFrame.astype()で必要な型へ変換します。

特徴量のエンジニアリングではmap()関数を使用して既存のデータに基づいて新たな特徴量を生成したり、ビニング処理を通じて連続変数をカテゴリ変数に変換したりすることができます。

これらのプロセスを経ることで、データは分析や機械学習モデルの入力に適した形に整えられます。これらの前処理手法はデータの品質を向上させ、分析の精度を高めるために不可欠です。

3.4 データ集計

Pythonのpandasライブラリを使用してデータ集計を行う際、まずはread_csv()関数を用いてデータを読み込み、sep, na_values, false_valuesなどの適切なオプションを指定してデータの前処理を行います。

集計の主な手法にはgroupby()メソッドがあり、これを使用して特定のカラムを基にデータをグループ化し、その後mean()などの集約関数を適用してグループごとの統計値を計算します。

さらに、crosstab()関数やpivot_table()メソッドを使用することで、2つのカテゴリ変数間のクロス集計や、より複雑なデータの要約を行うことができます。これらの関数を駆使することで、データから有意義な洞察を抽出し、分析の目的に合わせた集計を行うことが可能です。

3.5 データ可視化

Pythonにおけるデータ可視化では、pandas, Matplotlib, seabornといったライブラリが広く使われています。これらのライブラリを用いることで、データセットの特性や関係性を直感的に把握することが可能になります。

ヒストグラムはhist()メソッドを使用して数値データの分布を棒グラフで表現し、棒グラフはplot(kind='bar')メソッドでカテゴリ別のデータ量を視覚化します。

また、seabornライブラリの箱ひげ図はboxplot()関数によってデータの分布、中央値、外れ値を示し、散布図はscatterplot()関数を使って2変数間の関係を点でプロットします。

さらに、ヒートマップはheatmap()関数を用いて、データの相関関係や頻度などを色の濃淡で表現することができます。これらの可視化ツールを活用することで、データのインサイトを深め、より効果的な分析を行うことができます。

3.6 データ検索・結合

Pythonにおけるデータ検索と結合は、データ分析の過程で欠かせないプロセスです。

データのソートはsort_values()メソッドを使い、特定の列に基づいてデータフレームを昇順や降順に並べ替えます。この機能はデータの視認性を高め、分析のための準備段階で特に有用です。ソート後、行インデックスが乱れることがあるため、reset_index()メソッドを使ってインデックスをリセットし、データフレームを整理することが一般的です。

特定の行や列へのアクセスには、loc[]iloc[]属性が用いられます。loc[]はラベルベースでデータを参照し、iloc[]は整数の位置に基づいてデータを参照します。これらはデータフレーム内の特定のデータを抽出する際に便利です。

データ検索には**query()**メソッドがあり、文字列式を用いて条件にマッチするデータをフィルタリングします。このメソッドは複雑な条件のデータ抽出をシンプルな構文で可能にします。

結合については、merge()関数が中心です。これは二つの異なるデータフレームを結合キーに基づいて結合(JOIN)します。merge()関数はSQLのJOIN操作と類似しており、データセット間で関連する情報を結びつける際に欠かせません。

3.7 日付データの処理

Pythonにおける日付データの処理は、Pandasライブラリを使用して効率的に行うことができます。日付データの読み込み時には、read_csv関数のparse_datesオプションを使用して、特定の列を日付型として認識させることが可能です。日付データが日付型に変換されることで、年月日の抽出や曜日の情報を簡単に取得できるようになり、さらに日付に基づいたソートや集計が容易になります。

日付データを使った集計では、groupbyメソッドと組み合わせて週単位や月単位でのデータ集計が行え、日付の範囲指定や日付の加減算にはto_datetime関数やrelativedelta関数を使用して、特定の期間に絞り込んだデータ分析を実行することができます。

4章 データ分析実践編

4.1 タイタニック・データセット

タイタニックデータセットは、1912年に氷山に衝突して沈没したイギリスの豪華客船タイタニック号の乗客名簿を基にした公開データセットです。このデータセットには、乗客が救助されたかどうかの情報が含まれており、データ分析や予測モデル作成のための題材として広く利用されています。

4.2 データ読み込み

このプロセスでは、read_csv関数を使用し、ファイルの特性に合わせたオプション(例えば、na_valuesquotechar)を指定してデータの読み込みを行います。

データ読み込み後には、headコマンドを使用してデータの概観を確認し、データ内のヌル値や特殊文字の扱いについて検討します。また、エスケープ文字を考慮したり、特定の列を特定のデータ型で読み込むためにdtypeオプションを活用したりすることで、データの正確な読み込みを確実に行います。

4.3 データ確認・加工(前処理)

前処理の過程では、データの型を確認し、適宜型変換を行うことで分析に適した形にデータを整形します。

例えば、数値が文字列として誤って読み込まれている場合、適切な数値型に変換する必要があります。

また、データの欠損値を確認し、必要に応じて欠損値の処理を行いますが、単純な集計処理の場合は欠損値があっても問題ない場合もあります。

さらに、分析の便宜を図るために項目名をわかりやすい名称に変更したり、describeメソッドやvalue_countsメソッドを用いてデータの統計的特性や値の出現頻度を確認したりします。

4.4 データ集計

集計を行う際には、まずgroupbyメソッドを使用して、特定のカテゴリー(例えば「客室クラス」)に基づいてデータをグループ分けし、各グループの統計値(例えば平均年齢や平均運賃)を計算します。これにより、客室クラスごとの平均年齢や平均運賃など、特定の属性に関連するデータの傾向を明らかにすることができます。

次に、crosstab関数を用いて、二つのカテゴリー変数(例えば「客室クラス」と「乗船港」)間のクロス集計を行います。これにより、各乗船港からの乗客がどの客室クラスにどれだけ分布しているかを確認でき、特定の地理的背景や経済的状況に基づく乗客の分布を理解することができます。

また、pivot_tableメソッドを利用して、性別や客室クラスを軸にした生存率の集計を行います。集約関数として「平均」を指定することで、各カテゴリ内での生存率を計算し、性別や客室クラスが生存率にどのような影響を与えているかを洞察できます。

4.5 データ可視化

データの可視化には、matplotlibseabornライブラリを使用し、ヒストグラム、箱ひげ図、ヒートマップなどを描画します。例えば、ヒストグラムを使用して数値データの分布を視覚化し、箱ひげ図を通じて異なる客室クラスにおける運賃の分布を比較します。さらに、ヒートマップを用いて性別と客室クラスに基づく生存率の分布を色の濃淡で表示し、直感的な理解を深めます。

4.6 仮説立案・検証

タイタニックデータセットの分析では、最終的な目標として「洞察の導出」を目指し、「仮説立案・検証」を重要なステップとして位置づけています。このプロセスはデータ分析における「解釈」というタスクを含み、「なぜこの関係性が生まれたのか納得のできる説明」を求めます。

具体的な分析手法として、groupbyメソッドやseabornhistplot関数などを使用して、乗客の生存状況と性別、年齢、客室クラス、乗船港との関係性を探求しています。

例えば、「生存状況」と「性別」の関係を検証する際には、女性の生存率が男性よりも高いことを示す集計結果が出ています。これは、救命ボートに優先的に乗せられた「ウィメン・アンド・チルドレン・ファースト」のポリシーによるものと解釈できます。同様に、「生存状況」と「年齢」の関係では、年齢が7歳以下の幼い乗客の生存率が高いことが明らかになり、これも同じポリシーの影響と見られます。

4.7 深掘り分析

「生存状況」と「客室クラス」の関係性も分析され、「1等客室の乗客は他と比べて生存率が高い」という結果が得られました。これは、1等客室がデッキに近く、救命ボートへのアクセスが容易だったためという解釈が可能です。

また、「生存状況」と「乗船港」の関係も検証され、シェルブールから乗船した乗客の生存率が他より高いことが示されました。この結果に対する解釈は直接的な因果関係を見出すことは難しいものの、乗船港ごとの客室クラスの分布など、間接的な因果関係の可能性を示唆しています。

データ分析のプロセスは、「相関関係」と「因果関係」を区別し、数値的な関係性から「なぜ」その結果が生じたのかを解釈することで、より深い理解につながります。

分析の進め方は、特定のデータを抽出し、仮説を立て、集計処理やデータ抽出、特定データの分析を繰り返しながら、試行錯誤を通じて洞察を引き出していくプロセスで構成されています。

コメント

タイトルとURLをコピーしました