自動化無しに生活無し

WEB開発関係を中心に備忘録をまとめています

  • EXISTSの使い方

    DBはOracle。 外部キーを使った存在チェック SELECT d.department_id, d.department_name FROM departments d WHERE EXISTS ( SELECT 1 FROM employees e WHERE e.department_id = d.department_id ); このSQLは、部署内に社員がいる部署だけを返す。 まず、departments内のデータを取り出す。 employeesからdepartment_id で一致するものが1件でもあれば、そのdepartmentsを表示する。 イメージ的には全走をして、行が見つかればTRUEを返してアーリーリターンをしている。(※ただしDB ...
  • Oracleデータベース演習

    結合と集約をセットで扱う SELECT E.JOB_ID, SUM(E.SALARY) AS SUM_SALARY , AVG(E.SALARY) AS AVG_SALARY, J.JOB_TITLE FROM EMPLOYEES E INNER JOIN JOBS J ON J.JOB_ID = E.JOB_ID GROUP BY E.JOB_ID , J.JOB_TITLE; 補足1: OracleではテーブルにはASを使ってはいけない。 PostgreSQLやMySQL、SQLiteでは列のエイリアスに使うASを、テーブルにも使える。 よって、以下SQLは有効。 SELECT E.JOB_ID, SUM(E.SALARY) AS SUM_SALARY , AVG(E.SALARY) AS AVG_SALARY, J.JOB_TITLE FROM EMPLOYEES AS E INNER JOIN JOBS AS J ON J.JOB_ID = E.JOB_ID GROUP BY E.JOB_ID , J.JOB_TITLE; しかし、Oracleにおいては、テーブルのエイリアスにASを使ってはいけない。 よって ...
  • 【Pandas】read_sql で生のSQL(SELECT文)を実行、DBから直接DataFrameを作る

    分析するデータは常にCSVにあるわけではない。DBから取り出す必要もある。 そこで、Pandasからread_sql メソッドを使ってDBから直接DataFrameを作る。 pandasで.read_sql() を使うサンプルコード pip install pandas pip install sqlalchemy 事前にpandas とsqlalchemy をインストールしておく。 import pandas as pd from sqlalchemy import create_engine # 例: PostgreSQL に接続する場合(DB種類・ホスト・ポート・ユーザー・パスワードを変更) engine = create_engine('postgresql://username:password@localhost:5432/mydb') ...
  • 【Pythonでグラフ描画】matplotlibとseabornのAPIのまとめ

    matplotlib matplotlibは配列データを元に、グラフを描画することができる。 代表的な 棒グラフ、折れ線グラフ、散布図の3つを以下コードで描画している。 import numpy as np import matplotlib.pyplot as plt # データ準備 categories = ['A', 'B', 'C', 'D', 'E'] values = [5, 7, 3, 8, 4] # 棒グラフ用 x = np.arange(0, 10, 1) # 折れ線グラフ・散布図用 y_line = np.sin(x) # 折れ線グラフ用 y_scatter = y_line + np.random.normal(0, 0.2, size=x.shape) # 散布図用(ノイズを加える) # --- 1. 棒グラフ --- plt.figure(figsize=(6, 4)) plt.bar(categories, values, color='skyblue') plt.title("Bar Graph") plt.xlabel("Category") plt.ylabel("Value") plt.grid(axis='y') plt.tight_layout() plt.show() # --- 2. 折れ線グラフ --- plt.figure(figsize=(6, 4)) plt.plot(x, y_line, marker='o', linestyle='-', color='green') plt.title("Line Graph") plt.xlabel("X") plt.ylabel("Y") plt.grid(True) plt.tight_layout() plt.show() # ...
  • 【scikit-learn】ロジスティック回帰は二値分類問題に、線型回帰は回帰問題に【教師あり学習】

    前提知識 分類問題: データを元にカテゴリを予測する問題。とりわけ2つのカテゴリに分ける分類問題を二値分類問題という。 回帰問題: データを元に連続値(価格、重量、カロリーなど)を予測する問題。 ロジスティック回帰は、「回帰」の名がついているが「二値分類問題」 ロジスティック回帰は、言葉通り回帰を使うため回帰問題であるように思えるが、実は二値分類問題に使われるモデルである。 一方、線型回帰は連続値を予測するため ...
  • 【教師なし学習】k-means(k平均法)により似たデータをクラスタリング(グループ化)する

    前提知識 教師なし学習とは? 教師なし学習とは、ラベル(正解)のない学習のことである。 例えば、犬猫の画像を用意して、それぞれ個々の画像に犬と猫のラベル(正解)を与えた上で学習させる方法を教師あり学習という。 一方で、教師なし学習の場合、犬と猫の画像をまとめて与えるだけで、犬や猫のラベル(正解)は学習に含ませない。 この教師なし学習のメリットは、事前にラベルを用意する必要がないということ。 例えば、ラベリング ...
  • 【Pillow】画像をまとめてクロッピング(トリミング)する【マルチスレッド高速化】

    自炊した画像データには、余白がある。そこでPillowを使って必要な部分だけトリミングしていく。 ただし、「画像を読み込んで、クロッピング(トリミング)をして保存をする」という処理を、大量に繰り返すのでマルチスレッドで高速化させる。 速度差を意識するため、処理時間も計測する。 まずはforループで直列実行 まずは直列実行してみる。 from PIL import Image import os input_dir = "images" output_dir = "cropped_images" # 出力先が存在しない場合はつくる。 os.makedirs(output_dir, exist_ok=True) # 切り抜き範囲 ...
  • Pythonのthreading.Thread と concurrent.futures.Threadpoolexecutor の違い【マルチスレッド処理】

    Pythonのマルチスレッドには2つの方法がある。 threading.Thread と concurrent.futures.Threadpoolexecutor の2つである。 本記事ではその比較をまとめる 比較項目 threading.Thread Threadpoolexecutor スレッドの管理 自分でスレッドの実行と終了の管理が必要 自動的に管理される 戻り値の扱い 基本取得できない(共有変数などを使う) 取得できる エラーハンドリング 各スレッドでtry-exceptをしなければならない Future.exception() で取得可能 スレッドの起動 個別に起動できる タスクをプールに投げるので、個別にはスレッドの起 ...
  • 【データベース】基本的なSQL文の一覧【SELECT, INSERT INTO, DELETE, UPDATE, UNION, JOIN】

    【導入】dockerでDatabaseを用意する。 Oracle DBを用意する UbuntuのDockerでOracle DB SQL Silverの試験勉強の環境を整える ただし、この記事ではPostgreSQLでの使用を想定しているため、SQLが若干違う点に注意。 テーブルをつくるCREATE TABLE文 CREATE TABLE テーブル名 ( カラム名1 データ型 [制約], カラム名2 データ型 [制約], ... ); この書き方に倣って、 CREATE TABLE categories ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT ...
  • 【C#】LINQのメソッドのまとめ

    LINQ の概要と前提情報 LINQ はコレクションに対して宣言的にクエリを書くためのしくみである。 コレクションとはイテラブルな要素のことであり、配列や辞書、リストが当てはまる。 C#の配列は固定長であり、リストは可変長。リストの方には別途メソッドが豊富に用意されている。配列は固定長なので、Pythonのタプルに近いだろう。 辞書はキーを指定して値を取り出す。 基本のWhereとToList class Student { public string Name; public int Age; public int Grade; } var students ...