Contents
- 1 1️⃣ 結論(要点)
- 2 2️⃣ なぜ仮想環境が重要か
- 3 3️⃣ 手順(Windows / macOS / Linux 共通)
- 4 4️⃣ Jupyter Lab の起動
- 5 1️⃣ CSV ダウンロード
- 6 2️⃣ Kaggle API の利用
- 7 3️⃣ 簡易 Web スクレイピング
- 8 共通実装ステップ(全案件で必須)
- 9 📊 プロジェクト例1:売上データの統計分析・可視化
- 10 🚢 プロジェクト例2:Titanic データで生存予測(ロジスティック回帰)
- 11 🐦 プロジェクト例3:ツイート感情分析(日本語テキストマイニング)
- 12 📷 プロジェクト例4:手書き数字 MNIST の簡易 CNN
- 13 📈 プロジェクト例5:COVID‑19 日別感染者数の時系列予測(ARIMA)
- 14 🎯 今すぐ始めるミニタスク
1️⃣ 結論(要点)
| 項目 | 内容 |
|---|---|
| Python 本体 | 最新の安定版 (3.11 系) を公式サイトからダウンロード |
| 仮想環境 | venv または conda でプロジェクトごとに依存関係を分離 |
| 必須ライブラリ | pandas, numpy, matplotlib/seaborn, scikit-learn, jupyterlab を一括インストール |
| 実行環境 | Jupyter Lab があればコード・可視化が同時にでき、学習効率が向上 |
2️⃣ なぜ仮想環境が重要か
- 依存関係の衝突防止
- プロジェクト A は
pandas==1.5、プロジェクト B はpandas==2.0が必要でも、互いに干渉しない。 - 再現性の確保
requirements.txtやenvironment.ymlを用意すれば、同僚や採用担当者が「同じ環境で動く」ことを保証できる。- 安全な実験領域
- ライブラリのバージョンアップや新しいフレームワーク導入も、既存プロジェクトに影響を与えずに試せる。
3️⃣ 手順(Windows / macOS / Linux 共通)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# ------------------------------------------------- # ① Python 本体のインストール(公式サイト) # https://www.python.org/downloads/ # ------------------------------------------------- # ② 仮想環境作成 (venv) python -m venv ds-env # ③ 仮想環境を有効化 # Windows: ds-env\Scripts\activate # macOS/Linux: source ds-env/bin/activate # ------------------------------------------------- # ④ pip の最新版にアップデート & 必要パッケージ一括インストール pip install --upgrade pip pip install \ pandas numpy matplotlib seaborn scikit-learn jupyterlab |
Conda ユーザー向け(オプション)
|
1 2 3 4 |
conda create -n ds-env python=3.11 \ pandas numpy matplotlib seaborn scikit-learn jupyterlab conda activate ds-env |
補足:
condaはバイナリ依存関係の解決が得意です。特に Windows 環境でnumpy系列をインストールする際は有効です。
4️⃣ Jupyter Lab の起動
|
1 2 |
jupyter lab # ブラウザが自動で開きます |
ヒント:プロジェクトごとにカーネル(Python インタープリタ)を切り替えることで、複数の仮想環境を同時に管理できます。
データ取得方法 ― CSV・Kaggle API・簡易スクレイピング
注:以下で紹介する外部リンク(例:
school.data-learning.comやKotora記事)は、執筆時点では確認できていないため、実際にアクセスして URL が有効か必ずチェックしてください。
1️⃣ CSV ダウンロード
- 利点:手軽で高速。データの構造が単純な場合は最適。
- 欠点:更新頻度が低く、バージョン管理が難しい。
実装例(wget を使用)
|
1 2 3 4 5 6 |
# ディレクトリ作成(初回だけ実行) mkdir -p data # 例: 売上データ CSV を取得 wget https://example.com/dataset/sales.csv -O data/sales.csv |
ポイント:
--Oオプションで保存先ファイル名を明示。
- 大規模データの場合はcurl -L -o …でも可。
2️⃣ Kaggle API の利用
前提条件
- Kaggle アカウント作成 → Account ページから「Create New API Token」をクリックし、
kaggle.jsonを取得。 ~/.kaggle/kaggle.json(Linux/macOS)または%USERPROFILE%\.kaggle\kaggle.json(Windows)に配置し、ファイル権限を600に設定。
|
1 2 3 |
# Linux/macOS の例 chmod 600 ~/.kaggle/kaggle.json |
パッケージインストール
|
1 2 |
pip install kaggle # 最新版を取得 |
データセットのダウンロード手順
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# ディレクトリ作成(初回だけ実行) mkdir -p data/kaggle # Kaggle のデータセット一覧を確認 kaggle datasets list -s titanic # 「titanic」関連を検索 # 例: Titanic データセットをダウンロード kaggle datasets download -d heptapod/titanic -p data/kaggle # zip ファイルの解凍(必要に応じて) unzip data/kaggle/titanic.zip -d data/kaggle/titanic |
注意:
-dに指定するデータセット名は公式ページで確認してください。記事中のheptapod/titanicは 2024 年時点の例ですが、将来的に変更される可能性があります。
3️⃣ 簡易 Web スクレイピング
- 利用シーン:API が提供されていないニュースサイトや公開統計ページ。
- 法的留意点:必ず対象サイトの
robots.txtと利用規約を確認し、過剰なリクエストは避ける。
実装例(requests + BeautifulSoup)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import requests import pandas as pd from bs4 import BeautifulSoup # 取得したいページ URL を指定 url = "https://example.com/public-sales" # HTTP GET リクエスト resp = requests.get(url, timeout=10) resp.raise_for_status() # エラー時は例外を送出 # HTML パース soup = BeautifulSoup(resp.text, "html.parser") # テーブル要素の抽出(id が "sales-data" のもの) table = soup.find("table", {"id": "sales-data"}) df = pd.read_html(str(table))[0] # pandas が自動で DataFrame に変換 print(df.head()) |
ポイント:
-requests.get(..., timeout=10)でタイムアウトを設定し、ハングアップを防止。
-raise_for_status()により HTTP エラーがあれば即座に検知できる。
初心者向けデータサイエンスミニプロジェクト 5 選
共通実装ステップ(全案件で必須)
- データ前処理
- 欠損値の補完 (
fillna、SimpleImputer) - データ型変換 (
astype,pd.to_datetime) -
カテゴリ変数のエンコーディング(One‑Hot / LabelEncoder)
-
探索的データ分析 (EDA)
- 基本統計量:
df.describe()、df.info() -
可視化:ヒストグラム、ペアプロット (
sns.pairplot) -
モデル構築・評価
- scikit‑learn のパイプラインで前処理+学習器を一体化
-
評価指標はタスクに応じて選択(Accuracy, ROC‑AUC, MAE 等)
-
結果の可視化
-
重要変数、混同行列、予測分布などをグラフで提示
-
GitHub 公開
git init→.gitignore(.ipynb_checkpoints,__pycache__/)→README.mdに目的・手順・結果画像を記載
以下、各プロジェクトの概要とサンプルコードを掲載します。※ すべてのコードはローカル環境で実行前にパスやファイル名が正しいか必ず確認してください。
📊 プロジェクト例1:売上データの統計分析・可視化
目的
CSV の売上データから 月別・カテゴリ別 の合計金額を算出し、棒グラフとヒートマップで傾向を把握する。
コードスニペット
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # ------------------------------------------------- # 1. データ読み込み df = pd.read_csv("data/sales.csv", parse_dates=["date"]) # 2. 前処理:月とカテゴリの列を作成 df["month"] = df["date"].dt.to_period("M") monthly_sales = ( df.groupby(["month", "category"])["amount"] .sum() .reset_index() ) # ------------------------------------------------- # 3-1. 棒グラフ(カテゴリ別月次売上) plt.figure(figsize=(10, 6)) sns.barplot( data=monthly_sales, x="month", y="amount", hue="category" ) plt.title("月別・カテゴリ別売上合計") plt.xticks(rotation=45) plt.tight_layout() plt.show() # ------------------------------------------------- # 3-2. ヒートマップ(ピボットテーブル) pivot = monthly_sales.pivot( index="category", columns="month", values="amount" ) plt.figure(figsize=(12, 5)) sns.heatmap(pivot, cmap="YlGnBu", annot=True, fmt=".0f") plt.title("カテゴリ×月 の売上ヒートマップ") plt.show() |
補足
df.describe()で基本統計量を確認し、異常値がないか事前チェック。- 棒グラフは
hueによりカテゴリ別の比較が容易になる。
🚢 プロジェクト例2:Titanic データで生存予測(ロジスティック回帰)
目的
Kaggle の Titanic データセットを利用し、Accuracy と ROC‑AUC を評価指標にした二値分類モデルを構築する。
コードスニペット
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.compose import ColumnTransformer from sklearn.preprocessing import OneHotEncoder from sklearn.pipeline import Pipeline from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, roc_auc_score, ConfusionMatrixDisplay, plot_roc_curve import matplotlib.pyplot as plt # ------------------------------------------------- # 1. データ読込 train = pd.read_csv("data/kaggle/titanic/train.csv") test = pd.read_csv("data/kaggle/titanic/test.csv") y = train["Survived"] X = train.drop(columns=["Survived", "PassengerId"]) # ------------------------------------------------- # 2. 前処理定義 numeric_features = ["Age", "Fare", "SibSp", "Parch"] categorical_features = ["Sex", "Embarked", "Pclass"] preprocess = ColumnTransformer( transformers=[ ("num", "passthrough", numeric_features), ("cat", OneHotEncoder(handle_unknown="ignore"), categorical_features) ] ) # ------------------------------------------------- # 3. モデルパイプライン model = Pipeline(steps=[ ("prep", preprocess), ("clf", LogisticRegression(max_iter=300, n_jobs=-1)) ]) # ------------------------------------------------- # 4. 学習・評価 X_train, X_val, y_train, y_val = train_test_split( X, y, test_size=0.2, random_state=42, stratify=y ) model.fit(X_train, y_train) pred = model.predict(X_val) proba = model.predict_proba(X_val)[:, 1] print("Accuracy :", accuracy_score(y_val, pred)) print("ROC‑AUC :", roc_auc_score(y_val, proba)) # ------------------------------------------------- # 5. 可視化(混同行列・ROC 曲線) ConfusionMatrixDisplay.from_estimator(model, X_val, y_val) plt.title("Confusion Matrix") plt.show() plot_roc_curve(model, X_val, y_val) plt.title("ROC Curve") plt.show() |
補足
stratify=yにより、学習・検証データでクラス比が保持される。- ロジスティック回帰は 解釈性 が高く、特徴量の重要度を係数から直接確認できる。
🐦 プロジェクト例3:ツイート感情分析(日本語テキストマイニング)
目的
CSV に格納されたツイートデータを形態素解析し、ポジティブ/ネガティブ の二値分類モデルを構築する。
※ Janome は純粋な Python 実装で Windows/macOS/Linux すべてで動作します。
コードスニペット
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
import pandas as pd from janome.tokenizer import Tokenizer from sklearn.feature_extraction.text import CountVectorizer from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report import seaborn as sns import matplotlib.pyplot as plt import numpy as np # ------------------------------------------------- # 1. データ読込 df = pd.read_csv("data/tweets.csv") # カラム: text, label (0=negative, 1=positive) # ------------------------------------------------- # 2. 形態素解析(Janome) tokenizer = Tokenizer() def tokenize(text): return " ".join([t.base_form for t in tokenizer.tokenize(text)]) df["tokens"] = df["text"].apply(tokenize) # ------------------------------------------------- # 3. Bag‑of‑Words ベクトル化 vectorizer = CountVectorizer(max_features=3000, min_df=2) X = vectorizer.fit_transform(df["tokens"]) y = df["label"] # ------------------------------------------------- # 4. 学習・評価 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=1, stratify=y ) clf = LogisticRegression(max_iter=200, n_jobs=-1) clf.fit(X_train, y_train) pred = clf.predict(X_test) print(classification_report(y_test, pred)) # ------------------------------------------------- # 5. 重要単語上位 20 件の可視化 coef = clf.coef_[0] top_idx = np.argsort(np.abs(coef))[-20:] words = np.array(vectorizer.get_feature_names_out())[top_idx] scores = coef[top_idx] sns.barplot(x=scores, y=words, palette="viridis") plt.title("重要単語上位 20(絶対値が大きい順)") plt.xlabel("重み (Logistic 回帰係数)") plt.show() |
補足
min_df=2により出現回数が 1 のノイズ単語を除外。- 重みが正の単語はポジティブ、負の単語はネガティブ傾向を示す。
📷 プロジェクト例4:手書き数字 MNIST の簡易 CNN
目的
TensorFlow/Keras を用いて CPU 環境でも数分で学習可能 なシンプルな Convolutional Neural Network(CNN)を構築し、MNIST 手書き数字の認識精度を確認する。
コードスニペット
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
import tensorflow as tf from tensorflow.keras import layers, models import matplotlib.pyplot as plt # ------------------------------------------------- # 1. データ取得(Keras に組み込み済み) (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() x_train = x_train[..., tf.newaxis] / 255.0 # (28,28,1) x_test = x_test[..., tf.newaxis] / 255.0 # ------------------------------------------------- # 2. モデル定義 model = models.Sequential([ layers.Conv2D(32, kernel_size=3, activation='relu', input_shape=(28,28,1)), layers.MaxPooling2D(pool_size=2), layers.Conv2D(64, kernel_size=3, activation='relu'), layers.MaxPooling2D(pool_size=2), layers.Flatten(), layers.Dense(128, activation='relu'), layers.Dropout(0.5), layers.Dense(10, activation='softmax') ]) model.compile( optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'] ) # ------------------------------------------------- # 3. 学習 history = model.fit( x_train, y_train, epochs=4, batch_size=128, validation_split=0.1, verbose=2 ) # ------------------------------------------------- # 4. 評価 test_loss, test_acc = model.evaluate(x_test, y_test, verbose=0) print(f"Test accuracy: {test_acc:.4f}") # ------------------------------------------------- # 5. 予測結果の可視化(上位 5 枚) pred = model.predict(x_test[:5]).argmax(axis=1) fig, axes = plt.subplots(1, 5, figsize=(12, 3)) for i, ax in enumerate(axes): ax.imshow(x_test[i].numpy().squeeze(), cmap='gray') ax.set_title(f"Pred: {pred[i]}") ax.axis('off') plt.show() |
補足
- CPU での学習時間は約 2 分(GPU が無い環境でも問題なし)。
Dropout(0.5)により過学習を抑制し、汎化性能が向上。
📈 プロジェクト例5:COVID‑19 日別感染者数の時系列予測(ARIMA)
目的
statsmodels の ARIMA モデルで 日本国内の新規感染者数 を 30 日先まで予測し、実測値と比較する。
データ出典:Our World in Data (2024 年 12 月時点)
URL(確認必須):https://covid.ourworldindata.org/data/owid-covid-data.csv
コードスニペット
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
import pandas as pd import matplotlib.pyplot as plt from statsmodels.tsa.arima.model import ARIMA from sklearn.metrics import mean_absolute_error, mean_absolute_percentage_error # ------------------------------------------------- # 1. データ取得 & 前処理 url = "https://covid.ourworldindata.org/data/owid-covid-data.csv" df = pd.read_csv(url, parse_dates=["date"]) jp = ( df[df["iso_code"] == "JPN"] [["date", "new_cases"]] .set_index("date") .fillna(0) ) # ------------------------------------------------- # 2. 学習データ(最終30日を除外) train = jp.iloc[:-30] # ARIMA のハイパーパラメータは例示 (5,1,0) → 実際には AIC/BIC でチューニング model = ARIMA(train, order=(5, 1, 0)) fit = model.fit() # ------------------------------------------------- # 3. 予測(30 日先) forecast = fit.forecast(steps=30) forecast.index = pd.date_range( start=train.index[-1] + pd.Timedelta(days=1), periods=30, freq="D" ) # ------------------------------------------------- # 4. 評価指標 actual = jp["new_cases"][-30:] mae = mean_absolute_error(actual, forecast) mape = mean_absolute_percentage_error(actual, forecast) * 100 print(f"MAE : {mae:.1f} 件") print(f"MAPE: {mape:.2f} %") # ------------------------------------------------- # 5. 可視化 plt.figure(figsize=(10, 5)) jp["new_cases"].plot(label="実測", linewidth=1) forecast.plot(label="予測 (ARIMA)", linewidth=2, linestyle='--') plt.title("日本の COVID‑19 日別新規感染者数予測") plt.ylabel("件数") plt.legend() plt.show() |
補足
- パラメータチューニングは
auto_arima(pmdarima)や手動で AIC を比較しながら行うと精度向上。 - MAPE が 10 % 以下であれば実務レベルでも「概算予測」として十分に使える。
学習を継続するためのおすすめ教材・コミュニティ
| カテゴリ | 推奨リソース | 主な特徴 |
|---|---|---|
| 公式ドキュメント | pandas, scikit‑learn, TensorFlow の日本語ページ | 常に最新版が掲載、API 変更点をすぐ把握できる |
| ハンズオン記事 | https://python-webacademy.com/blog/create-with-python(2025 年)※リンクは執筆時点で有効か確認 | ステップバイステップの実装例が豊富 |
| Kaggle Learn | 無料チュートリアル(Python, EDA, ML) | ブラウザ上でコード実行、データセットがすぐ利用可能 |
| 動画教材 | Udemy「無料 Python データサイエンス入門」・YouTube「データサイエンティストのたまご」 | ビジュアルで概念を把握しやすい |
| コミュニティ | Discord 「Data Science Japan」、Slack 「PyData Tokyo」 | Q&A が活発、定例勉強会・ハッカソン情報が流れる |
実践的な学習法
1. まずは公式ドキュメントで「関数の使い方」を確認。
2. ハンズオン記事や Kaggle Learn のミニ課題をこなす。
3. 疑問点は Discord/Slack に質問し、回答を自分のノートにまとめる。
まとめ & 次のアクション
| フェーズ | やること |
|---|---|
| 環境構築 | Python → 仮想環境 (venv or conda) → 必要ライブラリ (pip install …) → Jupyter Lab 起動 |
| データ取得 | CSV ダウンロード、Kaggle API(kaggle datasets download)またはスクレイピングでデータをローカルに保存 |
| プロジェクト実装 | 5 つのミニプロジェクトを順番に完遂し、各ステップで Git にコミット |
| 成果公開 | GitHub リポジトリ作成 → .gitignore 整備 → README.md に目的・手順・結果画像(PNG/JPG)添付 |
| 学習継続 | 推奨教材・コミュニティで最新技術をキャッチアップし、次は「時系列 Forecast + デプロイ」や「NLP 大規模モデル入門」へステップアップ |
🎯 今すぐ始めるミニタスク
- 仮想環境作成
bash
python -m venv ds-env && source ds-env/bin/activate
pip install --upgrade pip
pip install pandas numpy matplotlib seaborn scikit-learn jupyterlab - Jupyter Lab 起動 →
File > New > Notebookで空のノートブックを作成。 - CSV データ取得(例: 売上データ)を試し、
pandas.read_csv()が正しく読めるか確認。 - GitHub にリポジトリ作成 →
git init && git add . && git commit -m "initial commit"
これらのステップが完了したら、次は「プロジェクト例1」のコードを実行し、グラフが表示されることを確認してください。成功体験が得られたら、残りの 4 つのミニプロジェクトへと進みましょう。
※ 本稿中の外部リンクは執筆時点での情報です。リンク切れや内容変更が起きている可能性がありますので、必ず最新情報をご自身でご確認ください。