Contents
Webスクレイピングによるニュースデータ収集ツール
Webスクレイピングは依然として重要スキルであり、RSSフィードや動的なWebページから情報を抽出する実装が求められています。bs4とrequestsライブラリを使って、BBCやAFPなどの信頼できる情報源を対象にしたツールを作成できます。
bs4とrequestsを使った基本構成
ニュースサイトのHTML構造を解析し、記事タイトルや本文を取得するロジックは、スクレイピングの基礎となります。以下のコードでは、BeautifulSoupでHTMLタグを抽出し、requestsでURLにアクセスしています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import requests from bs4 import BeautifulSoup # ニュースサイトからHTMLを取得 url = "https://www.bbc.com/news" response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # CSVファイルからデータ読み込み df = pd.read_csv('housing_prices.csv') # 特徴量と目的変数の分離 X = df.drop(['price'], axis=1) y = df['price'] |
scikit-learnでの線形回帰実装
前処理したデータを使って、学習用とテスト用に分割し、線形回帰モデルを構築します。以下のコードでは、LinearRegressionクラスを使用しています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression # データ分割とモデル訓練 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) model = LinearRegression() model.fit(X_train, y_train) # 学習曲線の可視化(例) import matplotlib.pyplot as plt from sklearn.model_selection import learning_curve train_sizes, train_scores, test_scores = learning_curve(model, X, y, cv=5, scoring='r2') plt.plot(train_sizes, train_scores.mean(axis=1), label='Train Score') plt.plot(train_sizes, test_scores.mean(axis=1), label='Test Score') plt.legend() |
GitHubリンク: 機械学習モデルサンプル
このコードには、学習曲線の可視化方法がコメント付きで記載されており、過学習や適切なモデル評価を理解するための手助けになります。
API連携型天気アプリケーション
2026年においてもREST APIは主要技術であり、OpenWeatherMapなどと連携することで、リアルタイムなデータ取得が可能です。tkinterを用いた簡単なGUIも併せて実装できます。
OpenWeatherMap APIとの接続手順
APIキーを取得した後、指定されたURLにリクエストを送信し、JSON形式で返される天気情報をパースします。以下のコードでは、requestsライブラリを使用してデータ取得を行います。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import requests # OpenWeatherMap APIへのアクセス(例) api_key = "your_api_key" city = input("都市名を入力してください: ") url = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}" response = requests.get(url) data = response.json() # 天気情報の取得(例) temperature = data['main']['temp'] - 273.15 # ケルビン温度から摂氏に変換 print(f"{city}の現在の気温は{temperature:.1f}度です。") |
注意: OpenWeatherMap APIはケルビン温度(K)で返すため、摂氏への変換には「T(°C) = T(K) - 273.15」を用います。この式は絶対零度(-273.15°C)の関係から導出されます。
tkinterによるGUI実装
ユーザーが都市名を入力し、天気情報を表示する簡単なGUIを作成できます。以下のコードでは、Entryウィジェットで都市名を受け取り、Labelに結果を表示しています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import tkinter as tk def get_weather(): city = entry.get() # 上記のAPI呼び出しロジックをここに組み込む result_label.config(text=f"{city}の現在の気温は{temperature:.1f}度です。") root = tk.Tk() entry = tk.Entry(root) entry.pack() button = tk.Button(root, text="天気を取得", command=get_weather) button.pack() result_label = tk.Label(root) result_label.pack() root.mainloop() |
GitHubリンク: 天気アプリサンプル
このコードには、JSONデータのパース方法やエラーハンドリングの仕組みがコメント付きで記載されています。
簡単なゲーム開発(Pygame活用例)
Pygameは2026年においても教育用に適したライブラリであり、インベーダー撃退などの簡単なゲームを制作することで、イベント処理や衝突判定の理解が深まります。
インベーダー撃退ゲームの作成手順
以下のコードでは、プレイヤーの船と敵機を描画し、キーボード入力に応じて移動させる基本的なロジックを実装しています。また、弾幕の生成と衝突判定も加えた例を示します。
|
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 pygame pygame.init() screen = pygame.display.set_mode((800, 600)) clock = pygame.time.Clock() # プレイヤーの初期位置 player_x = 400 player_y = 550 # 敵機 enemy_x = 375 enemy_y = 50 # 弾 bullet_x = player_x + 25 bullet_y = player_y bullet_active = False running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # ショットキー処理 if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: bullet_active = True # キーボード入力処理 keys = pygame.key.get_pressed() if keys[pygame.K_LEFT] and player_x > 0: player_x -= 5 if keys[pygame.K_RIGHT] and player_x < 750: player_x += 5 # 弾の移動処理 if bullet_active: bullet_y -= 10 if bullet_y < 0: bullet_active = False # 描画 screen.fill((0, 0, 0)) pygame.draw.rect(screen, (255, 0, 0), (player_x, player_y, 50, 30)) # プレイヤー pygame.draw.rect(screen, (0, 255, 0), (enemy_x, enemy_y, 50, 30)) # 敵機 if bullet_active: pygame.draw.rect(screen, (255, 255, 0), (bullet_x, bullet_y, 10, 20)) # 弾 # 衝突判定(弾と敵) if bullet_active and (enemy_x < bullet_x + 10 < enemy_x + 50) and (enemy_y < bullet_y + 20 < enemy_y + 30): print("インベーダーを撃ち落とした!") bullet_active = False enemy_y += 50 # 敵機移動 pygame.display.flip() clock.tick(60) pygame.quit() |
GitHubリンク: インベーダー撃退ゲームサンプル
このコードには、ステップコメントが記載されており、Pygameの基本機能を理解するためのガイドとして活用できます。
SQLiteを用いた個人用管理アプリ
2026年においてもSQLiteは軽量で実用性の高いデータベースであり、タスクリストや支出管理などのアプリを開発することで、DB設計とGUI連携のスキルが身につきます。
データベース構築からCRUD操作
以下のコードでは、SQLiteに接続し、テーブルを作成する例を示しています。その後、データの挿入・更新・削除・取得を行うことができます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import sqlite3 # データベース接続とテーブル作成 conn = sqlite3.connect('todo.db') cursor = conn.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS tasks ( id INTEGER PRIMARY KEY, title TEXT NOT NULL, completed BOOLEAN DEFAULT 0 ) """) conn.commit() |
GUIとDBの連携方法
tkinterで作成したGUIから、データベースにアクセスして情報を操作できます。以下のコードでは、タスクの一覧を表示し、チェックボックスで完了状態を更新するロジックを実装しています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
from tkinter import * import sqlite3 def update_task(task_id, status): conn = sqlite3.connect('todo.db') cursor = conn.cursor() cursor.execute("UPDATE tasks SET completed = ? WHERE id = ?", (status, task_id)) conn.commit() conn.close() root = Tk() listbox = Listbox(root) listbox.pack() # タスクの表示ロジック(DBから読み込み) conn = sqlite3.connect('todo.db') cursor = conn.cursor() cursor.execute("SELECT * FROM tasks") tasks = cursor.fetchall() for task in tasks: listbox.insert(END, f"{task[0]}: {task[1]} {'完了' if task[2] else '未完了'}") root.mainloop() |
GitHubリンク: SQLite管理アプリサンプル
このコードには、SQLインジェクション対策の仕組みがコメント付きで記載されており、セキュリティ面での理解を促進します。
記事のまとめ
- Webスクレイピングツール: bs4とrequestsを使ってニュースデータを収集
- 機械学習モデル: pandasとscikit-learnでCSV解析および予測モデルを作成
- 天気アプリ: OpenWeatherMap APIとtkinterを使ってリアルタイムな表示を行う
- Pygameゲーム: イベント処理や衝突判定を駆使したインベーダー撃退ゲームを制作
- SQLite管理アプリ: データベース構築からGUI連携までの一貫した実装
2026年の技術トレンドに沿ったPythonプロジェクトは、実務で使えるスキルを習得するための最適な手段です。各プロジェクトにはGitHubへの公開リンクが用意されており、コメント付きコードを通じて理解を深めることができます。