Python関連のことを調べてみた

Python関連のことを調べてみた

GIS に欠かせない Shapefile を深堀ってみる

# 1. はじめに
地理情報システム (GIS) で、使用するデータとして「Shapefile 形式」でデータ提供されていることがあります。この記事では、この Shapefile が、どのような構造となっているのかについて、説明していきます。

## 1.1. トポロジ構造とは
Shapefile について説明していく前に、まずは GIS データ等でよく利用される「トポロジ構造」について説明しておこうと思います。

例えば、トポロジ構造を持つファイルとして、次のようなものがあります。

– **.gdb**: ESRIのファイルジオデータベースは、トポロジを含む複雑な空間データを格納することができます。
– **.topojson**: トポロジを保存するための拡張 GeoJSON 形式で、隣接する地物間の境界を共有することでファイルサイズを削減します。
– **.gml**: 地理マークアップ言語 (Geography Markup Language) は、地理的特徴とそのトポロジを表現するために使用されます。

これらのフォーマットは、地理的データのトポロジ関係(例えば、接続性、隣

元記事を表示

FastAPIの認証(HTTPBearer)を開発環境でのみバイパスする

こんにちは、[わいけい](https://twitter.com/yk_llm_gpt) です。

突然ですが、私は日々FastAPIを使った開発をしているのですが認証周りで時々面倒を感じることがあります。

それは、**せっかくFastAPIがOpenAPI形式の動的ドキュメント(Swagger UI)を自動生成してくれているのにも関わらず、ログインが必要なエンドポイントに関しては毎度認証トークンを取得しないと叩くことが出来ない**ということです。

セキュリティ上「まあ、それはそうだよね」という話ではあります。  
が、ローカルでコンテナ立てて開発しているときには地味に面倒なのもまた事実です。

長期的に開発を続ける想定であれば、開発チーム全体で何千回もローカル環境でのログイン&トークン取得を行うことになることが予想されます。
これは開発効率の観点からあまり好ましくなさそうだと私は思いました。

そこで今回は開発環境でのみ良い感じに認証をスキップする実装を行ってみました。


私のSNSアカウント等です。
今後もPython・LLM・Go・Web開発などのト

元記事を表示

PDFに透かしを追加するときに役立つスクリプト

PDF文書に透かしを追加する必要が生じた際、Pythonを活用してこの処理を簡単に実行する方法を紹介します。以下のスクリプトでは、指定されたテキストを透かしとしてPDFに追加します。

“`python
from reportlab.pdfgen import canvas
import PyPDF2

def create_watermark(input_pdf, watermark_text):
with open(input_pdf, “rb”) as input_file:
reader = PyPDF2.PdfReader(input_file)
first_page = reader.pages[0]
page_size = first_page.mediabox

c = canvas.Canvas(“watermark.pdf”, pagesize=(page_size[2], page_size[3]))
c.setFont(“Helvetica”, 10)
c.setFillColor

元記事を表示

長時間動画を短くするときに使ったスクリプト

動画を非常に高速に早送りする必要がある場合、Pythonと`moviepy`ライブラリを使用してこれを簡単に行う方法を紹介します。以下のスクリプトは、動画を400倍速で早送りし、フレームレートをカスタマイズして出力します。

“`python
from moviepy.editor import VideoFileClip
from moviepy.video.fx.speedx import speedx

def speed_up_video_with_custom_framerate(input_file_path, output_file_path, speed_factor=400, new_fps=5):
clip = VideoFileClip(input_file_path).without_audio()
new_clip = speedx(clip, factor=speed_factor)
new_clip.write_videofile(output_file_path, codec=’libx264′, audio=False, f

元記事を表示

VSCodeでPythonのBlackを使用する時に特定のファイルを除外するには”–force-exclude”を使え

[Black](https://black.readthedocs.io/en/stable/index.html)はPythonのコードフォーマットのコマンドラインツールです。

これにより常に同じフォーマットルールを適用できます。

VSCodeで使用する場合、[Black Formatter](https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter)プラグインを使用して、ファイル保存時に自動整形すると良いでしょう。

### VSCodeの設定例

“`json:setting.json
{
“[python]”: {
“editor.defaultFormatter”: “ms-python.black-formatter”,
“editor.formatOnSave”: true
},
“black-formatter.args”: [
“–skip-string-normalization”,

元記事を表示

pythonのunittestモジュールでテスト対象コード上のprint文を標準出力する

unittestを書いているときもprintデバッグしたいときありますよね。私はあります。
そんなときのプラクティス

“`class Case(unittest.TestCase):

def setUp(self):
# 標準出力退避
self.original_stdout = sys.stdout
# 標準出力をキャプチャするためのストリームをセットアップ
sys.stdout = StringIO()

def tearDown(self):
# 標準出力を元に戻す
output = sys.stdout.getvalue()
sys.stdout = self.original_stdout
# プリント
print(output)
“`

元記事を表示

Stable Cascade + Gradio を自作 PC で動かす

## 背景

Stable Diffusion を自作 PC で動かしていたりしたのですが、新しく発表のありました Stable Cascade も試してみました。公式ページのコードを参考にしながら私の自作 PC のスペックや前提に合わせて多少補正したコードを共有します。

https://ja.stability.ai/blog/stable-cascade

https://huggingface.co/stabilityai/stable-cascade

## 環境

自作 PC の環境です。関係しそうなパーツのみ記載します。

* CPU: インテル® Core™ i3-12100F
* メインメモリ: DDR4 64GB
* GPU: Zotac GeForce RTX 3060 (12GB VRAM)

:::note info
それにしても、1年と少し前に自作 PC を組み立てたときは、生成 AI 関連で使うとは全く考えていなかった(息子と私の PC ゲーム目的)のに、パーツ一式の相談に乗ってくれた秋葉原の某 PC ショップの方の選択(特に GPU の VRAM 12G

元記事を表示

楽しいカードゲームを作るまでの記録~その2~

## CUIからGUIに変更
### 【ゲームの仕様】
1.プレイヤーとエネミーの手札(1~12)をランダムに3つ生成する
2.プレイヤーは自分の手札を選択(画像をクリック)する
3.選択された手札とエネミーがランダムに選択する手札で勝負する
4.高い数字の手札を出した方に、(自分の数字ー相手の数字)をスコアとして加算する
5. 1は12に勝利し、その際のスコアは11とする
6.勝負を3回繰り返し、スコアの高い方がゲームの勝者となる
※手札に数字を記載してもよかったけど、記載しないとどのカードが強いのか探りながらプレイできるので、ゲーム性が向上すると思う。
### 【ゲーム画面のキャプチャ】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763806/1509f1df-4ebf-cb2c-38e2-d7d50a8f57b3.png)
### 事前準備
実行ファイルと同階層にimgフォルダを作成して、使いたい画像を入れる
例) ./img/sample/1.png
カードの大きさは「12

元記事を表示

階層的クラスター分析の仕組みとシンプルな実装例

# はじめに
プロモーション活動を行う際などにクラスタリングをすることがありますが、その手法はたくさんあります。
例えば、k-meansや混合ガウス分布などもその1つです。

今回は階層的クラスター分析に焦点をあて、その計算方法をまとめます。

# 階層的クラスター分析の仕組み
階層的クラスター分析(hierarchical clustering)は、似た特徴を持つデータをグループにまとめていく手法です。

具体的に身長と体重のデータを使って、この分析の基本的な仕組みを簡単に説明してみましょう。
“`
例:4人の身長と体重のデータ
人1: 身長160cm, 体重60kg
人2: 身長170cm, 体重65kg
人3: 身長175cm, 体重80kg
人4: 身長180cm, 体重75kg
“`
手計算で階層的クラスター分析を実行するステップ
## ステップ1: 距離の計算
> まず、各個人間の「距離」を計算します。この例では、ユークリッド距離を用いますが、他にもマンハッタン距離など様々な距離の計算方法があります。

ユークリッド距離の公式は次のようになります
“`math

元記事を表示

TCPを使ったチャットアプリの作り方

### TCPチャットサーバー

“`python
import socket
import threading

def client_thread(conn, client_address, rooms, clients):
try:
while True:
data = conn.recv(1024).decode(‘utf-8’)
if not data:
break # クライアントが切断した場合

command, room_name, message = data.split(‘,’, 2)

if command == ‘JOIN’:
rooms[room_name].add(conn)
clients[conn] = room_name
print(f”{client_address} joine

元記事を表示

軽量LLMをGoogle ColabでPPO ファインチューニング

超軽量LLMの[flan-t5-base](https://huggingface.co/google/flan-t5-base)を**PPO**(Proximal Policy Optimization)でファインチューニングしてみました。今回の**目的はプログラムを動かす**ことなので訓練のハイパーパラメータやモデル改善度など基本的に見ていません。いずれ本格的に実行する時の足がかりに、と思ってやりました。
CPUでは実行できませんでしたが、Google Colabで無料でも使えるT4 GPUで実行できました。動かすことを目的としているので、精度などはあまり見ていません(時間制限を気にせず使えるようにColab Pro契約してます)。

# 実行環境
2024/4/14時点のGoogle Colab で、Python3.10.12で、以下のパッケージを主に使っています。`numpy`など少しだけ使っているやつは省略。

|Package|Version|備考|
|:-:|:-:|:–|
|torch|2.2.1+cu121|Google Colabにプリインストールされていたバージ

元記事を表示

t-SNEを使用した画像データの次元削減: 実用例としてのガイド

## 概要
この記事では、高次元データセットの可視化に広く使用される機械学習のテクニックであるt-SNE(T-distributed Stochastic Neighbor Embedding)について解説します。特に、画像データの次元を削減し、どのようにして2次元プロットで視覚的に表現するかに焦点を当てています。

## 1. t-SNEとは
t-SNEは、高次元データを低次元(通常は2次元または3次元)の空間にマッピングする非線形次元削減技術です。この手法は特に、個々のデータポイント間の類似性を保持しつつ、データのクラスタリングを視覚的に表現するのに適しています。

## 2. Pythonによるt-SNEの実装
以下のステップに従って、Pythonを使用して画像データにt-SNEを適用する方法を説明します。

パラメータの設定

“`python
n_img = 100 # 画像の数
n_height = 16 # 画像の高さ(および幅)
n_channel = 10 # チャンネル数
“`
ここでのパラメータは、画像の数、画像の次元、チャンネル数を

元記事を表示

CIF, POSCAR, structure, atomsのファイル変換まとめ

第一原理計算などを行う際にpythonを使って結晶構造ファイルの処理をする必要があるのだが、結晶構造のファイル形式には以下の4種類がある。
– CIF:Crystallographic Information File。ICSDなどでもこの形式
– POSCAR:VASPに入力する際のファイル形式(.vasp)
– structure:pythonライブラリであるpymatgenの形式
– atoms:pythonライブラリであるASEの形式

計算したい内容などによってpymatgenやASEを使い分けたり、場合によっては両方使ったりする。その度にいちいち変換の仕方を調べているのでまとめる。

# 1. atomsとPOSCARの変換
### atoms ⇒ POSCAR
ase.io.writeを使う。
“`python
from ase.io import write
write(‘POSCAR.vasp’, images=atoms, format=’vasp’, direct=True, vasp5=True, sort=False)
“`
### POSCAR ⇒ at

元記事を表示

Pythonで「ファイルやディレクトリの存在を確認する(pathlibモジュール)」の動作を確認してみた

# 概要

Pythonで「ファイルやディレクトリの存在を確認する(pathlibモジュール)」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/python/file/index13.html

# 実装

以下のファイルを作成しました。
“`sample.py
import pathlib

path1 = ‘./test/address.txt’
p1 = pathlib.Path(path1)
if p1.exists() :
print(path1 + ‘は存在します’)
else :
print(path1 + ‘は存在しません’)

path2 = ‘./test/user.txt’
p2 = pathlib.Path(path2)
if p2.exists() :
print(path2 + ‘は存在します’)
else :
print(path2 + ‘は存在しません’)

path3 = ‘./test/img’
p3 = pathlib.Path(path3)
if p3.exists

元記事を表示

学習日記#3: 決定木モデルで予測〜KaggleでSubmit

## ゴール
予測結果をKaggleで提出する

## やったこと
– 加工済みデータをテストデータと学習データに分割
– Survivedが空値 = テストデータの条件で分割
– テストデータと学習データをそれぞれ新しい変数に格納
– 学習データを特徴量と回答に分割
– X_train, y_trainの変数にそれぞれ格納
– “`y_train = train.Survived“`
– “`X_train = train.drop(columns = [‘Survived’])“`
– 配列を表すときは大文字なのでXは大文字にするのが通例らしい
– 機械学習モデルを扱うためのライブラリインポート
– ライブラリScikit-Learnを使う
– 今回は決定木モデルのみなので“`from sklearn import tree“`
– 使用するモデルの宣言
– “`model = tree.DecisionTreeClassifier()“`
– “`()“`

元記事を表示

makeをタスクランナーとして使う!

# Makefileを作る

## 自動でコードをきれいに整理したい
今回はblack, ruff, mdformatを使用します

👇Makefileの中身
“`
.PHONY: black
black:
poetry run black .

.PHONY: ruff
ruff:
poetry run ruff check . –fix

.PHONY: mdformat
mdformat:
poetry run mdformat *.md

.PHONY: cake
cake:
$(MAKE) black
$(MAKE) ruff
$(MAKE) mdformat

“`
`make cake`を実行すると、3つがまとめて実行されます:cake:
※cakeは好きな文字に変更してください

# 依存関係をインストール

必要なものを入れましょう!

※今回はPoetryを使用しています

Poetryは依存関係をグループ別に整理する方法があるよ
(テストやドキュメントの構築だけに必要な依存関係をグループで整理しとくと便利)

“`
$ poetry a

元記事を表示

prisma-dbml-generatorで複数行のNoteが正しく生成されない

# prisma-dbml-generator について

prisma.schemaファイルからdbmlファイルを生成することができます。
また、生成したファイルをdbdocsというサービスで共有する事ができます

https://github.com/notiz-dev/prisma-dbml-generator

# 問題

下記のように、複数行に渡るコメントは正しく変換されない問題がありました。

変換前

“`:prisma.schema
/// User comment line1
/// User comment line2
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
“`

変換後

“`schema.dbml
Table User {
id Int [pk, increment]
createdAt DateTime [defaul

元記事を表示

OpenAI API のアプデは本当に破壊的だった。

相変わらず初心者プログラマーなので、温かい目で見てください。内容はお吸い物ぐらい薄いです
こんなやつもいるんだなというくらいの気持ちで見ていただけますと幸いです。
# ストレス発散と次回予告(レガシー)

“`
やめて!OpenAIの破壊的なAPIアプデで、リクエストの生成方法を根本的に変換されたら
よくわかんない英語を読みまくって実装してエラー三昧になりながらも、よなべしてまでがんばって
PythonCLIツールを作った松本の精神まで燃え尽きちゃう!

お願い、根本的な生成方法は頻繁に変えないでOpenAI!

あんたがそんなに書式を書き換えていったら、あたしみたいな弱小大学生プログラマーはどうなっちゃうの?

カフェイン製剤(愛用)はまだ残ってる。ここを耐えれば、NotFoundErrorに勝てるんだから!

次回「松本 死す」徹夜コーディング スタンバイ!
“`
(公式の皆様。大変申し訳ございません。)

死んでないです。とてもナイーブになりながら修正していきました。

改めてリファクタリングで可読性の高いコードの作成を目指すのは徹底するべきだと感じました。

元記事を表示

Dockerを用いたDjangoプロジェクト構築

この記事はDockerを用いてDjangoプロジェクトの構築をすることを紹介する.共同開発時に開発環境を揃えたり,リソース管理をDockerで行いたい人向けである.
>Djangoの説明や仮想環境を用いて構築する場合はこちらを参照
https://qiita.com/tarakokko3233/items/46c567fb32a26a69269a

## はじめに 〜Dockerとは〜
Dockerは,アプリケーションを環境に依存せず一貫した方法で開発,デプロイ,実行するためのプラットフォームである.コンテナ化技術を使用することで,環境の一貫性,移植性,スケーラビリティ,リソース効率,開発効率が向上し,マイクロサービスアーキテクチャの実装やCI/CDパイプラインの強化にも役立つ.

**環境の一貫性**
Dockerはアプリケーションとその依存関係をコンテナ内にパッケージ化するため異なる環境間で一貫した動作を保証する.
開発,テスト,ステージング,本番環境で同じDockerイメージを使用することで,環境差異によるバグを防ぐことができる.

**移植性**
Dockerコンテナは,Lin

元記事を表示

PandasからPolarsへ移行した方がいいのか

# なぜこの記事を書くのか
皆さん、データ解析を行う際にどのようなライブラリを用いているでしょうか。
おそらく大半の人は`pandas`を使っているのではないでしょうか。
私もpandas使ってます。簡単だよね(´・ω・`)

しかし、業務でバカクソでけえデータを読み込もうとしたときに、読み込み時間がとんでもなくかかったり、メモリ不足でそもそも読み込めもしないことが起きていました。
読み込みにメモリ食われすぎて他の作業ができずに待機した挙句、燃え尽きたかのようにノーパソのファンが止まると同時にメモリ不足のエラーが出たときには切れ散らかします。

![GJfbeNvaEAA2FPw.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524375/0e8c5849-cd0e-ff2e-dcae-cc16e87daa46.jpeg)

(画像元:[葬送のフリーレン公式Xアカウントのポストより](https://twitter.com/FRIEREN_PR/status/1772126302994120747))

元記事を表示

OTHERカテゴリの最新記事