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

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

Pythonの例外処理を1から解説

# はじめに

Pythonには例外処理の書き方がいくつかあります。

この記事では、例外処理の基本となるtry-except構文、ファイル操作などでお馴染みのwith文を紹介し、最後にコンテキストマネージャについて解説します。

:::note info
Pythonコード多め・文章少なめです。
:::

:::note info
例外処理について初歩の初歩から始まり、Python独自の書き方まで解説します。
:::

# 例外とは

IndexErrorやValueErrorなど、コードを動かすとエラーを起こすことがあります。これを **例外** と呼びます。

“`Python
lst = [2, 4, 6, 8]
element = lst[4] # IndexError (リストの範囲外を見に行っているため)
“`
“`Python
word = “Python”
value = int(word) # ValueError (アルファベットをint型にしようとしたため)
“`

# try-except構文

## try節, except節

例外が出るかも

元記事を表示

PythonでLINEチャットボットを作る

過去に作ったLINEチャットボットを今風にリメイクしたものを投稿します。

### 環境:
 ローカル、Linux(Ubuntu)、python3.12.6

### 1.LINE Developersアカウントの作成:
https://developers.line.biz/ja/ にアクセスしてアカウントを作成する。
(今回はビジネスアカウントを作成)

### 2.プロバイダーの作成
コンソールにログインし、「新規プロバイダー作成」を選択。

### 3.チャットボット(LINEチャネル)の作成
チャネル設定から MessageAPI を選択して各種設定する
※執筆時点でLINE公式アカウントの作成が必要になっているため、画面の指示に従う。

### 4.Message API設定
LINE公式アカウントを作成して、MessageAPIを有効にする。詳しくは以下を参照。
https://developers.line.biz/ja/docs/messaging-api/getting-started/
有効にしたら、URLとアクセストークンを取得する。
また、Webhookを使う

元記事を表示

Streamlit ChatGPT Harness やーる

# はじめに

こちらのリポジトリは、Azure OpenAI ServiceのChatGPTを使うためのStreamlitアプリ開発ツールになります。

https://github.com/microsoft/az-oai-chatgpt-streamlit-harness

# 開発環境
– Windows 10 PC
– Python 3.11
– Azure OpenAI Service

# 導入

1.クローンする
$ git clone https://github.com/microsoft/az-oai-chatgpt-streamlit-harness.git

2.ディレクトリを移動
$ cd az-oai-chatgpt-streamlit-harness

3.ライブラリのインストール
$ pip install -r requirements.txt

4.example.envを複製し、ファイル名を「.env」に変更、内容を編集(Azure OpenAI Serviceにデプロイしたgpt-4o-miniを用いました)

~~~.env
AZURE_O

元記事を表示

Python – pip install したのに ModuleNotFoundError になる<解決方法>

## はじめに
Pythonでモジュールをインポートする際に、pip installしたのに「モジュール見つからないよ~」と言われたときの解決方法です。
anaconda と Pythonを両方インストールした記憶のある人はこれで解決する可能性が高いです。
(何度PythonとAnacondaのuninstallとinstallを繰り返したか。。。)
備忘録として書きましたので良ければ参考にしてください。

## 環境
* Windows11
* VSCode

## 状況
コマンドプロンプトでpip installすると「既にインストールされてるよ~」と帰ってくる

~~~
C:\Users\namae>pip install モジュール名
Requirement already satisfied: モジュール名 in c:\users\namae\appdata\local\programs\python\python312\lib\site-packages (4.66.4)
Requirement already satisfied: colorama in c:\users

元記事を表示

Python (および任意の言語) でプログレスバーを表示する方法と、その理解

## 概要

Python (および任意の言語) でこんな感じの処理進行度を雑に表示したい。

“`
Reading file 123 / 4000 …
““

## TL;DR

“`py
import sys
import time

