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

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

【Python環境構築】Homebrew+pyenv+venvでPythonの環境構築(2024.5)

## はじめに
– Pythonプロジェクトを始める環境を作りたい
(Flaskなどを使用し、APIサーバーを立てたい)
– エディターはVSCodeを使う想定
– M1 Macを使用

## 使用したもの
– `Homebrew`
– pyenvを管理
– `pyenv`
– python, conda, forgeなどpythonを管理
– `venv`
– pythonの仮想環境を構築
– `pip`
– 仮想環境内でのPythonライブラリ(flask, numpy, pandasなど)を管理

## 参考
– 環境構築の手順
– **[Python|pyenv、venvでPython開発環境を構築する](https://kazukim-ai.com/pyenv-for-python-environment/)**
– 各ツールの役割
– **[Pythonの開発環境の3つの観点をおさえよう](https://zenn.dev/os1ma/articles/935f6e653f1052)**
– VSCodeでFlaskプロジェク

元記事を表示

クラメールの連関係数

## クラメールの連関係数
・連関の強さを表す指標
・$\chi^2$を0~1に標準化した値

このクラメールの連関係数は相関係数と同様な考えで、$\chi^2$ではどれくらい強い値なのか比較しづらいため、標準化して0~1で表したものになります。
式にすると以下のようになります。
“`math
V = \sqrt\frac{\chi^2}{(min(a, b) -1)N} 
“`
※min(a,b)は行数a, 列数bのうち小さい方である

![分割表.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780659/507bca46-b0c7-c4f0-a7fa-c14c465b6e96.png)

$\chi^2$=35.53
a =2
b=2
min(a,b)=2
N=100

“`math
V = \sqrt\frac{35.53}{(2 -1)100} =  0.59
“`

**Pythonで実践**

2つのarrayを引数に渡して、クラメール連関係数を返す関数を作成する
“`
#

元記事を表示

非負画像の畳み込み演算における負の値のリスクとその対策

## はじめに
畳み込み演算は画像処理においてよく使われる計算過程であり、エッジ検出、ぼかし、フィルタリングなど、さまざまな画像処理手法で広く使用されています。しかし、非負の画像を畳み込み演算する場合でも、結果として負の値が含まれてしまうことがあります。この問題は、特に高速フーリエ変換(FFT)を用いた畳み込みの効率化手法において発生しやすいです。

高速フーリエ変換は、畳み込み演算を効率的に行うための強力なツールですが、計算精度の問題や数値誤差が原因で、非負の入力画像に対しても負の値が含まれる結果を生成することがあります。このような負の値は、数値計算において重大な問題を引き起こす危険性があります。例えば、後続の処理である画像の正規化や閾値処理において予期せぬ動作を引き起こす危険性があります。

本記事では、畳み込み演算によって負の値が生じるケースを示し、その対処法について説明します。

本記事に用いた各種バージョンは、numpy 1.25.2、scipy 1.11.4となります。また、実装コードは、Google Colab[こちら](https://colab.research.go

元記事を表示

【超初心者向け】Pythonのテストの書き方(pytest, unittest)

# 概要

pythonでテストコードを書くときがありますが、(筆者のように)超初心者からすると難しい用語や書き方がたくさん並んでいてハードルが高いです。

テストコードの入口となる最低限(最低限過ぎるかもしれませんが)の書き方を備忘を兼ねて書きます。

## pythonでのテストコードを書く時のライブラリの種類

筆者が簡単に調べたところ、2つのライブラリがよく使われているようです。

– “`unittest“` : python標準ライブラリ。インストールが必要ない。pytestと比較すると、柔軟なテストケースを書きづらい。
– “`pytest“` : サードパーティ製のライブラリ。インストールの必要がある。柔軟なテストケースが書ける。pythonのテストコードを書く時のデファクトスタンダートになりつつある模様(これが本当かは確認していないですが、そういう記述を見かけることが多かったです)。

筆者個人としては、以下の3つの観点で使い分けるのが良さそうだと思いました。

– セキュリティの観点:
– 会社の環境やプロジェクトによっては、セキュリティが厳しく

元記事を表示

boto3 list_resource_record_setsの罠

## 概要
業務にて、AWSのマルチリージョンフェイルオーバーを検証中
フェイルオーバー時に使用するDNSレコードの重みを変換するスクリプト内にてboto3の`list_resource_record_sets()`を利用していたのですが、不要なレコードまで引っ張ってきてしまっていたので仕様を紐解きます。

## list_resource_record_sets()の仕様
`list_resource_record_sets()`は、検索条件が指定できるものの、あくまでOR条件での検索になります。
検索条件は以下です(公式Docより引用: https://boto3.amazonaws.com/v1/documentation/api/1.26.88/reference/services/route53/client/list_resource_record_sets.html)
“`python
response = client.list_resource_record_sets(
HostedZoneId=’string’,
StartRecordName=’

元記事を表示

自分の好きなアーティストと似ているアーティストを出力するWebアプリケーションの開発 part1

## はじめに
大学の授業で、入力されたアーティストと近しいアーティストのネットワーク図を作成するシステムを作ったので、今回は個人的な趣味で、そのシステムを発展させてWebアプリケーションを開発しました。その際の備忘録を残します。
part1では、バックエンド側の実装についてまとめます。

## Webアプリケーションの大まかな流れ
1. 初期画面で入力フォームを表示し、ユーザにアーティスト名を入力させる
2. 入力されたアーティストに対して、Spotipyの`artist_related_artists()`を使用して、そのアーティストと関連のあるアーティスト情報を取得する
3. `networkx`ライブラリを使用して、関連のあるアーティストを芋づる式にノードで結んでネットワーク図を作り、**ページランクの値が高い順に**取り出す(この時、人気曲の情報も取得する)
4. リザルト画面で関連のあるアーティスト10人と取得した人気曲の情報を表示する

今回の備忘録では、2.と3.のバックエンド側の実装についてまとめます。

## バックエンドの開発
### 初期設定
“`python

元記事を表示

Python 気象庁API 全国気象実績の取得(アメダス)

# はじめに

気象庁API(非公式) を使って、日本全国の気象実績を取得するコードを紹介します。
いわゆるアメダスのデータです!

# 前提条件
・データは気象庁HPに公開されているものと同じですが、非公式なため用途に注意。
・APIでは、過去10日分しか取得できません。
・現在時刻の実績が10分単位で公開されています。
・全国の観測所のデータがまとめて取得できます。
・観測所は、観測所名・緯度・経度・観測所IDを別途取得可能です。

# データの取得

“`Python
import requests
import pandas as pd

# JSONデータのURL
url = “https://www.jma.go.jp/bosai/amedas/data/map/20240515160000.json”

# APIからデータを取得
response = requests.get(url)
data = response.json()

# Pandasデータフレームに変換
df = pd.DataFrame.from_dict(data, orient=’index’)

元記事を表示

ABC355回答メモ

# 0.はじめに
 茶色へランクダウンが見えてきた今日この頃参加。
A~Cは順調にいくも、Dでブレーキ。
自分的には行けると思いましたが、ちょっとだめで
TLE18個で終わりでした。
レートも-14の810と、いよいよ崖っぷちです。

# 1.A – Who Ate the Cake?
 原理は単純だけど、実装はなかなか考える問題。
【考え方】
 ・容疑者フラグを3つ用意し1をセット
 ・A・Bの証言で、犯人でないと分かった人の
 容疑者フラグを0に変更
 ・容疑者フラグの合計が2なら犯人は絞れず-1を出力
・容疑者フラグの合計が1ならフラグが立っている人を出力
 上記考えで実装し、ACでした。

 https://atcoder.jp/contests/abc355/submissions/53831705

# 2.B – Piano 2
 ちょっと前にでたpiano問題とは若干違った感じの問題。
【考え方】
 ・リストAとリストBをリストCに登録。
 その際、リストAは(値,0)のタプル、リストBは(値,1)のタプルで登録
 ・リスト

元記事を表示

【Django】可読性の高いディレクトリ構造を目指したら、urls.pyで詰まった件

# はじめに

### この記事の対象読者
– Django初心者
– プログラミング初心者

### 環境
– Mac M2
– Python 3.9
– Django 4.2.11

### 背景
Djangoのデフォルトのディレクトリ構造が、アプリケーションディレクトリを作成するたびに見えづらくなるなと感じたので、appsディレクトリを作成し、その中に全てのアプリケーションディレクトリを作成しようと考えたのが事の発端です。

# やりたかったこと
### 可読性の高いディレクトリ構造の作成
※一部の今回の内容に不要なファイル等は記載しておりません。

“`shell
root
├── Dockerfile
├── README.md
├── compose.yaml
├── requirements.txt
└── src
├── apps
│ ├── accounts
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── mi

元記事を表示

Python 四捨五入 丸め

# 四捨五入
## 任意の桁数で完璧に四捨五入する
Pythonで四捨五入をするにあたって一般的にはround関数を使うと思います。
しかしround関数は**偶数丸め**であるため意図した結果にならないことがあります。
偶数丸めが四捨五入と違う点は以下です。
* 0.5は1ではなく0に、2.5は3ではなく2になります。
* 一般化して言うと、「偶数」.5の場合、切り上げた奇数ではなく、切り捨てた偶数になります。

### 例
~~~python
l = [round(i+0.5) for i in range(10)]
print(l)
# 結果 [0, 2, 2, 4, 4, 6, 6, 8, 8, 10]
~~~
また、浮動小数点誤差の問題もあります。
二進数で表せる0.25(=1/4)や0.75(=3/4)は偶数丸めになっていますが、他は二進数で正確に表せないため規則性なく丸められています。
~~~python
l = [round(i, 1) for i in [.05, .15, .25, .35, .45, .55, .65, .75, .85, .95]]
print(

元記事を表示

書籍「グラフ深層学習」を参考にGNNのグラフ埋め込みをやってみた

# 本記事の概要
– GNNの**グラフ埋め込み**をpythonでの実装も含めてやってみたよ
– GNN のライブラリは使わずにやったよ
– 書籍「グラフ深層学習」の4章を参考にしているよ
– 簡単な理論とコードを載せているよ
– 僕と同じくGNNビギナーの方の参考になればうれしいよ

# モチベーション
グラフニューラルネットワーク(GNN)について耳にする機会が増えたこと、また今年に入って書籍が続けて発行されたことから、GNN勉強してみたい!という人が増えているのではないでしょうか。

わたしもその一人で、独学ですが「グラフ深層学習(2023, ヤオ マー &ジリアン タン)」を読み進めています。

「グラフ深層学習」はグラフ理論の紹介から始まり、4章でグラフの特徴を抽出する **グラフ埋め込み** を取り上げています。

LLMなどでも使われる「埋め込み(embedding)」ですが、グラフにおいても特徴抽出の手法(教師なし学習)として用いられるようです。
「グラフ深層学習」でも自然言語の

元記事を表示

LangChainを用いて大量ファイルをロードするVectorDBを作ってみた(8)

![sky.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/d5fea432-0541-945a-fef6-0b7c5ad8e7fc.jpeg)
# はじめに
前回は、XML形式のファイルから必要なエレメントの情報のみVectorDBに格納する方法を試してみました。

https://qiita.com/ogi_kimura/items/4bbf2c987856a9435280

大量ファイルをVectorDBに取り込んだ場合、データ量が多すぎて「ぼやけてしまう」せいか、生成AIから返ってくる回答精度が悪くなることもわかってきました。
今回は、前回作成した属性を追加したVectorDBを基に、生成AIから精度の高い回答をもらえるようにしてみます。

# VectorDBの内容
今回は、`filter`を使ってVectorDBのデータを絞り込んだうえで、生成AIに質問を投げる方法を考えたいと思います。それにより「ぼやける」ことが無くなるのではないかと考えました。

前回記事の内容から、Chr

元記事を表示

[備忘録]ChatGPTの回答文をNotionへ一括登録

言語学習をしていて、とある英語系Youtuberの勧めていたNotionでの単語帳作成および学習進捗管理に感銘を受けたため、真似をし始めたのだが、学習自体よりNotionの編集に時間を取られ本末転倒になってしまったため、そちらの効率化を図ることにした。

## 今回やりたいNotionの編集作業
下記のような単語帳フォーマットを作成。今まではChatGPTの回答をコピペしては手でペーストしていたのだが、その作業だけで10フレーズで20分くらいかかってしまっていたので、回答を一回で該当項目にコピーしたい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800965/e3581d62-1965-6da8-9c9c-f03f16e381cc.png)

本当は
①フレーズ入力
②ChatGPTに質問
③回答をコピーしてNotionへ登録
までを自動化したいのだが、openaiのAPIは従量課金制とのことなので、ChatGPTの部分はいったん手作業のままにしておく。(openaiのAPIも使っ

元記事を表示

AtCoderで緑になりました

# 祝入緑
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800972/1e20e11f-21e1-6f59-a225-67e313bdfe28.png)

次回落ちそうなので落ちる前に記事を残しておきます

## 経歴
・26歳
・大学は数学科。地方国立
・プログラミングは大学の講義でC言語を触ったくらい
・現職は物流会社の非エンジニア職です(強いて言えばExcelの基本的な関数を使うくらい)

## AtCoder始めた理由
なんとなく。一応、流れをかいつまんで言うと
業務でこんなことやりたいな→pythonのpandasって何?→難しいな→ネットサーフィン→競技プログラミングって面白そうじゃん!!!って感じです。
結果は残せていませんが、数学オリンピックの勉強を真面目にやっていたりした過去があり、このような競技は本能的に惹かれるのかもしれません。

## 使いこなせると思うアルゴリズム
・二分探索
・UnionFind
・クラスカル法
くらいです。
セグメント木など勉強しましたが

元記事を表示

ABC355(Atcoder Beginner Contest)のA~D(A,B,C,D)問題をPythonで解説(復習)

# ABC355(Atcoder Beginner Contest)のA~D(A,B,C,D)問題をPythonで解説(復習)

# A問題

– `A`と`B`が一緒の値の時,容疑者が絞れないため,`-1`を出力して終了する.
– 容疑者を管理する,`suspects`を作成し,初期値を`{1, 2, 3}`とする.
– `suspects`から`A`と`B`を除く.
– `suspects`に残った数字を出力する.
“`A.py
“””
<方針>
– `A`と`B`が一緒の値の時,容疑者が絞れないため,`-1`を出力して終了する.
– 容疑者を管理する,`suspects`を作成し,初期値を`{1, 2, 3}`とする.
– `suspects`から`A`と`B`を除く.
– `suspects`に残った数字を出力する.

“””
# AとBを受け取る.
A, B = map(int, input().split())

# AとBが一緒の時,
if(A==B):
# 容疑者が絞れないため,-1を出力する.
print(-1)
# 実行を終了する.
exit(

元記事を表示

【第一回】LlamaIndex に入門してみた

流行りの LLM に関する記事第一弾です。業務で使ったりもしますが、個人的にも勉強して追いついていきたい分野なので色々学んだことをアウトプットして LLM の記事を連載していきたいと思います。

## この記事の内容
この記事は Python のライブラリである `llama_index` の本当に入門の部分だけをまとめます。具体的には、Retrieval Augmented Generation の考え方と具体的な方針を [LlamaIndex のWebページ](https://docs.llamaindex.ai/en/stable/getting_started/concepts/) に則って説明したのち、いくつかの基本的な機能をコードと共に確認します。Embedding など、LLM 関連の基本的な知識を仮定します。
ぶっちゃけた話、この記事に書いてあることは全て LlamaIndex の公式 docs を読んだり、ちょっとググればすぐ出てくるようなことばかりです。ただ、初めて LlamaIndex に触れる方や、LLM のライブラリ操作などに慣れていらっしゃらない方は初めから

元記事を表示

決定木の異常検知アルゴリズム

機械学習というと「教師あり学習」「教師なし学習」(と「強化学習」)がフィーチャーされますが、その中でやり方が「教師なし学習」と似ている「異常検知」があります。
異常検知では正常値が1となり、異常値が-1という風にクラスタリングと似たようになります。
ではその中でIsolationForestという異常検知アルゴリズムを使って見ましょう。
# 分かりやすく賃金指数で
昔のデータで今は違う値になっていますが、分かりやすいデータとして賃金データを使います。
なぜ分かりやすいかというと、賃金データにはボーナス月は異常に高くなるという性質があります。それを考慮して見てみましょう。
“`Python3
from sklearn.ensemble import IsolationForest
from sklearn.decomposition import PCA
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv(“sarrary.csv”, encoding=”shift-jis”)
df.head()

元記事を表示

Redhat Enterprise Linux Server 6.3をVirtualboxへインストールしてPython3.7.17をビルドする手順

# はじめに

古いOSでPython3.7をインストール必要があり、環境構築からPython3.7.17をビルドするまでの手順をまとめます。

# 環境構築

Windows10にVirtualboxをインストールし、仮想環境にRedhat Enterprise Linux Server 6.3をインストールします。

Redhat Enterprise Linux Server 6.3のインストールメディア(ISOファイル)はRedhatのサポートページへログインしてダウンロードします。

Virtualbox 7.0.18ではインストールDVDが起動しませんでした。
Virtualbox 6.1.50は起動できました。

RedhatのインストールはSoftware Developmentを選択します。
デフォルトのBasicではビルドに必要なソフトウェア(gccなど)がインストールされません。

# RedhatへSSHログインする

macOSからRedhatへSSHでアクセスするとエラーが表示されました。

“`bash
$ ssh root@192.168.3.128

元記事を表示

Pythonでファイル(text,PDF,docx)の文字情報を取得してみる

## はじめに
今回は、Pythonでアプリにアップロードしたファイル(textやPDF、wordデータ)の文字情報を読み込むことに関するアウトプットをしていきます。

## 本編
#### 考え方
フロントでアップロードしてサーバーに送られるファイルデータは、バイナリーデータであることを頭に入れておくことが大事です。
バイナリーデータとは、コンピュータがわかる形式のデータのことです。
https://wa3.i-3-i.info/word1146.html

#### text形式データの文字情報を取得
text形式データは、decodeメソッドを使えば取れちゃいます。
ワー、チョー簡単ナンデスケド
“`python
# binary_dataは、フロントからきたデータ
text = binary_data.decode(‘utf-8’)
“`

[公式](https://docs.python.org/ja/3/library/stdtypes.html#bytes.decode)も見てみると、デコードされた情報返してくれると書いておる。

#### PDF形式データの文字

元記事を表示

【Django】はじめてのビュー作成にとまどう

[「はじめての Django アプリ作成、その 1」](https://docs.djangoproject.com/ja/3.2/intro/tutorial01/ “はじめての Django アプリ作成、その 1”)に従ってビュー作成を試みた。

### ①polls/views.py を開いて、Python コード記入(ビュー作成)

### ②ビューを呼ぶために、 URL を対応付け
polls ディレクトリに URLconf を作るために `urls.py` というファイルを作る。

### ③ルートのURLconfに polls.urls モジュールの記述を反映
mysite ディレクトリ`urls.py`のコード編集。

### ④コマンドの実行
####※ここで躓きました。

“`
$ python manage.py runserver
“`

は、ターミナルで**mySiteディレクトリに入り**、実行する必要が。

やっと上手くいきました。

元記事を表示

OTHERカテゴリの最新記事