自動化無しに生活無し

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

  • MicroSoft Accessの制約メモ

    • 作成日時:
    • 最終更新日時:
    • Categories: others
    • Tags:
    MS Accessは一般的なDBと違い制約が多い。 設計時に制約を意識して作らないと、大幅な修正を迫られるため、後のためにもまとめておく。 Accessの制約一覧 CASE文が使えない、IIFで対処する 結合条件を()で囲まないとエラーが出る ( LEFT JOIN xx ON ( A AND B AND C ) などとしないとSQLエラーが出る。) バルクインサートはサポートしていない 2つ以上のテーブルを結合したテーブルを表示したあと、画面側で編集をすること ...
  • 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を使ってはいけない。 よって ...
  • PySide6のQtを使ってGUIアプリを作る

    PythonでもGUIアプリは作れる。 標準モジュールのtkinterと違い、より高度なものを作れる。 【関数】クリックで1ずつ増える 基本のボタン押下で1ずつ増えるコード from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton app = QApplication([]) counter = 0 def click_counter(): global counter counter += 1 button.setText(f"{counter} 回押しました。") print(counter) window = QMainWindow() window.setWindowTitle("テストウィンドウ") button = QPushButton(f"{counter} 回押しました。") button.clicked.connect(click_counter) window.setCentralWidget(button) window.resize(300, 200) window.show() app.exec() このコードではクラスを使わ ...
  • 【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') ...
  • 【SQL】GROUP BY, HAVING, COUNTの3つでグループ化して集計、条件で絞り込みカウントする

    GROUP BY + HAVING + COUNT よくある手法の一つに、 売上データから営業担当者ごとに売上件数を集計し、売上件数が2件以上の人だけ表示したい。 というものがある。 id salesperson region amount 1 Alice East 100 2 Bob West 200 3 Alice East 150 4 Bob West 250 5 Carol East 300 データがこの場合、SQLで表現すると、 SELECT salesperson, COUNT(*) AS num_sales FROM sales GROUP BY salesperson HAVING COUNT(*) >= 2; 結果はこうなる。 salesperson num_sales Alice 2 Bob 2 GROUP BY カラムが同じ値ごとに集計 GROUP BY はカラムを指定し、同じ値ごとに集計をすることができる。 今回は salesperson を指定することで、同じ営業 ...
  • 【SQL】Oracleデータベースのファンクション(関数)の一覧

    NVL(A,B) AがNULLならBを返す 以下は、bonus カラムの値がNULLの場合、そのまま表示させず、0を返すようにしている。 SELECT NVL(bonus, 0) AS bonus_value FROM employees; 文字列を返すこともできる。ただし元のカラムの値と同じデータ型に限る。 SELECT NVL(middle_name, '(なし)') AS middle FROM users; つまり以下はエラー(暗黙的に型変換される可能性もあるが、エラーになることがあるため、推奨されない) SELECT NVL(bonus, '賞与なし') AS bonus_value FROM employees; この場合、型変換を明示的に指定して変換をするとよいだ ...
  • 【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つのカテゴリに分ける分類問題を二値分類問題という。 回帰問題: データを元に連続値(価格、重量、カロリーなど)を予測する問題。 ロジスティック回帰は、「回帰」の名がついているが「二値分類問題」 ロジスティック回帰は、言葉通り回帰を使うため回帰問題であるように思えるが、実は二値分類問題に使われるモデルである。 一方、線型回帰は連続値を予測するため ...