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

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

Djangoで削除時に外部キー制約によって例外が発生する問題の対処法

Djangoで汎用View `django.views.generic.DeleteView` を用いた削除時に外部キー制約によってProtectedErrorの例外が発生するのをキャッチする方法を紹介します。

※ これは2020/02/05に個人ブログで公開した記事を移植したものです。

## PROTECT されている場合に削除しようとする場合の挙動

Djangoでは、モデルに外部キーを設定できます。モデルの第二引数では、参照先が削除等された場合の挙動が設定できます。

“`py
class Comment(models.Model):
user = models.ForeignKey(User, models.PROTECT)
“`

ここで、参照先を削除できなくする `models.PROTECT` という設定ができます。この設定をした場合、参照先は削除できなくなります。

そして、公式ドキュメントにはこのような記述があります。

> Prevent deletion of the referenced object by raising ProtectedErro

元記事を表示

PyMC5を扱うために知っておくべきPyTensorの基礎

PyMC5はバックエンドでPyTensorが使われています。単純なモデルを記述する分にはPyTensorを意識しなくても扱えますが、モデルが複雑化していくとPyTensorに触れる必要が生じてきます。PyTensorを扱う上で知っておくべき基礎的な部分をまとめていきます。

PyMCの公式でもPyTensorの解説はされているのでこちらも合わせて確認してください。
https://www.pymc.io/projects/docs/en/stable/learn/core_notebooks/pymc_pytensor.html

PyTensorのチュートリアルも用意されています。
https://pytensor.readthedocs.io/en/latest/tutorial/index.html

## PyTensorとは

PyTensorは、多次元配列を含む数学的な式を定義し、最適化し、効率的に評価することができるPythonライブラリです。

もう少し、簡単に説明すると、NumPyのように多次元配列の数学的演算を行う機能があります。また、グラフフレームワークにより数式

元記事を表示

Pythonで「関数で可変個数の引数を受け取る」の動作を確認してみた

# 概要

Pythonで「関数で可変個数の引数を受け取る」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/python/userfunc/index7.html

# 実装

以下のファイルを作成しました。
“`sample.py
def myfunc(num1, *tupple1):
print(tupple1)

myfunc(10)
myfunc(10, “Hello”)
myfunc(10, “Hello”, 25)
myfunc(10, “Hello”, 25, “Orange”)
myfunc(10, “Hello”, 25, “Orange”, True)

def myfunc(category, *ranktuple):
count = 1
print(category)
for val in ranktuple:
print(“No.” + str(count) + “:” + val)
count += 1
print(“\n

元記事を表示

ろうとるがPythonを扱う、、(その20:Scapyで改ざん)

# Scapyでデータを改ざんしてみる
[「ろうとるがPythonを扱う、、(その19:Scapy Bridgeで遅延やパケットDrop)」](https://qiita.com/infinite1oop/items/83cbd8f8cbd671022588)の続きである。ネットワークブリッジをもうけて、そのブリッジでデータを改ざんする。

## ネットワーク構成
下記のようなもの。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/42b3080f-b98e-1c94-a0d9-c9cd70bba2e2.png)
VirtualBoxの3つのVMを利用。中央のVM(Lubuntu)ネットワークブリッジ、両端は同一ネットワークセグメントに属する。

## ソースコード
### 出だし
“`python
from scapy.all import *
import select

