- 0.0.1. Pythonで並列処理するコードの雛形(進捗表示つき)
- 0.0.2. Pythonを使えるようにする手順@Mac
- 0.0.3. 【OWASP ZAP】認証設定 (1) Form認証、ベーシック認証のわかりづらいところ
- 0.0.4. 【AWS,Python】Lambdaを使ってJSONファイルをS3に保存する
- 0.0.5. 【典型90問】 成長記録 #002
- 0.0.6. Amazon NeptuneでグラフDBを体験してみる② Gremlinを用いた超単純なデータの操作
- 0.0.7. Leetcode Day1
- 0.0.8. ロバスト主成分分析(RPCA)
- 0.0.9. 低ランクのニューラルネットワーク(LowRankNN)。重み行列 W を A×B に分解。
- 0.0.10. プールは楽しいな。スーパーウオータスライダーゲーム。
- 0.0.11. ABC369G 解法メモ
- 0.0.12. プロンプトインジェクションを起こす輩を懲らしめる
- 0.0.13. 【最速検証記事!?】Azure OpenAIで実現するStructured Outputsの力: 具体例と実装ガイド🚀【構造化出力】
- 0.0.14. Python3認定データ分析試験マンハッタン距離計算方法
- 0.0.15. 辞書内の値に応じて値を集計【Python】
- 0.0.16. 最小の開始日と最大の終了日の期間の日数を計算する【Python】
- 0.0.17. カメラキャリブレーションを簡単に!自分用の手順まとめ
- 0.0.18. Python シーケンスまとめ①
- 1. Python シーケンスまとめ①
Pythonで並列処理するコードの雛形(進捗表示つき)
Pythonで並列処理するときのコードの雛形です。タスクを何件処理したかの進捗も表示します。自身の備忘録用に投稿しておきます
“`python
import dataclasses
import logging
import random
import sys
import threading
import time
from concurrent.futures import ThreadPoolExecutor
from typing import List# ログ設定
logger = logging.getLogger()
logger.setLevel(logging.INFO)
log_format = logging.Formatter(“%(asctime)s [%(levelname)8s] %(message)s”)
# 標準出力へのハンドラ
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setFormatter(log_format)
logger.addHandler(
Pythonを使えるようにする手順@Mac
## Python3を使えるようにするために
Macには標準でPythonが入っていますが、バージョンが2と古く、そのまま使うのは非推奨です。古いプロジェクトであれば2を使いますが、世の中の多くは3をベースに動いていますので、3に合わせましょう。:::note info
本稿は環境によって差異が出る内容となっています。
コマンドを安易にコピペせず、よく確認の上作業をお願いします。(責任は負いかねます)誤りがありましたら、コメントでのご指摘をお願いします。
:::## Homebrewを入れる
まずはともあれ、Homebrewを入れましょう。
これはパッケージ管理アプリケーションという類のもので、パッケージ(今回でいうとPython3がこれにあたります)の管理をいい感じにやってくれます。
“`sh:homebrewのインストール
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`きちんと入ったことを確認するために、vers
【OWASP ZAP】認証設定 (1) Form認証、ベーシック認証のわかりづらいところ
# はじめに
OWASP ZAPを使用し、いくつかのログインの必要なサイトに対して診断を実施しました。
公式のドキュメントを見ても、どのように設定したらいいのか、実際の挙動がどうなるのか、わかりづらい部分が結構ありました。そうしたところを記事にまとめてみようと思います。
今回はZAPの認証設定「Form-Based Authentication」「JSON-Based Authentication」「HTTP/NTLM Authentication」について書きます。次回以降、ユーザーが作成したスクリプトを使用できる「Script-Based Authentication」やユーザー名・パスワード以外設定不要な「Auto-Detect Authentication」について書く予定です。
また、Automation Frameworkやクロールしにくいサイトに対するSpider, Ajax Spider等を工夫して行う方法もまとめていきたいと考えています。記事内で触れていない、インストールから設定、スパイダー、診断の基本的な方法は下記ページがわかりやすかったです。
[はじめ
【AWS,Python】Lambdaを使ってJSONファイルをS3に保存する
# LambdaからS3に保存
![Screenshot 2024-09-05 114344.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722467/c852df12-86b9-0367-b3ea-6a5c5730e440.png)
以前作ったlambdaの関数↑から、取得したJSONファイルをS3へ保存させるようにしました。
https://qiita.com/otaruit/items/44b487e45e5bb6247376
## S3への保存にはboto3が必要
以前作成したコードに
boto3
のインポートを追加します。“`python
import json
import boto3 //ここを追加
from datetime import datetime
import requests
from bs4 import BeautifulSoup
import urllib3
“`
## boto3からS3オブジェクトを呼び出す
boto3.resource(‘s3
【典型90問】 成長記録 #002
# [典型90問 002 – Encyclopedia of Parentheses(★3)](https://atcoder.jp/contests/typical90/tasks/typical90_b)
概要としては長さN列のカッコ列を出力する問題。
方針だけ解説で見たところbit全探索のアルゴリズムを用いて解くっぽい。## bit全探索とは
〇×のような、それぞれ二つの選択肢がある問題に対して、すべての組み合わせを1~nとすると、二進数に変換したときに1と0ですべての組み合わせを表すことができる。このようなアルゴリズムをbit全探索という。
一般的に全探索するため要素数がn≦20程度の場合に用いる。
基本的なbit全探索の型は以下のサイトを参考にして学んだ。[Python bit全探索を簡単にやるコツ](https://qlitre-weblog.com/python-bit-all-search-easy-trick#google_vignette)
### 脳筋コード
“`python
n = int(input())
k = [] #生成した配列を格納す
Amazon NeptuneでグラフDBを体験してみる② Gremlinを用いた超単純なデータの操作
こんにちは、Kaneyasuです。
本記事はAmazon NeptuneでグラフDBを体験してみるシリーズの2回目です。
本シリーズの他の記事は記事の最後にリンクをつけています。# 本シリーズ記事の目標
– グラフDBの意味と用途を理解する
– プログラムからAmazon Neptuneにアクセスする方法を習得する
– Amazon Neptuneのセキュリティの確保方法を習得する
– Amazon Neptuneのスケーリングを習得する
– Amazon Neptuneのバックアップ、リカバリ方法を習得する# 本シリーズ記事執筆における前提条件
– グラフDBはAmazon Neptuneを使用
– モデルはプロパティグラフ、クエリ言語はGremlinを使用
– クエリ言語の実行はPythonのgremlinpythonで行う
– PythonはJupyter Notebookで実行
– Jupyter NotebookはAmazon SageMakerのNotebookインスタンスで実行# 第2回目の目標
– Amazon Neptune上のプロパティグラフに対
Leetcode Day1
**今日からLeetcodeをやっていく!**
今日から毎日Leetcodeをやろうと思う。
1問目はLinked List cycle
https://leetcode.com/problems/linked-list-cycle/submissions/1379361223/目次
—————–* [LinkedList](#linkedlist)
* [LinkedListとArrayListの違い](#difference-between-linked-list-and-array-list)
* [Linked List Cycle](#linked-list-cycle)—
## LinkedList
### とは何か?まずは、LinkedListが何かを知らなかったので調べた。
“`python
class LinkedList:class Node:
def _
ロバスト主成分分析(RPCA)
# はじめに
本稿は[こちらの参考書](https://faculty.washington.edu/sbrunton/DataBookV2.pdf)の3.7節、Robust Principal Component Analysis (RPCA) の備忘。# 概要
$\ell_2$-最適化や最小二乗法は外れ値や破損、ノイズに影響されやすいことが知られている。主成分分析も同様に外れ値に関して脆くなってしまう。この敏感さを改善するために、CandesらはロバストなPCAを開発した。ここではその具体的な手法について紹介およびデモコードを作成してみる。# Principal Component Analysis
先ず、通常のPCAについて再喝しておく。
PCA(Principal Component Analysis)は、データ行列$\boldsymbol{X}\in\mathbb{R}^{m\times n}$を低次元の空間に射影することで、データの主な構造を捉える手法である。次のようにデータ行列を近似する低ランク行列$\boldsymbol{L}$を求める。“`math
\b
低ランクのニューラルネットワーク(LowRankNN)。重み行列 W を A×B に分解。
#### TensorFlow.jsを使用してシンプルなニューラルネットワーク(SimpleNN)と低ランクのニューラルネットワーク(LowRankNN)をトレーニングし、損失の変化を比較するためのコードです。
![スクリーンショット 2024-09-05 063122.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3838874/5fdb7888-5ecf-aafd-e5ef-285a57dae30a.png)
低ランク分解の例
低ランク分解の具体的な計算例を挙げると、重み行列 W を A×B に分解する方法は次のようになります:“`python
import numpy as np# 元の重み行列
W = np.random.randn(100, 10)# 低ランク分解
rank = 5
A = np.random.randn(100, rank)
B = np.random.randn(rank, 10)# 低ランク近似
W_approx = np.dot(A, B)
プールは楽しいな。スーパーウオータスライダーゲーム。
## スーパーウオータスライダーゲーム。
チューブを進む体験ができます。
![スクリーンショット 2024-09-05 042541.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3838874/048841e2-e14d-f613-5595-49395a9aedb5.png)![スクリーンショット 2024-09-05 042513.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3838874/fddf25a3-6c89-3cb3-0759-d931d9f0b9b9.png)
![スクリーンショット 2024-09-05 042453.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3838874/af76acd3-b115-7e77-f4ec-639cf59ddbd6.png)
“`html
ABC369G 解法メモ
# はじめに
突然書きたくなったので書きます。例によって正当性とかそういうのは放置です。# 問題リンク
https://atcoder.jp/contests/abc369/tasks/abc369_g
# 提出コード
https://atcoder.jp/contests/abc369/submissions/57324615
# 考察プロセス
まず高橋君が通る経路は、選ばれた頂点と根までのパスで通る頂点によって構成される部分木をDFSで通る経路になります。こうすることで、必要な辺を2回だけ通ることですべての頂点を回ることができます。(これ自体が典型?)すなわち、通る必要がある辺の合計長×2が答えになります。従い、最後に求める答えを2倍する形で、いったん合計長だけを考えましょう。(以降の画像による例示は合計長のみですので注意してください。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2522928/a820111c-0321-9494-6940-8e423cb395
プロンプトインジェクションを起こす輩を懲らしめる
この記事はQiitaを読まれる方々には釈迦に説法かもしれないですね。
ネタぐらいに思ってください。## 生成AIを用いるリスク
生成AIを用いるリスクは様々なものが存在します。
ハルシネーションなどもその一つです
ただ、ハルシネーションはユーザーが意図的にもたらすリスクではなく、生成AIの情報を鵜呑みにする場合のリスクです。今回は、生成AIを用いるにあたって避けては通れない
**プロンプトインジェクション**
に関するリスクに対して、悪い輩をどう懲らしめるかを考えた結果、自分の中の現状の答えが感情に訴えるしかなかったため、ここに供養します。## そもそもプロンプトインジェクションとは?
プロンプトインジェクションとは、本来の利用目的から外れ、
・情報漏洩
・不適切な利用
・詐欺への流用
等を引き起こしかねないものであり、システム側で定義したプロンプトを無視させるような命令を書いたり、人情(AIに人情っていうのも変だけど)に訴えかけたり、論点をずらしたりすることで、本来意図していない使われ方をされたり、悪用されたりする可能性のある攻撃手法のことです。#### 例
【最速検証記事!?】Azure OpenAIで実現するStructured Outputsの力: 具体例と実装ガイド🚀【構造化出力】
掲題の記事を以下に書きました。
構造化出力はとても便利です。
https://zenn.dev/chips0711/articles/feb8663ebc54ad
Python3認定データ分析試験<数学>マンハッタン距離計算方法
# 前置き
Python認定データ分析試験の範囲で数学のカテゴリにマンハッタン距離の計算があります。
備忘録として計算方法を残します。
# 問題
A = (1,2,3) B = (4,5,6)の2つの座標がある。
座標AB間のマンハッタン距離を求めてください。# 解き方
各座標に対応する要素の差分における絶対値を求めて足し合わせればOKです。
座標A = (1, 2, 3) および座標B = (4, 5, 6) の場合、マンハッタン距離は以下のように計算できます。
“`
x軸の差を計算:|1 – 4| = 3y軸の差を計算:|2 – 5| = 3
z軸の差を計算:|3 – 6| = 3
これらの差を合計します:
マンハッタン距離 = 3 + 3 + 3 = 9
“`したがって、座標Aと座標Bの間のマンハッタン距離は**9**になります。
以上です。お疲れ様でした。
学習の参考にして頂ければ幸いです。
辞書内の値に応じて値を集計【Python】
## 説明
1. `sum()` 関数を使って、`data` リスト内の各辞書から `type` に基づいて `time` の値を取得し、それらを合計します。
“`python
data = [
{“time”: 60, “type”: “1”},
{“time”: 80, “type”: “1”},
{“time”: 120, “type”: “2”},
{“time”: 180, “type”: “2”},
]total_time = sum(
entry[“time”] if entry[“type”] == “1” else 0
for entry in data
)print(total_time) # 140
“`
最小の開始日と最大の終了日の期間の日数を計算する【Python】
## 説明
1. リスト内包表記を使って、`date_list`内の全ての`start_date`と`end_date`の値を`datetime`オブジェクトに変換し、`datetimes`リストに格納します。
2. `min()`と`max()`関数を使って、`datetimes`リストから最小の日付(最も早い開始日)と最大の日付(最も遅い終了日)を取得します。
3. `max_date`と`min_date`の差を計算することで、二つの日付の間の日数を取得します。`days`属性を使うことで、その差が日数で表現されます。
+1は、開始日と終了日を含めるために加算されています。
“`python
from datetime import datetimedate_list = [
{‘start_date’: ‘2024/04/01’, ‘end_date’: ‘2024/04/30’},
{‘start_date’: ‘2024/05/01’, ‘end_date’: ‘2024/05/31’},
{‘start_date’: ‘2024/06/01’, ‘en
カメラキャリブレーションを簡単に!自分用の手順まとめ
# はじめに
カメラキャリブレーション毎回準備するのに手間がかかるから、自分用に手順をまとめる。このブログの通り実行すれば、値得られるというところまでやる。https://github.com/keigo1110/camera_calibration
GitHubだけじゃわからない人用に以下GPTによる解説。
## 準備
### Python環境構築
まずはPython環境を整えましょう。Pythonがインストールされていない場合は、[Python公式サイト](https://www.python.org/)から最新版をインストールしてください。### 必要なものをインストール
次に、キャリブレーションに必要なライブラリをインストールします。以下のコマンドで必要なライブラリをインストールします。“`bash
pip install -r requirements.txt
“`これで、カメラキャリブレーションに必要な環境の準備が完了です。
### チェスボードの準備
キャリブレーションにはチェスボードパターンが必要です。`checkerboard.png`とい
Python シーケンスまとめ①
Python シーケンスまとめ①
シーケンスとは?
データの集合を扱う際に要素に番号を振って順番に並べるような構造のこと をpythonではシーケンスと呼ぶ. その例として, 「リスト」「タプル」「文字列(string)」があげられる.
シーケンスの初期化
空リストは [ ] で表し, n個の要素数を確保したければ [0]*n とすると0がn個入ったリストが得られる. この場合要素は0だが, 具体的な値の入っていないリストを作るには None を用いる. 例えば, [None]*nとすると0がn個入ったリストが得られる.
リスト
要素の削除
リストから要素を削除するにはdel文を用いる.
“`
$ friends = [‘John’, ‘Mary’, ‘Hiroshi’, ‘Brown’]
$ del friends
ウェブスクレイピングの効率化: マルチスレッドとイテレータで実現する最適なデータ収集
## 目次
1. はじめに
2. マルチスレッドとイテレータの基礎
3. 並行処理の実装: FastAPIサーバーとスクレイピング
4. コード解説
5. パフォーマンス分析
6. 注意点と最適化のヒント
7. 発展的なトピック
8. まとめ## 1. はじめに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/02926b05-3b16-bb82-54d9-4df7520f3a1f.png)
データ処理の最適化に取り組む開発者の皆さま、こんにちは。本記事では、並行データ処理の実装テクニック、特にマルチスレッドとイテレータを組み合わせる方法について詳しく解説します。
大規模データの処理やウェブスクレイピングなどのタスクでは、効率的な処理が鍵となります。本記事で紹介する手法は、処理速度の向上とメモリ使用の最適化を同時に達成する可能性を秘めています。
理論的な解説に加え、FastAPIを使用した実践的なウェブスクレイピングの例を通じて、この手法の有効性を検証します。中
【crontab】EC2のcrontab -> Pythonスクリプト実行 -> RDSのストプロ -> Slackへ通知、という流れを構築する
# 概要
EC2の`crontab` -> Pythonスクリプト実行 -> RDSのストプロ -> Slackへ通知、という流れを構築しました。具体的には、
「毎日9時に、プロシージャで実施した結果を、指定のSlackチャンネルに通知する」
という流れがゴールです。今回は、AWSのEC2サーバでクーロンを利用してPythonスクリプトを定期的に実行させる方法になります。Pythonスクリプトの実行はRDSのストプロを呼び出し、SQL結果を特定のSlackチャンネルに通知します。
構築手順と注意点を解説します。
# 手順
まず、EC2サーバに今回のツール用のディレクトリを作成します。
ここでは、とあるDBテーブルからレコード数をカウントするツールを例にしますので、ディレクトリ名は`count-number-tool`とします。その下に、以下の3つを作成していきます。
“`
count-number-tool
├── venv
├── number-counter.py
└── run_script.sh
“`### `venv`の作成
まずは仮想環境を作成しま