- 1. Pythonで、10進数→n進数、n進数→10進数に変換してみた
- 2. [AWS SAM] Selenium4をAWS lambda Python3.12で動かす
- 3. 【備忘録】正常系テストと異常系テストの例
- 4. メモ:langchainへのプルリクの出し方
- 5. コンピュータと会話するためには
- 6. Python3でファイルのメッセージダイジェストを求めたい
- 7. Chainlitをクラウド上で編集・起動してみる
- 8. Windowsでバイオインフォマティクス(分子系統解析)の実行環境を構築する
- 9. 【langchain】EnsembleRetrieverがDocumentを同一とみなす条件
- 10. バージョン管理とログ管理を楽にするサンプルコード
- 11. Openpyxl: Cell の結合 (汎用版)
- 12. Pythonでファイルが見つからない
- 13. Openpyxl: Cell の結合
- 14. うるう年の判別方法
- 15. Selenium3をAWS lambda python3.8以上で動かす[AWS SAM]
- 16. IndentationError: unindent does not match any outer indentation level というエラー文に出くわす
- 17. PygameとPygletを同時に動かす(&初めてのPyglet備忘録)
- 18. PostgreSQL: SQL のサンプル (スキーマの一覧)
- 19. 二部マッチング問題とは?
- 20. PythonでGuess the Number Game を生成してみた
Pythonで、10進数→n進数、n進数→10進数に変換してみた
私たちは、一般的に10進数を使っています。これは、10を基数とした表現法です。
0から9の10個の数字を使って数を表現し、10になると、桁が上がります。ここで、私はPythonを使って、n進数に変換できないか興味を持った。この記事の目的は、10進数をどのようにn進数へ、n進数をどのように10進数に変換するかを説明したい。
### 10進数からn進数への変換方法
“`
x = “10”
#2進数への変換
print (int(x,2))
#6進数への変換
print (int(x,6))
#8進数への変換
print (int(x,8))
#16進数への変換
print (int(x,16))
“`
### 実行結果
“`
2
6
8
16
“`
### n進数から10進数への変換方法
“`
#2進数への変換
print (int(‘10100′,2))
#6進数への変換
print (int(’32’,6))
#8進数への変換
print (int(’24’,8))
#16進数への変換
print (int(’64’,16))
“`
### 実行結果
“`
[AWS SAM] Selenium4をAWS lambda Python3.12で動かす
# はじめに
AWS SAMを使ってAWS LAMDA上でselenium3を使う方法をご紹介いたしましたが、当初目的が別にありました。
きっかけはこちらの方の記事でした。
selenium4の最新版を利用すれば、新しく追加されたselenium-managerという機能があり、簡易的なChromeブラウザと、そのバージョンにあったChromDriverを自動でインストールしてくれます。
また古いHeadless-Chromiumはselenium4に対応していないため、最新のchromeに対応させたかったのですが、なぜか手元のマシン(M2 Macbookpro)で動かず、手詰まりになっていました。
この記事は動作するようになったコードの紹介と、その解決方法についてのまとめです。
## こんな方におすすめ
* AWS Lambda python3.8以上でselenium4を使いたい方
* AWS SAMを使っている方
* Apple Silicon製のMac(M
【備忘録】正常系テストと異常系テストの例
# はじめに
お久しぶりです。Tomita Kentaroと申します。今回はプログラミングのテストについて書きたいと思います。特に正常系テストと異常系テストについて簡単にまとめます。今回扱う、ソースコードの全体を以下に示します。“`python:Test.py
import unittestdef divide(a, b):
return a / bclass TestDivideFunction(unittest.TestCase):
def test_divide_normal(self):
self.assertEqual(divide(10, 2), 5)
self.assertEqual(divide(9, 3), 3)
self.assertEqual(divide(5, 1), 5)def test_divide_by_zero(self):
with self.assertRaises(ZeroDivisionError):
divide(1
メモ:langchainへのプルリクの出し方
# はじめに
langchainにプルリクエストを出してみたので、自分用にメモを残します。# 経緯
EnsembleRetrieverの仕様で気になるところがあったので、後方互換性をもちつつユーザから指定できる選択肢を上げるためのプルリクを出してみました。今回出したプルリクは以下です。
[langchain: add id_key option to EnsembleRetriever for metadata-based document merging #22950](https://github.com/langchain-ai/langchain/pull/22950)
# 基本方針
langchainのgithubから辿れる場所に[contribution guideline](https://python.langchain.com/v0.1/docs/contributing/)があるので基本的にはこれに従います。
判断に迷ったところを中心にメモします。# masterブランチのfork
[langchain](https://github.com/lan
コンピュータと会話するためには
# 導入
お疲れ様です!今日は自然言語処理について学習したことをアウトプットします!## 自然言語処理(NLP)とは
自然言語処理(Natural Language Processing、NLP)とは、人間が日常的に使用する言語をコンピュータに理解させるための技術です。
NLPは、テキストや音声データを解析し、その意味を理解することを目的としています。
この技術は、検索エンジン、音声アシスタント、翻訳アプリなど、日常生活のさまざまな場面で利用されています。## NLPの歴史と発展
NLPの歴史は長く、1950年代にチューリングテストが提唱されたことに始まります
。それ以来、計算機の性能向上と共に、NLPの技術も飛躍的に進歩してきました。
今日では、機械学習やディープラーニングの技術を駆使して、より自然で精度の高い言語処理が可能となっています。## コンピュータと会話するためにNLPが必要な理由
コンピュータと自然な会話をするためには、単に言葉を理解するだけでなく、その背景にある文脈や感情も理解する必要があります。
NLPは、これらの複雑なタスクを実現するための基本技術です。
Python3でファイルのメッセージダイジェストを求めたい
Python3でファイルのメッセージダイジェストを求める方法を紹介します。ここではSHA256を例にします。
python3.11以降の場合、`hashlib.file_digest`を利用します。
“`python3
import hashlib
with open(‘INPUT.txt’, ‘rb’) as f:
digest = hashlib.file_digest(f, “sha256”)
print(digest.hexdigest())
#=> 6f67ea379608add8b4f3c0a3c95c0e70ab2752405de7c69c152faabd5870305e
“`それ以前のバージョンの場合は、ファイルを自前で読み込む必要があります。
まずファイル内容をすべてメモリ上に展開してよい場合は以下のようなコードになります。
“`python3
import hashlib
with open(‘INPUT.txt’, ‘rb’) as f:
digest = hashlib.sha256(f.read())
print(digest
Chainlitをクラウド上で編集・起動してみる
ChainlitをGCP Cloud Shell Editorでプレビューしてみるのが今回やること。
## 準備
### Cloud Shellに入る
Web検索からすぐ入れるページがここ。
ここで「コンソールへ移動」をクリック。
![スクリーンショット 2024-06-14 225804.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68673/5e734e92-db31-3cd0-2d31-9c1ff78555e1.png)下のような画面が出てくるので、「エディタを開く」を選択。
![スクリーンショット 2024-06-14 225901.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68673/334f9fdc-7cd9-35ab-fef3-dc19d1fe182b.png)すると、このような画面が出てきて、しばし待つ。
![スクリーンショット 2024-06-14 225908.png](https:/
Windowsでバイオインフォマティクス(分子系統解析)の実行環境を構築する
## 背景
バイオインフォマティクスでは、MacBookの使用が推奨され、Windowsでの環境構築に関する情報が少ないです。この記事では、WSL2を使用して、Windows PCで分子系統樹解析を行うための環境構築方法を紹介します。バイオインフォをこれから始める人に向けて、丁寧に書いていきたいと思います。## 動作環境
– Windows11
(Anaconda3のインストール後の操作は、Macの人も参考になると思います)## 環境構築フロー
1. WSL2のインストール
2. Anaconda3のインストール
3. Anaconda3で解析用の仮想環境を構築
4. 各種パッケージのインストール## 1. WSL2のインストール
WSL2とは、Windows Subsystem for Linux 2の略称で、Windowsコンピュータ上でLinux環境を構築することができます。Linuxと聞くとギョッとしてしまうかもしれませんが何も恐れることはありません!今までのWindows環境が壊れることもありません。
### 手順
1. Windows PowerShellを管理
【langchain】EnsembleRetrieverがDocumentを同一とみなす条件
# 概要
langchainのEnsembleRetrieverが異なるretrieverから検索の結果得られたDocumentをアンサンブルするとき、どういう条件でDocumentの異同を判断しているのか調べました。
結論としては、page_contentが同じとき、同一のDocumentとみなすようです。
# 検証
検証バージョンは以下です。“`sh
langchain 0.2.3
langchain-community 0.0.29
langchain-core 0.2.5
“`まず全く同じtextのリスト2つ用意し、それぞれでretrieverを作って、均等な重みでensembleしてみます。
“`Python
from langchain_community.retrievers import BM25Retriever
from langchain.retrievers import EnsembleRe
バージョン管理とログ管理を楽にするサンプルコード
研究をしているときに`git`でバージョン管理をすることは少なくないと思います。
– 複数人で開発を行っている場合
– 同じファイル構造をローカルPCとリモートサーバーなど2箇所に保存し、実行する場所(サーバー・GPUなど)とコードを書く場所(PC)を分けて開発する場合などでお世話になる機会が多く、`git`に足を向けて寝られないエンジニアがほとんどなのではないでしょうか。
ある日、筆者はこのようなケースにぶち当たりました。
– かなり前の学習モデルの動作確認をしようとしたが、モデル構造が以前と今では変更されており、どのバージョンまで戻せばいいのか分からない
– `nohup`実行したときに`nohup.out`のどの部分にログが残っているのか分からないこのとき、`git reset`や`git reflog`,`git revert`を駆使して頑張ってバージョンを戻すことも可能ですが、間違えて今のファイルを全部消してしまうリスクもありますし、元のバージョンに戻すのが面倒くさいケースもあります。
極論言えば、タイムスタンプ付きのログ用フォルダを用意して、そこに移動すれば
Openpyxl: Cell の結合 (汎用版)
こちらのプログラムを汎用的に使えるように改造しました。
[Openpyxl: Cell の結合](https://qiita.com/ekzemplaro/items/9996dc355cc957c1dd61)## プログラム
“`py:merge_cells.py
#! /usr/bin/python
# —————————————————————
# merge_cells.py
#
# Jun/14/2024
# —————————————————————
import sys
import openpyxl
from openpyxl.styles import Alignment# —————————————————————
# [4-6]:
def column_analize(ws,column):
p
Pythonでファイルが見つからない
Pythonを初心者の頃、以下のようなコードでファイルが見つからず悩んだ。
“`file_not_found.py
with open(“test.txt”) as file:
print(file.read())
“`
VScode上でPythonファイルをディレクトリで開かずに、再生ボタンを押して実行していたことがこの問題の原因である。この場合、作業ディレクトリがPythonファイルの存在するディレクトリではない。Pythonファイルからみた相対パスで指定すると`FileNotFoundError: [Errno 2] No such file or directory: ‘test.txt’`と注意されてしまう。再生ボタンを押すだけで実行可能という利便性を持たせつつ、ファイルのパスを正しく指定する解決法を2つ示す。
## pythonファイルのパスから絶対パスをつくる
Pythonでは`__file__`からそのPythonファイル自体のパスが得られる。文字列の操作でもパスをつくることができるが、`os`や`pathlib`を使うと簡単にパスが作れる。`os`では
Openpyxl: Cell の結合
セルを結合するサンプルです。
結合前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/093db9a7-bfb5-8a61-9459-a77a9686545d.png)
結合後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/2354076b-ab4e-af97-3f92-121c64506fe3.png)
## プログラム
“`py:merge_cells_basic.py
#! /usr/bin/python
# —————————————————————
# merge_cells_basic.py
#
# Jun/14/2024
# ———————————————————
うるう年の判別方法
### この記事では、Pythonを使い、どの年が、うるう年になるかを判別したい。
### うるう年とは
うるう年は、1年が366日ある年です。そうでない年は、平年だ。
ここでは、うるう年を”Leap year”, 平年を”Standard year”として定義しておく。### うるう年のルール
1. 西暦年が、4で割り切れる年は、(原則)として閏年
2. 西暦年が、100で割り切れて400で割り切れない年は、平年
example: 2100年は、100で割り切れるが、400で割り切れないので、平年になる。
要するに、4年に1回ある夏のオリンピックは、うるう年に開催されています。### 西暦を受け取る
year = int(input(“year”))
西暦をinput関数で受け取り、int型に変換### うるう年かを判別
if year % 100 == 0 and year % 400 != 0:
print (“standard year”)elif year % 4 == 0:
print (“leap year”)else:
Selenium3をAWS lambda python3.8以上で動かす[AWS SAM]
# AWS LambdaでSelenium
webスクレイピングで便利なseleniumですが、サーバーレスと組み合わせると、APIやFTPが無くてもデータ連携させたりできるので、重宝しています。
ただLambdaでseleniumを動かすにはheadlessブラウザのchromiumと対応するchromedriverが必要で、バージョンによってはうまく(ほとんど)動かなかったりします。
とくにpython3.8以上ではLambdaのOSがAmazon Linux2で稼働するようになったため、seleniumがモジュール不足で動かなくなってしまい、従来のようにコード一式zipであげてといった方法が使えなくなりました。
私も業務で運用フローに組み込んでしまっているので、死活問題。python3.8だっていつまで使えるのか。(EOLを見よう)
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html
python3.8廃止は2024年10月14日、うん、すぐだね。:fearful:
というこ
IndentationError: unindent does not match any outer indentation level というエラー文に出くわす
# はじめに
FastAPIとstreamlitを使用して会議室予約アプリを作成していた際に困ったのでまとめます。
# 問題
“`
File “/Users/my_study/FastAPI/会議室予約システムAPI/app.py”, line 117
submit_button = st.form_submit_button(label=’リクエスト送信’)
^
IndentationError: unindent does not match any outer indentation level
“`
というエラーに出くわしました。
# 原因
調べるとインデントが誤った時に出るエラー文でした。自分のコードも単純にインデントが誤っていただけでした。
https://izanagi-portfolio-site.com/blog/articles/5tijnkzlq/#gsc.tab=0
# 解決
インデントを修正したらエラー解消されました。
PygameとPygletを同時に動かす(&初めてのPyglet備忘録)
pygletでキー入力やら表示やら出来るようになった後、アクションゲーム的なものを作成。最終的にpygameと組み合わせるまで。
……あと、pyglet使ってみて思ったけど、pygameよりもいいかも。
# 目次
– [動機](#いや何の意味があるねん)
– [初めてのpyglet](#初めてのpyglet)
– [とりあえず文字を表示して、四角形を動かす](#とりあえずpygletで文字を表示し四角形を動かす)
– [バッチを使う(Batch Rendering)](#バッチを使う)
– [コーヒーブレイク:OpenGL方式の描画](#コーヒーブレイクopengl方式の描画)
– [アクションゲーム的なものを作ってみる](#アクションゲーム的なものを作ってみる)
– [pygameと組み合わせる](#pygameと組み合わせる)
– [pygameのインストール](#とその前にpygameをインストールしなきゃ)
– [pygameの基礎](#pygameの基本)
– [pygletにpygameを合体](#が
PostgreSQL: SQL のサンプル (スキーマの一覧)
スキーマの一覧を表示する SQL
“`sql
SELECT schema_name FROM information_schema.schemata;
“`スキーマ名が sch で始まるものだけを選ぶ
“`sql
SELECT schema_name
FROM information_schema.schemata where schema_name LIKE ‘sch%’;
“`## Python 版
“`text:.env
user=’scott’
password=’****’
data_base=’*****’
“`“`py:select_schema.py
#! /usr/bin/python
#
# select_schema.py
#
# Jun/13/2024
#
# ——————————————————–
import sys
import os
import psycopg2
import psycopg2.extras
from dotenv impo
二部マッチング問題とは?
# 二部マッチング問題とは
二部マッチング問題とは、2つのカテゴリ含まれるノード間に辺がある場合に、最大何辺(何ペア)取れるかを考える問題である。
“`mermaid
graph TD
A1((A1)):::red –> B1((B1)):::blue
A1((A1)):::red –> B2((B2)):::blue
A2((A2)):::red –> B2((B2)):::blue
A2((A2)):::red –> B3((B3)):::blue
A3((A3)):::red –> B1((B1)):::blue
A3((A3)):::red –> B3((B3)):::blueclassDef red fill:#ffcccc,stroke:#ff0000,stroke-width:2px;
classDef blue fill:#ccccff,stroke:#0000ff,stroke-width:2px;
“`このような問題は例えば
– 男女のペアマッチング問題
– グリッドの盤面
PythonでGuess the Number Game を生成してみた
### この記事の目的は、”Guess the Number Game”、プログラムがランダムに数字を選び、プレイヤーがランダムに数字を当てるゲームをどのようにPythonで生成するか紹介するのが主旨だ。
## まずは、初期設定をする。
![Screenshot 2024-06-12 at 14.43.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518583/c21edaa2-95e1-2d67-72ca-6998579fd5f6.png)まずは、randomモジュールからrandint関数を使い、
指定された範囲内のランダムな整数を生成することができる。
次に、artというモジュールから、clear関数をimportする。ランダムに数字を選ぶのは、ユーザーにとって至難の技であるため、
今回私は、レベルを5つ設けた。Supereasyレベル: ユーザーが50回数字を失敗するまで、ゲームオーバーにならない。
Easyレベル: ユーザーが20回数字を失敗するまで、ゲームオーバーになら