sub_data = ‘1234567890’
“`
– 改ざん後のデータ(置き換えるもの)

元記事を表示

PyROOTでルートファイルのtreeのbranchを読ませるのに苦労した話

# PyROOTに関して

あるときケムコワは思いました。
「ROOTは使いにくい!!!」
と。
ポインタだのnewだのよくわからないし独自型を返す関数が独自型の引数をとるのでそういう部分に囚われてにっちもさっちも解析が進みません。
すぐSegmentationViolaionとか言われるし…

そこでPyROOTという存在に目をつけました。
ちょうど研究でPythonを使っていたので良い機会でした。

研究には当然TTreeオブジェクトのブランチを読んでゴニョゴニョするわけですが、それがPyROOTでやるのに苦労したというのが今回の記事の内容になります。
ただしある程度ROOTの基礎知識を要求するのは許してください。

# PyROOTの導入に関して

ちょっとPyROOTの導入に関して述べておきます
まずなんらかの手段でROOTとPython3を導入してください。
以下Linuxを想定します
rootのインストールディレクトリに行きます。
rootにパスが通っていれば、
“`
$ which root
“`
として出てくる場所がインストールディレクトリです。
そこにthisro

元記事を表示

Pythonでダミーデータを自動生成してみた!

# はじめに
最近は数百万から数億行のデータの前処理やら加工やら集計やらをするのは当たり前となってきている。ただ、大きいデータを使ってのロジックがあっているかなどの確認は超めんどくさい。(単純にデータ多いし、見通し悪いし)

なので、スモールデータ(ダミーデータ)を使ってロジックがあっているかの確認をしたい!
ChatGPT 等を使ってもデータ生成はできますが、PythonのFaker ライブラリを使うことでもかなりカスタマイズされたダミーデータを作成することができます。特殊な値を入れたい場合に重宝するかもしれません。

# 使ってみた
まずは全体のコードをぺちゃっとします。

~~~python:FakeData.py

import pandas as pd
import random
from faker import Faker
from faker.providers import DynamicProvider

def main():

fake = Faker(“jp-JP”) # Fakerのインスタンス、引数を変えることで言語の対応を

元記事を表示

Amazon Bedrock 全LLM 日本語能力比較(Mistral追加版)

Bedrockで使用可能なLLMとしてMistralが追加されたので、Bedrockで使用可能な全LLMに対して日本語で味噌汁の作り方を質問して日本語能力と知識を確認します。

:::note
LLMは日本語対応を謳ってなくても実際には使えたりします
:::

:::note
2024/3/2現在、LangChainは未対応の為、boto3を直接呼んでいます。
また、使用可能なリージョンはオレゴンのみなのでus-west-2を指定しています。
:::

# Mistralの感触
8x7Bは日本語能力、知識ともに、Llama2やClaude Instantと同等程度かな~どうかな~、という感触です。
知識はともかく何せ安くて日本語能力はありそうなのと、入力可能トークンはLlam

元記事を表示

ChatGPTに、自動でマウス操作をするコードを聞いて、実際に実行させてみる →そのままで正常動作

# はじめに

画面内のある位置を1分ごとに押しておいてほしい…(何かの表示更新などの用途で)、簡易的なコードがさっくりほしいけれど、わざわざ検索して調べてコードを作るのは(簡単なコードであっても)面倒くさいな…、と思いました。

そこで、ChatGPTに聞いて、マウス操作を行うサンプルプログラムを作ってもらい、うまく動作するかを試してみます。

# ChatGPTにサンプルプログラムを聞いてみる

Pythonのコードで出来るかどうかをまず聞いてみます。

https://chat.openai.com/

質問中の画面例:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606924/cbc94667-31fb-fef5-ab50-5db56744186c.png)

## Pythonでマウスの入力操作は出来る?

**▼私(人間)**
Pythonでマウスの入力操作は出来る?

**▼ChatGPT(自動応答)**
はい、Pythonでマウスの入力操作を行うことができ

元記事を表示

自動化による効率化:Excelマクロの実行からメール送信、整理まで(python)

最近、Python使って、タスクスケジューラーに以下を設定して自動化しているメモ

Excelマクロ実行してデータ更新 → 毎日、自分のメールに送る → メールフォルダ、古い日のメール削除 → メールゴミ箱もクリーンに。

備忘録で。

# 自動化による効率化:Excelマクロの実行からメール送信、整理まで

今回は、Excelマクロを実行してその結果をメールで送信し、不要になったデータを整理する一連のプロセスを自動化する方法を紹介します。

## 概要

### コードの内容と説明

### ① Excelマクロの実行とメール送信の自動化

このプロセスでは、指定したExcelファイル内のマクロを実行し、特定のシートの範囲をスクリーンショットで撮影して、その画像をメールに添付して送信します。最後に、送信済みアイテムからメールを削除し、一時保存した画像ファイルも削除します。

#### 主要なステップと関数:

1. **画像をBase64エンコードする関数 (`image_file_to_base64`)**:
* この関数は、指定された画像ファイルをBase64形式の

元記事を表示

Mercury Cloudを使って二日間でWebアプリを作れた話

# まずはお約束(ディスクレーマー)
私はただのゆるふわデータサイエンティストです。
ここに書いてあることは「ふーんそんな考え方もあるのかな」くらいの気持ちでこしあん大福でも食べながら読んでください。
本記事は何らかの行動を促すものでは全くありません。

# 導入
## AI全盛期の主役Pythonがバックエンド言語であるという現実
今や、下手すると数学の理解度が中学生レベルの人間であってもPythonを使って超絶簡単にAIを活用した予測モデルを開発できる時代です。
更にGoogle Colabの登場により、一般的に高性能なPCスペックを要求されるAIの計算処理でもクラウド上で実行できるので、格安の中華タブレットとキーボード、インターネットの接続環境を揃えれば、1万円そこらでAIプログラマーになることだって可能になりました。

しかし、人類の7割は文系[^1]であり、いかにPythonが学習コストの低い言語であるとしても、勤務先の営業社員に「営業成績をAIで分析するツール作ったから使って!」とColabのリンクを教えたところで、実際に使ってくれる人間はかなり限られてくるのが現状だと思い

元記事を表示

相加・相乗平均のグラフ化

# はじめに
相加・相乗平均は、不等式の証明などに多用される。証明方法としては、左辺-右辺が0以上になることを示すのだが、それには、実数の2乗は0以上であるという条件を使用する。そこで今回は、3パターンの証明方法で相加・相乗平均を証明した後に、Pythonを用いてグラフ化することで、視覚的に不等式が成立することを体感することを目的とする。 

# 導入
以下に相加・相乗平均の定義を述べる。

まず、$a>0,b>0$としたとき以下の式が成立する。

“`math
\frac{a+b}{2}\ge \sqrt{ab}
“`

ただし$a=b$のとき等号が成立する。

この式では、分数がややこしいので、以下の形に変形したものが多用される。

“`math
a+b\ge 2 \sqrt{ab}
“`

# 証明
今回は、以下の3パターンで考えた。ただし、いずれの証明も実数の2乗は0以上であるという原則を用いる。

## 2変数関数
左辺から右辺を引くことにより証明することができる。ただし、a,bは正なので、$\sqrt{a},\sqrt{b}$は実数の領域に存在する。
“`math