def start_progress():
sys.stdout.write(“\033[?7l”)

def print_progress(text: str):
sys.stdout.write(f”\r\033[2K{text}”)
sys.stdout.flush()

def end_progress():
sys.stdout.write(“\033[?7h\n”)

n = 20

start_progress()

for i in range(n):
print_progress(f”Processing {i:3} / {n}…”)
# なんか処理をする
time.sleep(0.1)

end_progress()

print(“Done!”

元記事を表示

TfidfVectorizerのマージ方法の違いによる精度比較

# 概要
以前、[TfidfVectorizerを高速にマージする方法を検討した](https://qiita.com/shimajiroxyz/items/93df0a7673d44c7b8102)のですが、精度を調査できていなかったので、調査しました。

# 背景
概要で上げた参考記事では、TfidfVectorizerのプラパティとして取得できるIDF辞書からサブコーパスの文書頻度およびマージ後のコーパス全体における文書頻度を算出したうえで、それを最終的なIDFに変換するということを行っていました。この方法により、単純に全コーパスで初期化するベースライン手法と比べ、コーパス数が多いときで、1/20ほどの時間短縮が実現されました。

しかし、提案手法が、単純な方法でのマージと精度の面で同等になっているかは評価していませんでした。IDFから文書頻度を計算する過程で、丸め誤差等が生じている可能性があるため、ベースライン手法と検索結果が同じにならない可能性があります。

そこで、ベースライン手法を正として、それと、提案手法によるマージ後のベクトライザの検索結果がどの程度ずれるかを検証しま

元記事を表示

Python 初級入門 オブジェクトとクラス編

– python初学者、触ったことない人が投稿しています
– 個人的にあまり馴染みのない書き方について記載しています
– 誤っている箇所等があればコメントでご指摘いただけると幸いです
– こちらの記事は[パッケージとモジュール編](https://qiita.com/takemaru_shuna/items/f4ba304674a859a8b3f2)の続きとなっていますので気になる方は是非!

では早速本編へ

## クラス
### クラスの初期化、定義、デストラクタ
– classの定義
– Person # python3から
– Person()
– Person(object)
– クラスの初期化`__init__`が呼ばれる(コンストラクタみたいな??)
– クラスが呼ばれん空くなったタイミングでデストラクタ`__del_`_が呼ばれる
“`.py
class Person:
def __init__(self,name):
self.name = name

def greeting(self):

元記事を表示

『いちばんやさしいPython入門教室』を用いた学習の開始

# はじめに
 [以前の記事](https://qiita.com/D_Sato_01/items/35044d6be21990db766c)で使用していた書籍『プログラミングの基礎』(サイエンス社出版)の内容が自分のレベルに合っていないことが分かったため、別の書籍に移り換えることとした。

# 使用書籍
 今回からは書籍『いちばんやさしいPython入門教室』(ソーテック社出版)を扱いプログラミングの基礎学習を進めることとする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896883/8a61f73f-f983-fa34-7812-3d9723465b2d.png)

 プログラミングの基礎学習用の教材として本書を選定した理由は、単純に私がPythonに興味を持っていたからである。

 本書ではPython 3が用いられている。Python 3系はPython 2系と比較すると文法などがやや異なる。例としてprint構文を挙げると ( ) の有無という点で異なる。
“`p

元記事を表示

アンケート結果に差があるかを検定したい

あなたは「ピーマンが好きか」というアンケートを子どもたちにとりました。
また、それとは独立に、「なすが好きか」というアンケートも子どもたちにとりました。
どちらのアンケートも 5 つの選択肢から 1 つ選択する方式で、結果は以下のようになりました (2つのアンケート結果に対応はないものとします)。

| |ピーマン |なす |
|—|—|—|
|好き |6票 |8票 |
|どちらかといえば好き |1票 |7票 |
|どちらでもない |5票 |2票 |
|どちらかといえば嫌い |6票 |1票 |
|嫌い |2票 |2票 |

ただ、この表からでは結局子どもたちのピーマン嗜好性となす嗜好性に差があるのかよくわかりませんでした。

### カイ2乗検定

そこであなたはさしあたり、「2つの野菜間で『好き率』『どちらかといえば好き率』…『嫌い率』に差はない」という母比率の差のカイ2乗検定をしてみました。結果は有意水準5%で棄却されましたが、期待度数が小さいセルがあるのでフィッシャ

元記事を表示

asdf + Poetry + VSCode で Qiskit 開発環境を構築する

個人的な興味で量子コンピュータについて学習しており、Qiskitというライブラリを使って量子プログラミングにチャレンジしています。今回はasdfやPoetryのようなバージョン管理ツールを使って、VSCodeのJupyter Notebook拡張機能でQiskitを用いた量子プログラミングを行う環境を構築してみましたので、ご紹介します。

## はじめに

### Qiskit とは
https://www.ibm.com/quantum/qiskit

最近は量子コンピューターの研究が盛んに行われていますが、それに追随して量子ソフトウェア開発キット(SDK)も登場しています。

**Qiskit**は代表的な量子SDKの一つであり、量子回路の構成、回路の最適化、実機またはシミュレーターでの実行、測定結果の分析を実行できるPythonライブラリです。

最近ではRustを採用したこともあり、回路の操作(量子SDKが量子回路の生成と変換を行う作業)、およびトランスパイル(量子実機で実行できるよう変換する作業)におけるパフォーマンスは[他の量子SDKよりも速いです](https://ww

元記事を表示

PyCon JP 2024 Sprint で Python free threading (No GIL)対応を検証するPytest Plugin開発プロジェクトに参加してきました

[PyCon JP 2024の開発Sprint](https://pyconjp.connpass.com/event/329084/)にて、[pytest-freethreaded](https://github.com/tonybaloney/pytest-freethreaded)の開発に参加してきました。

私はこのプロジェクトでOSSライブラリの[Free Threading](https://docs.python.org/3.13/glossary.html#term-free-threading)対応の検証に携わり、いくつかの課題を発見しました。短期間ながらとても良い体験でしたので、本記事で、開発の背景と検証ツールの使い方、実際の検証の方法について共有します。

## Python 3.13におけるFree Threadingの導入

Free threadingは[PEP703](https://peps.python.org/pep-0703/)で提案され、Python 3.13からオプションで有効化できるようになった新機能です。Free threadingはGIL

元記事を表示

[Python] 辞書操作

# 辞書のキーと値を入れ替える
こんな感じです。
~~~Python:Irekae.py
dic = {“英語”:90, “国語”:85, “数学”:82, “理科”:95, “社会”:84}
reversed_dic = {j:i for i, j in dic.items()}
print(reversed_dic)
# 出力結果
{90:’英語’, 85:’国語’, 82:’数学’, 95:’理科’, 84:’社会’}
~~~
# 2つの辞書をマージする その1
辞書に対してアスタリスク2つをつけると、キーワード引数としてアンパックできるので、アスタリスクを2つつけた辞書データを{}で囲って結合します。
~~~Python:merged_dict1.py
menu1 = {“カツカレー”:850, “味噌カツ定食”:900, “アジフライ定食”:800}
menu2 = {“鯖の塩焼き定食”:950, “シェフの気まぐれ定食”:1000}
merged_menu = {**menu1, **menu2}
print(merged_menu)
# 出力結果
# {‘カツカレー’:

元記事を表示

LeetCode 1011. Capacity To Ship Packages Within D Days 再び

## はじめに
前回投稿したタイトルのこの問題。
最初に取り組んだ時は二分探索ではない方法でやろうとしました。
ずっと解けずに「Time Limit Exceeded」。
私の記事の大半を占めるTLEが出続けていました。

でも、諦めずにコード書き続けたらAcceptedになったので
嬉しなって投稿します。

https://qiita.com/yorocovich/items/3ce6ce09134d98623f1f

## 考え方
問題そのものは前回の記事見てもらうとして、考え方です。

出発点は、以下の式から考えました。

$総重量 = 1日の積載量 \times 積載日数$

この式を $1日の積載量$ について解くと

$1日の積載量 = \frac{総重量}{積載日数} $

となり、総重量は`sum(weights)`で一定なので、
反比例の式になる。

ということは、積載日数`days`が最大のとき、$1日の積載量$が最小になる。

なので、最大積載量を積載日数で割ったものが$1日の積載量$最小なので、
そこから積載できなければ、$1日の積載量 を +1$していく。

元記事を表示

pythonで作るネットショップ django-oscarを始めよう ②商品追加~カスタマイズ基礎編

# はじめに
前回の続きです。

https://qiita.com/idavash/items/694a04fef6c22b9a0e26

oscarでカスタマイズを繰り返せば、私が開発したOriginallyTeeのような、C2CのECサイトを作ることも夢ではありません。

https://originally-tee.com/top/

それでは今回はダッシュボードからの商品の追加と、カスタマイズの基礎を説明します。

# 設定の変更

商品追加前にsettings.pyとurls.pyの修正をします。html,css,js,画像ファイルの配置等に関する部分で、Djangoの初期設定でよく行われる変更です。

import osの追加
TEMPLATESの”DIRS”修正
MEDIA,STATICまわりの追加

`$ mkdir static` でディレクトリ作成

“`
#settings.py

import os #追加

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TEMPLATES = [
{
“BACKEND”

元記事を表示

RAGの錬成術~入門編~

# RAGの錬成術 ~入門編~
(入門編と書いてますが、これは筆者の技術スタックがアレだからです。誤りなどは寛大な心で許していただけると助かります、、、)
## はじめに
– この記事は「とにかくRAGを作りたい!」という人を読者として想定しています。
– サービスをデプロイしたり、機密情報を扱ったりすることは特に想定していないのであしからず。
– もちろん使用は自己責任でお願いします。
– コードは安全な環境で実行してください。
– APIでサクッとRAGの作り方は3つある
– OPENAIのASSISTANTS APIを使う方法
– langchainで実装する方法
– 自分でベクトルDBを作る方法
– (他にもDifyやAzure-OpenAI等を使う方法もあるが、割愛)
– 上が簡単で、下に行くほど実装が難しくなるが、カスタマイズができるようになる。
## RAGとは
– RAGとはRetrieval Augmented Generationの略で、ChatGPTをはじめとする生成AIに文書から抽出し

元記事を表示

rank_bm25のインスタンスをオーバーライドなしで高速にマージする方法の速度・精度比較

# 概要
rank_bm25のインスタンスをオーバーライド無しで高速にマージする方法を検討しました。

結論としては、オーバーライドなしだと、速度と精度を文句なしに両立できる方法はありませんでした。
オーバーライド含む実装の手間と速度や精度のトレードオフでちょうどよいところを用途ごとに選ぶのが良いと思います。

# 背景
以前、[関数をオーバーライドすることでrank_bm25のインスタンスを高速にマージすることができた](https://qiita.com/shimajiroxyz/items/01b6b02e18fb19de1113)のですが、オーバーライドはライブラリ全体への影響が未知数で怖いのでできたら避けたいです。

そこで、プラパティとしてもともと保持されているidf辞書や文書レベルでの文書頻度を活用することで、オーバーライドなしで、全コーパスから計算するよりは高速なマージ方法の実現を目指しました。

# 実装
コーパス全体の文書頻度を求めることができれば、idfも計算できます。
コーパス全体の文書頻度を求める方法として、大きく、BM25Okapiのプラパティであるidfと

元記事を表示

LチカをWebで制御する

**利用する機材**
① LED1個
② ジャンパー線2本 (オス・メス)
③ 抵抗1個 (1kΩ)
④ ブレッドボード(小)

**LED**
LEDはプラス(アノード:長)とマイナス(カソード:短)が決まってます。
LEDを使うに当たり、Raspberryと直結すると、通常の御遊びのLEDであれば、即焼けるので、抵抗を直列に繋ぐのが一般的ですが、では、最低抵抗値は?
  LEDの仕様:順電圧 (Vf) / 順電流 (If) の時、
  抵抗値(R) =(電源電圧 - 順電圧)/ 順電流  で計算可能です。
 (例)順電圧が2V、順電流が20mA のLED、Raspberryの電源電圧(5v)を利用する場合
  R =(5V - 2V)/ 0.02A = 150 Ω
<勝手な個人見解>
LEDをAmazon等で買うのは良いのですが、順電圧や順電流の値を忘れ、結局、計算できず…
そんなズボラな私は、とりあえず1kΩで繋いでます。明かりが小さいと思えば、もう少し小さな抵抗値に変更です。
もちろん、何かが壊れたら、悲しみます… (痛い授業料です)

**GPIO**
Raspberr

元記事を表示

PyCon JP 2024で「Python x Rust」をテーマに登壇しました(ベンチマークの追加検証あり)

株式会社RevCommでエンジニアをしている skokado([@_skokado](https://x.com/_skokado))といいます。

2024年10月27日から28日にかけて行われたPyCon JP 2024で登壇してきました。

[https://2024.pycon.jp/ja](https://2024.pycon.jp/ja)

![PNG_yoko.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154711/8bbe721f-e57e-37ca-5caf-75341b252017.png)

# 発表内容

タイトルは『Rustを活用したPythonライブラリの開発』でした。
https://2024.pycon.jp/ja/talk/7GPRYL

発表資料:

https://docs.google.com/presentation/d/e/2PACX-1vRMGuyfGnOLgwNIxLufLLLh7VjY3jSNgS66v7I8yE2HWR3gSyM6uvPFlRSMX

元記事を表示

Pythonで学ぶAWS Lambdaを活用したEC2インスタンス監視とNLBターゲットルールの自動切り替え

## はじめに
AWS Lambda関数を用いて、特定のEC2インスタンスの状態を監視し、両方のインスタンスが停止した際にNLBのリスナーをメンテナンスモードに変更する方法について解説します。

AWS SDK for Python(boto3)を活用して、EC2インスタンスの状態確認とNLBのターゲットグループの変更を行います。

本記事では、各コードの部品を順を追って説明し、全体の流れを把握できるようにします。

## コードの部品紹介
AWS Lambda関数を使用して特定のEC2インスタンスの状態を監視し、両方のインスタンスが停止している場合にNLB(Network Load Balancer)のリスナーをメンテナンスモードに変更する処理を行います。各部分を解説します。

### 1. インポートとクライアントの初期化
“`python
import boto3

def lambda_handler(event, context):
ec2_client = boto3.client(‘ec2’)
elb_client = boto3.client(‘elb

元記事を表示

Pythonでヌメロン(数字当てゲーム)を実装

## はじめに
 過去にテレビ番組としても放送されていた「Numer0n(ヌメロン)」について、一人でもゲームを楽しめるようにシンプルな内容にしてPythonで実装してみました。
 ヌメロンは2人対戦のゲームで、まずお互いに各桁の数字に重複のない3桁の数を設定します。先攻後攻を決め、先攻が3桁の数を予想してコールします。それに対し後攻は、コールされた数の各数字が設定した数に含まれていればBITE、桁も一致していればEATとして「⚪︎EAT、⚪︎BITE」というように答えます。これを両者順番に繰り返して3桁の数を予想し、先に相手が設定した数を当てることができれば勝ちとなります。番組内ではアイテムがあり、2回連続のコールや設定した数字の変更等が可能でしたが、今回はシンプルに数を予測してコールをし、EATとBITEの判定結果に基づいて正解を当てるという内容となっています。
 また、Flaskでwebアプリ化もしたため、HTMLやCSSのコードとともに掲載します。最終的には以下のような画面でゲームを行い、正解するまでの回答数等に基づいてスコアが出力されるようにしました。

![image.pn

元記事を表示

OTHERカテゴリの最新記事