2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

kagglerへの道1 登録~EDAまで

2
Last updated at Posted at 2026-02-13

はじめに
いきなりですが皆さん、Kaggleってご存じですか?

世界中のデータサイエンティストたちが、寝る間も惜しんでしのぎを削り、最強のアルゴリズムという名の武器で殴り合う知の闘技,コロシアムのことです。

...というのは半分冗談で、半分本当です。
Google傘下の、世界最大の機械学習コンペティションプラットフォーム。それがKaggleです。
今日は、Python初心者の私がこの修羅の国に足を踏み入れ、最初の登竜門である「タイタニック」に挑むまでの記録を残します。

そもそもKaggleとは?

ただの勉強サイトではありません。ここはスポーツの世界です。
企業が「このデータから予測モデル作ってくれたら賞金あげるよ!」とお題を出し、世界中の猛者(Kaggler)たちが精度を競います。

賞金: 数百万〜数千万円の案件もザラ。夢があるね!

ランク: 勝ち進むと「Grandmaster」などの称号が貰える。神扱いされる。

学び: 世界トップレベルのコード(Notebook)が公開されており、無料で盗める(学習できる)。

つまり、勉強できて、運が良ければお小遣いも稼げて、就職にも有利という、やらない理由が見つからない沼なのです。

アカウント登録(入場手続き)

戦場に行くには、まず入場手続きが必要です。
これに関しては、カップラーメンを作るより簡単です。

Kaggle公式サイトにアクセス。

右上の 「Register」 をクリック。

「Register with Google」 をポチー。

はい、終了。これであなたも今日からKagglerです。
プロフィール画像をカッコいいものに変えておきましょう。これだけで強そうに見えます。

今回の戦場:Titanic(タイタニック)

登録して最初に挑むべきクエスト、それがTitanic - Machine Learning from Disasterです。

どんなコンペ?

映画でも有名なあのタイタニック号の乗客データ(年齢、性別、チケット代など)をもとに、「誰が生存し、誰が亡くなったか」を予測するというものです。

「人の命を予測するなんて...」と神妙な気持ちになるのは最初だけです。
すぐにくそっ、この欠損値さえなければと、データのことしか考えられなくなります。

データのダウンロード

コンペページの「Data」タブからデータをダウンロードしましょう。これを手に入れた瞬間、戦いのゴングが鳴ります。

いざ、モデル作成!

ではありません!!!!

いきなり予測モデルを作るのではなく、まずは敵(データ)を知るためのEDAを行います。

EDA

EDAとは、Exploratory Data Analysisの略で、日本語では探索的データ解析と呼ばれます。

一言でいうと、本格的な統計モデルを作ったり機械学習にかけたりする前に、まずはデータをじっくり眺めて、その特徴やクセをつかもうというステップのことです。

という事で実際にやっていきましょう
環境はなんでもいいですがkaggleのノートブックがおすすめです。

まあおすすめしておいて私はVSコードですが(笑)
自分が使いやすいものを使ってください

何にもわからないって人はこれ使いましょう

てことで必要なライブラリ入れていきましょう
この as~の書き方最近知ったんですが便利ですね
でもフルネームで書くのに慣れすぎてsnsってなんだっけってなります(笑)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

ファイル三つとも読み込みます。pands便利ですね
パスのコピーで張り付けると\(←これなんていうの(笑))になるのでなぜかエスケープシーケンスに勘違いされるんだけどVSコードだけ?
とりあえず先頭にr入れておけばバックスラッシュ認定してくれます

data_train = pd.read_csv(r"C:\**************************************************")
data_test = pd.read_csv(r"C:\**************************************************")
gender = pd.read_csv(r"**************************************************")

データ読み込んだので早速のぞいてみましょう
()の中空欄だとデフォルトで5行、今回みたいに指定したら指定行出力されるよ

data_train.head(10)

そしたらこんな表だったよ
少し見にくいけど何となくどんな変数があるのか理解しよう

PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
5 6 0 3 Moran, Mr. James male NaN 0 0 330877 8.4583 NaN Q
6 7 0 1 McCarthy, Mr. Timothy J male 54.0 0 0 17463 51.8625 E46 S
7 8 0 3 Palsson, Master. Gosta Leonard male 2.0 3 1 349909 21.0750 NaN S
8 9 1 3 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27.0 0 2 347742 11.1333 NaN S
9 10 1 2 Nasser, Mrs. Nicholas (Adele Achem) female 14.0 1 0 237736 30.0708 NaN C