元記事を表示

AWS LambdaでGoogleのAIモデル「Gemma」を動かす

2024年2月21日、Googleから大規模言語モデル(LLM)である「Gemma(ジェマ)」が公開されました!
これまでGoogleのモデルはクローズドなものでしたが、このGemmaはオープンソース型!ということで、本記事ではAWS Lambdaを使用してGemmaを実行させてみます。

## はじめに
Gemmaの公開から1週間ちょっと経っていますが、この短い間に既に色々と検証されている方や、Gemmaを利用するためのライブラリ等の対応など多くのことがネット上に見受けられます。
特に、GemmaをGGUF形式に変換するllama.cppはGemmaのリリースから3日と経たずGemmaに対応されており、最近のLLMに関する開発スピードの早さには驚かされます。
ちなみにこの辺りの対応の流れは以下のURLから確認いただけるので、ご興味があれば覗いてみてください。

https://github.com/ggerganov/llama.cpp/pull/5631

## 手順
手順としては大きく以下のようになります。
1. Gemma(GGUF形式のモデル)のダウンロード
1. Lambd

元記事を表示

情報Ⅰ ソートアルゴリズム

情報のテストがあるのでソートのところの解説を作りました
間違いがあればコメントとかで指摘してください

ところで、ここで書いてるプログラムは教科書とかと同じのにしたんですけど
配列を後ろから見てるの分かりにくくないですかね
あとなんで降順なんだろう
あと`for i in range()`も個人的には分かりにくい

## ソートとは何か
ここでいうソートとは、「与えられた配列を一定の規則に従って並び替えること」です
今回は、
「任意個の整数がの配列」を「先頭ほど大きく、末尾ほど小さく」なるように並び替えます

## 交換法(バブルソート)

(これは昇順のアニメーションです)

Bubblesort Animation
Pythonで〇×ゲームのAIを一から作成する その58 最強の AI と最善手の定義とその性質

# 目次と前回の記事

https://qiita.com/ysgeso/items/2381dd4e3283cbed49a0

https://qiita.com/ysgeso/items/fc19eb2764e0766b59d5

## これまでに作成したモジュール

以下のリンクから、これまでに作成したモジュールを見ることができます。

https://github.com/ysgeso/marubatsu/blob/master/058/marubatsu.py

https://github.com/ysgeso/marubatsu/blob/master/058/ai.py

## これまでに作成した AI

これまでに作成した AI の アルゴリズム は以下の通りです。

