Kaggleの有名なタイタニック号データセットを使って、Pythonを駆使したデータ分析に挑戦してみました。データサイエンスに興味がある方や、Kaggleを使ってみたいけれど何から始めればいいか迷っている方に向けて、実際の分析プロセスをステップごとに解説します。データの前処理からモデルの選定、そして結果の評価まで、実際のコードを交えながら詳しく紹介していきますので、ぜひ参考にしてください!
前回記事:Pythonで深めるデータ分析:予測モデリングと応用手法の完全ガイド
kaggleでは、コードの共有に制限が設けられているため、安全に共有できるkaggleノートブックにコードを乗せております。
実際のコードを確認したい方は以下のkaggleノートブック参考にしてください。
kaggleって何?
データサイエンスの世界に足を踏み入れると、必ず耳にするプラットフォームがKaggleです。Kaggleは、世界中のデータサイエンティストやエンジニアたちが集まり、データ分析のコンペティションや、豊富なデータセットを活用してスキルを磨く場です。初心者から上級者まで、多くの人々がKaggleで学び、挑戦を通じて成長しています。
データ分析を始める前の準備
機械学習の世界では、『データセットがプロジェクトの大半を占める』と言われるほど、データの確認と前処理がとても大切です。そこで、まずはKaggleからデータをダウンロードし、今回使用するデータセットの中身を見ていきましょう。
Kaggleのアカウント作成
Kaggleの利用には無料アカウントが必要です。まだアカウントを作成していない方は、以下のリンクから登録を進めてみてください。
Kaggleノートブックの作成
まず、Kaggleのデータセットページまたはコンペティションページから、新しいノートブックを作成します。
- 「New Notebook」ボタンをクリックして、ノートブックを作成します。
データセットがアタッチされているか確認
データセットがノートブックにアタッチされていない可能性があります。Kaggleノートブックにデータセットをアタッチするための手順は以下の通りです。
手順:
- Kaggleノートブックの右側にある「Add input」ボタンをクリックします(ノートブックの画面右側、Dataセクションの下部にあります)。
- 「Add input」をクリックすると、Kaggleに公開されているデータセットのリストが表示されます。ここで使用したいデータセットを選択します(例: Titanicデータなど)。検索に(titanic)と入力してみてください!!
- データセットがアタッチされると、
/kaggle/input/
ディレクトリ内にそのデータが表示されるようになります。
今回のお題
タイタニック号の沈没は歴史上最も悪名高い船の難破事故の一つです。
1912 年 4 月 15 日、処女航海中、広く「沈まない」と思われていた RMS タイタニック号が氷山に衝突して沈没しました。残念ながら、乗船者全員を乗せられるだけの救命ボートがなかったため、乗客と乗組員 2,224 人のうち 1,502 人が死亡しました。
生き残るにはある程度の運の要素もあったが、一部の人々のグループは他の人々よりも生き残る可能性が高いようだ。
このチャレンジでは、乗客データ(名前、年齢、性別、社会経済階級など)を使用して、「どのような人が生き残る可能性が高いか」という質問に答える予測モデルを構築していただきます。
データの概要
データは2つのグループに分かれています。
トレーニングセット (train.csv)
これは、機械学習モデルを構築するためのデータです。トレーニングセットには、各乗客の結果("グラウンドトゥルース"とも呼ばれます)が含まれており、これを使ってモデルを学習させます。乗客の性別や乗船クラスといった「特徴」をもとにモデルが作成され、さらに新しい特徴を作り出す「特徴エンジニアリング」も活用できます。
テストセット (test.csv)
テストセットは、モデルがまだ見たことのないデータに対してどのくらい精度良く予測できるかを評価するために使用します。ここには乗客の結果が含まれていないため、モデルを使って彼らがタイタニック号の沈没から生き残ったかどうかを予測することが求められます。
提出ファイルの例 (gender_submission.csv)
また、例として、全ての女性乗客が生き残ると仮定した予測データが含まれています。これをもとに、自分の予測結果を作成し提出するイメージを掴むことができます。
データ分析を行っていきます
3つのデータを使った分析手順を、初心者の方にも分かりやすくステップごとに説明します。まず、タイタニックのデータを使って、「どのような人が生き残る可能性が高かったか」という問いに答えるためにデータを分析していきます。
タイタニック号データ分析の最初のステップ
データ分析を始めるためには、PythonのライブラリであるPandasを使って、データを読み込み、内容を確認する必要があります。以下に、必要なステップを分かりやすく説明します。
1. ライブラリのインポート まず、データ操作に必要なPandasライブラリをインポートします。Pandasは、データの読み込み、操作、そして表示などに非常に役立つツールです。
2. データの読み込み 次に、データを読み込むために、read_csv()
関数を使います。Kaggleでは、/kaggle/input/
というディレクトリにデータが保存されています。今回は、タイタニック号のトレーニングデータとテストデータを使います。
3. データの確認 データが正しく読み込まれたかどうかを確認するために、データの一部を表示します。これには、head()
メソッドを使用し、データセットの先頭5行を確認することができます。
4. データの基本情報確認 データに欠損値があるか、データ型が正しいかなどを確認するために、info()
メソッドを使用します。これにより、データの全体的な構造を確認し、各列のデータ型や欠損値の有無を把握できます。
データの基本的な情報を確認
データ分析の初期段階では、データセットにどのような情報が含まれているかを確認することが重要です。このプロセスにおいては、各列にどのようなデータが存在し、欠損値(データが不足している箇所)があるかどうかを確認します。欠損値の処理は、予測モデルの性能に影響を与えるため、事前にしっかりと確認する必要があります。
データの内容について確認
欠損値の確認方法
データの欠損値を確認するためには、データセット全体を見渡し、どの列に欠損値が存在するかを確認します。Kaggleノートブック上では、Pandasのinfo()
メソッドを使って、データ型や欠損値の有無を確認することができます。これにより、どの列に欠損値があるかや、各列のデータ型(数値、文字列など)を把握できます。
欠損値が確認された場合、それを適切に処理する必要があります。例えば、数値データの場合、平均値や中央値で補完することが一般的です。文字列データの場合、最も頻繁に使われている値で補完したり、場合によっては列全体を削除する選択肢もあります。
このコードは、train_data
の基本情報を出力し、各列にどれくらいのデータが欠けているかを確認します。たとえば、"Age"列や"Cabin"列に欠損値が多いことが確認できるかもしれません。
欠損値の処理
欠損値が確認された場合、その処理方法を選択します。数値データに欠損値がある場合は、以下の方法で補完が考えられます。
- 平均値や中央値での補完: 欠損しているデータを平均値や中央値で埋める方法。
- 削除: 欠損値が多い列は、分析に悪影響を与えるため、削除することが選択されることもあります。
データの可視化
生存率を性別や階級ごとに可視化することで、データの背後にあるパターンや傾向を視覚的に把握できます。特に、性別や階級が生存率に与える影響を視覚化することで、どの要素が生存に寄与したのかを理解するのに役立ちます。
ライブラリのインポート
可視化に必要なライブラリであるmatplotlib
とseaborn
をインポートします。これらのライブラリを使って、グラフを作成していきます。
matplotlib
は基本的なグラフ作成ライブラリで、seaborn
はその上に構築された可視化ライブラリです。sns.set()
を使って、グラフのスタイルをシンプルなものに設定しています。
性別ごとの生存率
性別ごとに生存率を可視化するためには、棒グラフを使用します。seaborn
のcountplot()
を使って、生存者(Survived
が1)と非生存者(Survived
が0)の性別ごとの分布を視覚化します。
階級ごとの生存率
次に、乗客の階級ごとに生存率を可視化します。1等級の乗客が3等級よりも生存率が高かったかどうかを確認するため、階級ごとの分布を描画します。
性別や階級を使った予測モデルの作成
次に、タイタニック号データを使って、生存を予測するためのモデルを作成してみます。予測モデルの基本として、ロジスティック回帰を使用します。ロジスティック回帰は、2値分類問題(生存するかしないか)を解くためのシンプルかつ効果的な手法です。
モデル作成の手順
ロジスティック回帰モデルを作成する際の基本的な手順は次の通りです。
- データの前処理: 欠損値やカテゴリ変数を適切に処理します。
- 特徴量の選定: 性別や年齢、階級など、予測に必要な特徴量を選びます。
- モデルの学習: 訓練データを用いてロジスティック回帰モデルを学習させます。
- 予測の実行: テストデータを使って、生存するかどうかの予測を行います。
データの前処理
まず、モデルに適した形式にデータを整えます。数値データ以外のカテゴリデータ(性別や乗船港など)を数値に変換し、欠損値を補完します。
2. データの分割
次に、データを訓練用とテスト用に分割します。これにより、モデルの精度を評価できるようになります。
3. ロジスティック回帰モデルの学習
次に、ロジスティック回帰モデルを作成し、訓練データを使って学習させます。
次に、タイタニック号データを使って、生存を予測するためのモデルを作成してみます。予測モデルの基本として、ロジスティック回帰を使用します。ロジスティック回帰は、2値分類問題(生存するかしないか)を解くためのシンプルかつ効果的な手法です。
以下では、ロジスティック回帰モデルを使って、「どのような人が生き残る可能性が高いか」を予測する流れを説明し、Kaggleの規約に沿った参考コードを提供します。
モデル作成の手順
ロジスティック回帰モデルを作成する際の基本的な手順は次の通りです。
- データの前処理: 欠損値やカテゴリ変数を適切に処理します。
- 特徴量の選定: 性別や年齢、階級など、予測に必要な特徴量を選びます。
- モデルの学習: 訓練データを用いてロジスティック回帰モデルを学習させます。
- 予測の実行: テストデータを使って、生存するかどうかの予測を行います。
1. データの前処理
まず、モデルに適した形式にデータを整えます。数値データ以外のカテゴリデータ(性別や乗船港など)を数値に変換し、欠損値を補完します。
- 性別の数値化:
Sex
列は、male
を0、female
を1として数値化しています。これにより、機械学習モデルで扱える形式に変換します。 - 不要な列の削除:
Name
,Ticket
,Cabin
,PassengerId
は予測に影響を与えないため削除します。 - 目的変数と説明変数:
Survived
が予測したい目的変数、その他が説明変数です。
2. データの分割
次に、データを訓練用とテスト用に分割します。これにより、モデルの精度を評価できるようになります。
- データの分割:
train_test_split
を使って、80%を訓練用、20%をテスト用データとして分割します。
3. ロジスティック回帰モデルの学習
次に、ロジスティック回帰モデルを作成し、訓練データを使って学習させます。
- ロジスティック回帰のモデル:
LogisticRegression()
を使ってモデルを作成します。 - モデルの学習:
fit()
関数で、訓練データ(X_train
,y_train
)を使ってモデルを学習させます。
4. 予測と精度の評価
学習したモデルを使ってテストデータで予測を行い、その精度を評価します。
テストデータに基づく予測
学習したロジスティック回帰モデルを使って、テストデータを基に乗客の生存を予測するプロセスは、データ分析の最後の重要なステップです。この予測プロセスでは、テストデータをモデルに渡し、生存するかどうかを計算し、その結果を評価します。
テストデータでの生存予測の手順
モデルが学習されたら、そのモデルを使ってテストデータに対して予測を行います。テストデータは、予測したい未知のデータであり、生存したかどうかの結果はわかっていない状態です。ここでは、モデルを使って生存の確率を予測します。
テストデータの準備
まず、テストデータに対して同じ前処理を行います。学習に使った訓練データと同じ形式にするため、カテゴリ変数の変換や欠損値の処理を行います。
テストデータの前処理におけるステップ:
- 性別(
Sex
)を数値に変換(male
は0、female
は1) - 欠損値の補完(例えば、年齢の欠損値を中央値で補完)
- 予測に関係ない列の削除(
Name
,Ticket
,Cabin
,PassengerId
など)
モデルによる予測
テストデータが準備できたら、ロジスティック回帰モデルを使って生存の予測を行います。モデルが計算した生存の確率に基づいて、各乗客が生存するか(1)、しないか(0)を予測します。
3. 予測結果の保存
予測結果をKaggleに提出するためには、結果をCSVファイルとして保存します。PassengerId
とSurvived
の列を持つデータフレームを作成し、CSVファイルに書き出す必要があります。
今回の予測モデル
使用したデータ
今回の予測では、以下の特徴量(変数)を基に、乗客が生き残ったかどうかを予測しています。
- 性別 (Sex):
- 性別が生存に大きな影響を与える可能性があるため、性別を変数として使用しました。
male
(男性)は0
、female
(女性)は1
に変換して使用しています。- 歴史的に、女性や子供が優先的に救助されたため、性別が生存率に大きな影響を与えることが予想されます。
- 社会階級 (Pclass):
- 船室の等級(クラス)も生存に影響を与えると考えられます。1等級の乗客は上流階級であり、より早く救命ボートに乗れる可能性が高かったことが考えられます。
Pclass
は1
(1等級)から3
(3等級)までの数字で表されています。数字が小さいほど社会階級が高いことを示します。
予測モデル
今回使用した予測モデルはロジスティック回帰です。ロジスティック回帰は、ある出来事が発生する確率を予測するためのモデルです。具体的には、生存する確率(Survived
が 1
になる確率)を性別と社会階級に基づいて予測します。
ロジスティック回帰モデルは、以下のように動作します:
- 性別と社会階級を元に、それぞれの乗客が生き残る確率を計算。
- その確率が一定の閾値(通常は50%)を超えた場合、モデルは「生存する」と予測します。
予測の根拠
- 性別の影響:
- 歴史的に、タイタニック号の沈没では女性が優先的に救助されたため、女性の生存率は男性よりも高いと予測されます。これは、「女性は生き残る確率が高い」という仮定に基づいています。
- 社会階級の影響:
- 1等級の乗客は、3等級の乗客よりも生き残る可能性が高いと予測されます。これは、上流階級の乗客がより早く救命ボートにアクセスできた可能性があるからです。
予測結果
モデルは、以下の手順で予測を行います:
- 各乗客の性別(男性か女性か)と社会階級(1等級から3等級)に基づいて、生存する確率を計算。
- その確率が50%以上の場合、その乗客は「生存」と予測されます。50%未満の場合は「非生存」と予測されます。
具体的には、モデルは性別や社会階級などの特徴に基づいて「生存か非生存か」を予測することになります。
例えば、次のような予測が行われます:
- 性別: 女性 (1), 社会階級: 1等級 (1) → 生存する可能性が高い
- 性別: 男性 (0), 社会階級: 3等級 (3) → 生存する可能性が低い
このように、モデルは乗客の性別や社会階級を使って生存する可能性を予測します。
kaggleへ提出
Kaggleのスコアが0.76555という評価は、そのコンペティションの内容や評価指標によって解釈が異なりますが、いくつかの一般的な考え方を説明します。
。
- スコアの評価指標: Kaggleのコンペティションでは、精度やF1スコア、AUC(Area Under Curve)、RMSE(Root Mean Squared Error)などさまざまな評価指標が使用されます。スコアが0.76555であれば、その評価指標におけるモデルの性能が約76.6%であると解釈できます。例えば、分類問題で精度が0.76555であれば、テストデータに対して約76.6%の正解率があることを示します。
- ランキングと他の参加者との比較: Kaggleではスコアが他の参加者と比較されます。0.76555のスコアが良いかどうかは、ランキングで他の参加者と比較してどの位置にいるかによります。トップの参加者と比較してそれほど差がない場合、スコアが高評価されますが、もしトップとの差が大きい場合、改善の余地があると判断できます。
- 競技の難易度: そのコンペティションの難易度やスコアの分布にも影響されます。競技が非常に難しい場合、0.76555でも良いスコアと見なされることがあります。逆に、他の参加者が80%や90%以上のスコアを出している場合は、さらなる改善が必要かもしれません。
総合的な評価
- 中間的なスコアといえるかもしれません。Kaggleでは通常、スコアの0.7〜0.8の範囲は「まあまあ良い」ですが、改善の余地があると考えるべきです。
- 他の参加者と比較することで、そのスコアの相対的な意味を理解するのが重要です。
まとめ
今回のタイタニック号データ分析を通じて、データサイエンスの基本的なプロセスを体験していただきました。データの前処理から、特徴エンジニアリング、モデルの構築と評価、そして最終的なKaggleへの提出まで、実際のコードを交えながら説明しました。ロジスティック回帰を使った簡単なモデルでの予測を通じて、タイタニック号の乗客が生き残るかどうかを分析することができ、実際にKaggle上でスコアを得る流れもご紹介しました。
データサイエンス初心者の方でも、Kaggleのプラットフォームを活用して手を動かしながら学ぶことで、データ分析のスキルを着実に身に付けることができるはずです。この記事が、データ分析に興味を持っている方や、Kaggleでのチャレンジを始めたい方にとって、有益な第一歩となれば幸いです。次は、モデルの改良や他のアルゴリズムの試行など、さらなるチャレンジを通じて、より高度なデータ分析に挑戦してみましょう!
Pythonを学びたい方はこちらの記事を参考にしてみてください
関連記事
プログラミング学習を進めているけれど、まだ副収入につなげられていない…そんなあなたへ!今こそ、学んだスキルを活かして副業に挑戦する絶好のチャンスです。プログラミングだけでなく、自分のスキルや商品をネットで販売する『ネットショップ』を開設してみませんか?
ネットショップを持つことで、自分の知識やスキルをより多くの人に届け、副収入を得ることが可能です。学んできたプログラミングを活かして、ショップのカスタマイズや運営も自由自在に行えますし、もし商品作成が難しい場合でも、デジタル商品やサービス提供など、いろんな選択肢があります。
このステップで一歩踏み出せば、今学んでいることが副収入に直結し、自分の時間をより有効に使うことができるはずです!一緒にネットショップを開設し、副業の第一歩を踏み出しましょう!
タイトルテキスト
プログラミングを学びたいけど、どこから始めたらいいのか分からない、自分に合っているか不安…そんな悩みを持っている方におすすめしたいのが、 無料相談 サービスです!
この無料相談では、あなたの現状や目標に合わせて、最適な学習プランを一緒に考えてくれます。どんなスキルが必要なのか、どうやって学習を進めると効果的かを具体的にアドバイスしてもらえるので、無駄なく効率的にスタートを切ることができます。
さらに、プログラミング学習には同じ目標を持つ 仲間 がいること、そして頼りになる メンター の存在がとても大きな支えになります。独学ではどうしてもつまずきやすい部分も、メンターがあなたの成長に合わせて親身にサポートしてくれるので、安心して学びを進められます。
まずは 無料相談 で、あなたに合ったプランを見つけて、スキルアップへの第一歩を踏み出してみませんか?今なら、迷っている方でも気軽に相談できるチャンスです!