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

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

HTTPリクエストで受け取ったデータをMongoDBに格納する

ESP32からHTTPリクエストで受け取ったデータをMongoDBに格納します.
# サーバー側
サーバー側でapp.pyを作成して実行させておきます.
“`python:app.py
from flask import Flask, request
from pymongo import MongoClient

app = Flask(__name__)
app.config[‘MAX_CONTENT_LENGTH’] = 16 * 1024 * 1024
client = MongoClient(‘mongodb://localhost:27017/’)
db = client[‘iot_data’]
collection1 = db[‘data’]

@app.route(‘/data’, methods = [‘POST’])
def save_data():
chunk_size = 1024
file_data = b”

file_size = int(request.headers.get(‘Content-Length’))

w

元記事を表示

SQL AlchemyでSHOW CREATE TABLEの結果がcharacters truncatedされる

# はじめに
SQL Alchemyで複合ユニーク制約の設定を確認しようとしてexecute(‘SHOW CREATE TABLE テーブル名’)したところ`1000 characters truncated`と表示され、結果が全文表示されなかったので回避策を書いておきます

# 結論
“`python
# 前略
result = session.execite(‘SHOW CREATE TABLE テーブル名’)
for row in result:
for r in row:
print(r)
“`

# truncatedされるコード
最初は以下のように書いていました。
“`python
result = session.execite(‘SHOW CREATE TABLE テーブル名’)
for row in result:
print(row)
“`
ここでprint結果は以下のようになり、characters truncatedされて全文が見れない状態でした。
“`
CREATE TABLE <テーブル名> (\n `id` int NOT N

元記事を表示

【Python】circular importエラーをシンプルに解説

Qiitaで検索しても手早くcircular importを解決する記事が見当たらず、初心者に不親切そうだと見受けられたので、手早く解説する記事をここに置きます。

## Circular Importとは?
:::note
日本語では **循環参照** というキーワードに当たります。
これで検索するといっぱい日本語の情報にヒットするでしょう。
:::

今回のバグを言葉で表すと、 **モジュールが巡り巡って自分を`import`するとエラーになる** ことです。

### 単純な例(2モジュール)
“`python:A.py
from B import f_b

def f_a():
f_b()
“`

“`python:B.py
from A import f_a

def f_b():
f_a()
“`

これは明確に`A→B`と`B→A`の依存関係がありますね。

:::note
慣例通り、`X→Y`は「XがYに依存している」という意味で用いています。
:::

例えば`A.py`を実行したり、他のモジュールから`import A`したりすると、`cir

元記事を表示

ダイクストラ法(Dijkstra’s Algorithm)をPythonで実装する

# この記事で得られるもの
– ダイクストラ法の手順
– Pythonでの実装例

# 環境
– Google Colaboratory

# 背景
大学で離散数学の講義を取っていたのですが、理論を学び、演習として手計算をするという形式でした。

この講義の試験では資料等の持ち込みが許可されていたため、
**「アルゴリズム実装して持ち込めば計算しなくて良くない?」**
と思い、作成しました。

「アルゴリズムをそのまま実装する」という部分に重きを置いているため、効率や読みやすさは重視していません。

# ダイクストラ法の手順
1. 始点の頂点を決定し、その頂点からの最短距離を0と設定する
2. 始点以外の全ての頂点への最短距離を無限大に設定する
3. 未訪問の頂点の中で最短距離が最小の頂点を選ぶ
4. 3で選ばれた頂点から直接接続されている各頂点について、その頂点までの距離(選ばれた頂点までの最短距離 + 選ばれた頂点からその頂点へのエッジの重み)が現在記録されている最短距離よりも小さい場合は、最短距離を更新する
5. 3~4を、未訪問の頂点がなくなるまで繰り返す

# 実装例

##

元記事を表示

学習レポート: 深層学習(Day 1)

# 前段

## 識別モデルと生成モデル
– 機械学習(深層学習)モデルは入力・出力の目的で分類できる
– 識別(discriminative, backward)
– データを目的のクラスに分類する
– データ→クラス
– $ p(C_k \vert \boldsymbol{x}) $を求める
– あるデータ$\boldsymbol{x}$が与えられたという条件のもとでクラス$C_k$である確率
– 生成(generative, forward)
– 特定のクラスのデータを生成する
– クラス→データ
– $ p(\boldsymbol{x} \vert C_k) $を求める
– あるクラス$C_k$に属するという条件のもとでのデータ$\boldsymbol{x}$の分布
– 識別モデル
– 具体的なモデルの例
– 決定木
– ロジスティック回帰
– SVM
– ニューラルネットワーク、など
– 高次元から低次元に圧縮すること

元記事を表示

【Python】同じディレクトリの__init__を使うとcircular importになる

## 事象
同じディレクトリDに
“`
D
┠ __init__.py
┠ M1.py
┗ M2.py
“`
の3ファイルがあるとしましょう。
それぞれが以下のスクリプト記述がされているとします。

“`python:__init__.py
from D.M1 import f1
from D.M2 import f2
“`

“`python:M1.py
from D import f2

def f1():
print(“f1”)
f2()
“`

“`python:M2.py
def f2():
print(“f2”)
“`

ここで、外から`D.M1`を`import`すると`circular import`エラーが発生します。

## 原因
`M1`と`M2`モジュールは、`M1→M2`の一方通行依存関係なので、機能的には循環参照にはなっていません。

しかし、
“`python:M1.py
from D import f2
“`
の部分で、`M1`は`__init__.py`を`import`しています。
そして、`__init_

元記事を表示

ChatGPTとPythonで学ぶ 多次元尺度構成法 (MDS)

皆さんこんにちは。今日も引き続きChatGPT先生をお迎えして、「ChatGPTとPythonで学ぶ 多次元尺度構成法」というテーマで雑談したいと思います。それではChatGPT先生、よろしくお願いします。

### **assistant**:

こんにちは。よろしくお願いします。

多次元尺度構成法(MDS:Multi-dimensional Scaling)は、高次元のデータを低次元(例えば、2次元や3次元)に縮小するための技術で、主にデータの可視化に使われます。

多次元尺度構成法の主な目的は、高次元空間での個々のデータポイント間の距離(または類似度)を、低次元空間で可能な限り保持することです。

それでは、Pythonを使って多次元尺度構成法を実装する方法について話しましょう。まずは必要なライブラリをインポートします:

“`python
import numpy as np
from sklearn.manifold import MDS
from sklearn.datasets import load_iris
import matplotlib.pyp

元記事を表示

Streamlitで画像を読み込んで表示させたい

# はじめに
今回は、Pythonの代表的な画像処理ライブラリであるPillowとOpenCVを用いて、Streamlitで画像を読み込んで表示する方法についてまとめたいと思います。
普段Pillowを用いて読み込んでいましたが、OpenCVを用いて表示させようとしたところうまくいかなかったため、それの対処法を併せてまとめます。

# Pillowで読み込む場合
まずはPillowで読み込んだ場合について紹介します。

“`python
import streamlit as st
from PIL import Image

file_path = st.file_uploader(”, type=[‘png’, ‘jpg’, ‘jpeg’)
img = Image.open(file_path)
st.image(img)
“`
簡単ですね。
必要最低限しか書いておりません。

# OpenCVで読み込む場合
一方、OpenCVで画像ファイルを読み込もうとした場合、OpenCVを使用している人からすると
“`python
import streamlit as st
imp

元記事を表示

機能拡張しやすいPython関数の設計を考える – 5つのパターン

博報堂テクノロジーズの坂井です。
個人的にPythonでアプリケーションを実装する業務があり、「機能拡張しやすい・持続的に進化可能な設計にするには具体的にどうしたら」ということを考えていて、自分なりに整理したことを共有します。

## 前提
次のような構造を前提とします:

* ドメイン層.py
* `domain_logic` 関数
* `domain_service` 関数
* アプリケーション層.py
* `application` 関数

“`python: ドメイン層.py
def domain_logic(input: DomainInput) -> DomainOutput:
# この中にドメイン固有のロジック

def domain_service(input: ServiceInput) -> ServiceOutput:
# このなかで domain_logic を使う
domain_output = domain_logic(domain_input)
“`
“`python: アプリケーション層.py
def

元記事を表示

Locust DockerチュートリアルのCould not find ‘locustfile.py’を解決する

# Locustとは
LocustはWeb/API向け負荷試験ツールです。

https://locust.io/

Dockerで起動させたりpythonでシナリオを記述できるので勉強がてら触っています。
Dockerのドキュメンテーションも用意されています。

https://docs.locust.io/en/stable/running-in-docker.html

しかし公式イメージをpullしたりDockerファイルのベースイメージと使用した後に
そのままコマンドを実行すると表題のエラーになります。

“`
docker pull locustio/locust
docker run -p 8089:8089 -v $PWD:/mnt/locust locustio/locust -f /mnt/locust/locustfile.py

Could not find ‘locustfile.py’. See –help for available options.
“`
エラーメッセージで検索してもすぐには解決策が分かりませんでした。

# 解決策
結論として *

元記事を表示

Zabbixで検知したエラーログをChatGPTで分析して、自動的にconfigファイルを修正する

# 1.はじめに

Zabbixのアクション機能を使用することで、アラートに合わせて自動復旧を実装できますが、
エラーログなどを監視している場合は、ログ内容が毎回異なるため、
自動復旧を組み込むには難易度が高いと思います。
しかし、AIを使用することでこの辺りも解決しやすくなってきたと思います。
今回は、Apache httpのエラーログをChatGPTで分析をかけて、エラー内容に関連したconfgファイルを修正するまでを自動化してみます。

なお、この記事はgithubのREADMEにも記載してあります。

https://github.com/doublethink-bps/autoFix

※英語で記載なので、日本語はこの記事を参照ください。

# 2. 使用する環境

以下の環境を用意します。
また、本記事で使用しているサーバのOSはAlmalinux9を導入しています。
### ZabbixServer
– ZabbixServer 6.0

### 監視対象サーバ
– Zabbix Agent 6.0
– python 3.11
– openai(pythonのライブラリ)

元記事を表示

経度、緯度の配列からメッシュコードを計算する

# 経度、緯度の配列からメッシュコードを計算する

jismeshで予期しない値が返ってきたので、自前で実装し直し。

[latlon2mesh](https://www.gis-py.com/entry/py-latlon2mesh) があったから、numpyの配列を指定できるように改良してみた。

“`python
import numpy as np

def latlon2mesh(lat, lon):
#1次メッシュ上2けた
quotient_lat, remainder_lat = np.divmod(lat * 60, 40)
first2digits = quotient_lat.astype(int).astype(str)

#1次メッシュ下2けた
last2digits = (lon – 100).astype(int).astype(str)
remainder_lon = lon – lon.astype(int)

#1次メッシュ
first_mesh = np.char.ad

元記事を表示

Google Colab上でGraphvizの日本語が文字化けした時の対処法

# はじめに
[言語処理100本ノック 第5章: 係り受け解析](https://nlp100.github.io/ja/ch05.html)にて、Graphvizを用いてデータの木構造を可視化する問題がある(44問)。

この際、普通にGoogle Colab上で日本語を可視化しようとすると文字化けが起こる。

pltの文字化けなどはググれば一瞬で出てくるが、GraphvizなおかつGoogle Colab上だと解決策がなかなかヒットしなかったのでメモ。

結論としてはPythonのコードをいじるのではなく、ランタイムが乗っているOSに直接フォントを入れることで解決した。

## 実行環境
Google Colab ランタイム(2023年10月25日時点)

## コード
まずは手を加えず生のcolabで実行。
“`python:google colab
from graphviz import Digraph
from IPython.display import Image, display

!mkdir images

# 計算グラフの構造を定義
g = Digraph(f

元記事を表示

浮動小数点の扱いは面倒。jismeshでメッシュコードが意図しないものに

# 緯度経度から地域メッシュコードを求める
https://pypi.org/project/jismesh/

を使っていたけど,スカラーと配列で値が違っていた。

“`python
from jismesh.utils import to_meshcode

lat0 = 34.875
lon0 = 135.1875

print(to_meshcode(lat0, lon0, 3))
print(to_meshcode(np.array([lat0, lat0]), np.array([lon0, lon0]), 3))
“`
を実行すると、
“`
52352155
[52352154 52352154]
“`

と、同じ緯度経度のはずなのにメッシュコードが違う。

$34.875$ が そのまま扱われず $34.87499999999999$ と解釈され、
切り捨てられたんだろうなと思いつつ、どうしてやろうかと。。。

元記事を表示

【os】業務効率化で使うosモジュールのあれこれ

## はじめに
表題の通り,(個人的に)よく使用するosモジュールのコマンドを紹介しようと思います.備忘録.
超超初学者向けです.

## 動作環境情報
– Python 3.12.0

osモジュールを使用する際は下記のコマンドでimportしてください.
“`
import os
“`

## 紹介・使用例
### ファイル / フォルダの存在確認
– os.path.isfile(path) -> True / False(戻り値)
引数で指定したファイルパスが存在するかどうかを判別.

– os.path.isdir(path) -> True / False(戻り値)
引数で指定したディレクトリ(フォルダ)パスが存在するかどうかを判別.

– os.path.exists(path) -> True / False(戻り値)
引数で指定したパスが存在するかどうかを判別.

1個目,2個目と3個目何が違うねん,って思ったそこのアナタ!
os.path.isfile(path)はファイルのパスのみ,os.path.is

元記事を表示

【Django】DBにある「変数」をプログラムの指定された「変数」に代入して一つの文字列として連結させる方法

# 概要
Djangoアプリケーションにて、DBにある変数をプログラムの指定された変数に代入して一つの文章に連結させる、ということが必要になったので実装しました。

# 実現すること

DBには以下のように登録されている前提です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/94b9cba9-ebad-84a4-505c-76d1c6408faf.png)

それぞれの`sample_syntax`において、`part_1`や`part_2`にはプログラム側から文字列が入ります。
それらを連結させて一つの文章にしたい、ということです。

モデル定義は以下の通りです。

“`models.py
class Syntax(models.Model):
sample_syntax = models.TextField(null=True, blank=True)

class Meta:
db_table = ‘syntax’
“`

#

元記事を表示

海上の太陽光発電所に最適なとこってどこなんだろうか?

# はじめに
 最近ですが海上に太陽光発電所とか自然エネルギー関連の発電所を作ろうという動きが活発になっているようですね。最近テレビで見て、ふと「海の上に作るっていても、、どうやって場所を選定するんだろう」とちょっと気になりました。
 そこで何か調べてみたいなと思い、「太陽光発電といえば日射量だろう」と「海上に作るのだから水深も重要だろう」という私の偏見より、まずは日射量のヒートマップと水深のコンター図を重ねたマップを作って、「水深が比較的浅くかつ日射量が多い」という海上の太陽光発電所を建てるのに最適だと自分が思う場所を調査してみることにしました。

 本当は日射量だけじゃ絶対情報不足でしょうし、日射量が太陽光発電にどこまで影響するのかは私はかじったぐらいしか知りません。それから実際は波の高さとか船の航路じゃないかとか景観とか色々気にしなきゃいけないんでしょうけど、仕事じゃありませんし、そもそも趣味的に調べたいなと思ったことなのでそこはご了承ください。

# 実行環境
– CPU: CORE i5 8th Gen
– メモリ: 8GB
– OSと環境: Window11にAnacon

元記事を表示

AtCoder初心者 DailyTrainingメモ 2023/11/20

# ABC252 B-問題
https://atcoder.jp/contests/adt_easy_20231115_1/tasks/abc252_b

![252b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547298/f4adcafe-4d09-a571-64e4-5f4bb24603a2.png)

**ポイント**
リスト内の最大値を求めるには、max()を使う。
並び順にリストのインデックスを活用する。

““Python:252B.py
N,K = map(int,input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))

# 美味しさの最大値
MA = max(A)

# 美味しさの最大値の位置を記録する
M_idx = []

for i in range(N):
if A[i] == MA:
M_idx.append(i + 1)

元記事を表示

Pythonによる株式予測の移動平均とヒストグラムの求め方

# 株式予測の移動平均とヒストグラムの求め方
![graph_python.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180499/bd12b6c5-9b99-935e-66e7-0add8016f99a.png)

金融ファイナンスを分析することがPythonの強みです。
時系列データを分析して株価予測も可能になります。

## 必要ライブラリをインポートする
“`py:python
import pandas as pd
from pandas import Series,DataFrame
import numpy as np
# 可視化ライブラリ
import matplotlib.pyplot as plt
import seaborn as sns# 罫線
sns.set_style(‘whitegrid’)
#pickleファイルで必要なデータを一括保存
#pickleはPythonオブジェクトの直列化(シリアライズ)や非直列化(デシリアライズ)を扱うライブラリ
import p

元記事を表示

BigQueryでLLM(RAGを用いたテキスト生成)を使う

Google Cloud Next Tokyo2023でBigQueryからVertexAIのLLMを使用する話を聞いてきたので試してみる。
質問に対して、グラウンディング用データを参照しつつLLMで回答するということをSQLで実装できた。

全体的にはこんなイメージ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209773/97c0decf-8f2e-4ad3-0902-5628ba92529c.png)

# 準備
## BigQuery Connection API を有効にする
https://cloud.google.com/bigquery/docs/working-with-connections?hl=ja

## 外部接続の作成
BigQueryの画面の左上のエクスプローラの追加をクリック
![Screenshot (94).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20977

元記事を表示

OTHERカテゴリの最新記事