| ルール | アルゴリズム |
|:-:|:–|
| __[ルール1](https://qiita.com/ysgeso/items/bdbcd4c1ab1d8731df58#%E6%9C%80%E5%88%9D%E3%81%AB%E8%A6%8B%E3%81%A4%E3%81%8B%E3%81%A

元記事を表示

JuliaとPythonの組み合わせ

# はじめに
最近、Juliaを用いたデータ処理が増えてきました。
そこで、Juliaで処理するデータを用意し、Pythonで処理できるのか?という疑問から今回の記事をまとめたいと思います。

# Julia + Python
今回は、Juliaでデータフレームを作成し、`PyCall`を用いてデータフレームを処理していきたいと思います。
`PythonCall`の方が良いとかいう噂もありますが、個人的に`PyCall`の方が使いやすいんですよね…(´・ω・`)

ということで、まずはデータフレームを作っていきましょう。

“`julia
using DataFrames
using PyCall
using Conda;Conda.add(“pandas”)

df = DataFrame(A = 1:4, B = [“M”, “F”, “F”, “M”])
“`

Pythonのパッケージ管理も`Conda`と`CondaPkg`どちらがいいんですかね…
これも適当に決めてます(;’∀’)

とりあえず、データは作成できました。
ここで、問題がひとつ。
Juliaで作成されたデ

元記事を表示

python3.12 のLambda Layerの作成方法

# 初めに

Lambda のPython 3.12 対応につき、Layer の作成方法を調査したので**備忘録的に残します**。
基本的にはpython3.11 の時と変わらないと思いました。

:::note
– .zip形式での作成 とします
– コンテナでの作成方法は対象外
:::

https://aws.amazon.com/jp/about-aws/whats-new/2023/12/aws-lambda-support-python-3-12/

ポイント
– Python3.12 はAmazon Linux 2023で動く
– Windows環境でのLayer 作成は困難なので、Windows環境しかない人はどうにかLinux環境を構築する

# 作業の大まかな流れ

大まかな流れは以下の通りです:
– Lambda実行環境の確認
– (Linux 環境を入手)
– Python3.12 と必要なパッケージのインストール
– 目的の pip のパッケージをディレクトリににインストール
– レイヤーの作成

Linux 環境が無い場合は Cloud9 が手っ

元記事を表示

PythonのPPTプレゼンテーションでビデオを追加、置換、および抽出する方法

教室、会議室、または仮想会議のいずれであっても、PowerPointプレゼンテーションは影響力のある視覚的コンテンツを提供するための必須のツールとなっています。PowerPointにはプレゼンテーションを強化するためのさまざまな機能が備わっており、その中にはビデオを追加する機能も含まれています。ビデオを利用することで、複雑な概念を伝えたり、製品の機能をデモンストレーションしたり、観客を引きつける要素を追加することができます。しかし、PowerPointプレゼンテーションでビデオを手動で管理するのは手間がかかります。このような場合、Pythonのような汎用プログラミング言語が役立ち、**PowerPointプレゼンテーション内のビデオを挿入、置換、または抽出する**ための簡単な方法を提供します。本記事では、**Pythonを使用してPowerPointでビデオを管理する方法**、つまりPPTにビデオを挿入する方法、PPT内のビデオを置換する方法、およびPPTからビデオを抽出する方法について説明します。

– **[Pythonを使用して指定したスライドの指定した位置にビデオを追加する方法

元記事を表示

Pythonで「キーワード引数を使って関数を呼び出す」の動作を確認してみた

# 概要

Pythonで「キーワード引数を使って関数を呼び出す」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/python/userfunc/index6.html

# 実装

以下のファイルを作成しました。
“`sample.py
def myfunc(num1, str1):
print(“num1=” + str(num1))
print(“str1=” + str1)

myfunc(num1=10, str1=”Orange”)
myfunc(str1=”Lemon”, num1=15)

def myfunc(old, name, address):
print(“年齢は” + str(old) + “です。”, end=”)
print(“名前は” + name + “です。”, end=”)
print(“住所は” + address + “です。”)

myfunc(28, “Suzuki”, “Tokyo”)
myfunc(address=”Osaka”

元記事を表示

Tkinterでフィールドマップをつくる

# はじめに

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625723/097a2476-4ec7-a184-87dc-e0bbc3746537.png)

Tkinterで、フィールマップをマップチップを用いて作成する方法について解説します。

# マップチップとは

>マップチップとは、ドット絵で画像を作成する際、画像サイズの小さい最小単位の部品をパズルのように組み合わせて画像を製作する手法、またその最小単位の部品のこと。
>
>容量が今のゲームよりもはるかに少なかった2Dゲームの時代、いかに少ないファイルサイズで効率よく街やフィールドのマップを作るかということに苦心していた頃に使われていた手法であり、ハードの進歩により必須となる局面は減ったとはいえ今でも現役の手法であり、特に2Dの自作ゲームを製作する際に重要なテクニックとして重用されている。
>
>ファミコンなどの旧時代のグラフィック画像を例に見ると、樹木やレンガ、海の波の模様や屋根瓦といった背景の模様などを1マスの小さな単

元記事を表示

白黒ランダムパターンを生成する。python

# 白黒のランダムパターンの生成
#### 研究で白黒のランダムパターンが必要になったのでPythonで作成しました。
“`RP_1.py
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime

def generate_random_pattern(size=300):
pattern = np.random.randint(0, 2, (size, size)) * 255

return pattern

def save_pattern(pattern):
filename = datetime.now().strftime(“%Y%m%d%H%M%S”) + “.png”
plt.imshow(pattern, cmap=’gray’, interpolation=’nearest’)
plt.axis(‘off’)
plt.savefig(filename, bbox_inches=’tight’, pad_inche

元記事を表示

OTHERカテゴリの最新記事