10行のデータ見たくらいじゃデータのことわからないからもう少し統計量を見てみましょう
というか、まずは脳死でこれやったらいいと思います
最強呪文だよ

data_train.describe()

出力結果がこれ

PassengerId Survived Pclass Age SibSp Parch Fare
count 891.000000 891.000000 891.000000 714.000000 891.000000 891.000000 891.000000
mean 446.000000 0.383838 2.308642 29.699118 0.523008 0.381594 32.204208
std 257.353842 0.486592 0.836071 14.526497 1.102743 0.806057 49.693429
min 1.000000 0.000000 1.000000 0.420000 0.000000 0.000000 0.000000
25% 223.500000 0.000000 2.000000 20.125000 0.000000 0.000000 7.910400
50% 446.000000 0.000000 3.000000 28.000000 0.000000 0.000000 14.454200
75% 668.500000 1.000000 3.000000 38.000000 1.000000 0.000000 31.000000
max 891.000000 1.000000 3.000000 80.000000 8.000000 6.000000 512.329200

それぞれの意味はこんな感じ
count:データ件数
mean:平均値
std:標準偏差(数値のバラつき)これが多いほど、いろんな境遇の人が混ざっていることを示す
min:最小値
25%:第1四分位数,全員を並べて下から25%目の値
50%:中央値,真ん中の人の値。平均値と大きく離れている場合、データが極端に偏っている
75%:第3四分位数,全員を並べて上から25%目の値
max:最大値

こうやって見るといろいろ気になるよね
・年齢だけ欠損おおすぎ
・生存率38.4%は低すぎ
・なぜか0歳4か月の赤ちゃんが乗ってる
・75%の人の運賃が31ドル以下なのに最大値は512ドル

もっとあるけどまだ脳死でみないといけないやつあるんだ
それがこれ
また魔法の呪文ね

もちろん最初にimportしてもいいからね

from ydata_profiling import ProfileReport
data_train.profile_report()

これは本当にすごい、ただでかすぎて乗せれないから一部抜粋

image.png

Survivedと相関高そうなグラフ見てみよう

sns.countplot(x="Survived", hue="Sex", data=data_train)
plt.show()

出力されたのがこれ
image.png

女性の方が生存率高いから女性が優先的に助けられたのかな?

次はこれ

sns.countplot(x="Survived", hue="Pclass", data=data_train)
plt.show()

image.png

グレードの高い客室の人が優先的に助けられた?

次はこれ
細かくなりすぎるから幅引いてる

bins = [-1, 10, 20, 50, 100, 200, data_train['Fare'].max()]
labels = ['0-10','10-20','20-50','50-100','100-200','200+']
data_train['FareBin'] = pd.cut(data_train['Fare'].fillna(0), bins=bins, labels=labels)

plt.figure(figsize=(8,5))
sns.countplot(x='FareBin', hue='Survived', data=data_train, order=labels)
plt.xlabel('Fare (bin)')
plt.ylabel('count')
plt.legend(title='Survived', labels=['Dead','Survived'])
plt.tight_layout()
plt.show()

image.png

やっぱり運賃高い人から助けたんだね もちろん想像の世界だけどさ

こうやってデータをこちょこちょして
どうかなーこうかなーって考えるのがEDAです
今回は大丈夫そうだったけど多重共線性とかもこの段階で確認しておいた方がいいね

次回は欠損地処理・特徴量エンジニアリング+出来たらモデル作成までやるよ

まとめ:戦いはこれからだ
今回は登録からEDA(データの確認)までを行いました。
わかったことは以下の通りです。

Kaggleは怖くない。 むしろゲーム感覚で楽しい。

データには穴(欠損)がある。 現実は甘くない。

女性は生き残りやすく、男性は厳しい。

自動化ツールは神。

次回は、このデータをもとに「欠損値の穴埋め」や「特徴量エンジニアリング」を行い、実際にAIに生存予測をさせてみたいと思います。

目指せ、Kaggle Grandmaster!(の卵の卵)

余談

実は来週名古屋に旅行しにいくのでお勧めスポットがあれば教えてね
あとITパスポート試験2回目の試験で受かりました
一回目は免許証忘れて受験できず受験料+交通費の約2万円を失いました

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?