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

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

Looopでんき スマートタイムONEの価格情報を取得する方法

こんにちは。
我が家ではLooopでんきという基本料がタダで時間によって料金が変わるものを使ってみます。
なにかで価格情報を取得できたらいいなと思い作ってみました。

# !!警告!!
:::note alert
この記事ではLooopでんきの**非公式API(公式のサイトだけど公式から案内されていない)** を利用しています。利用規約はよく見ていませんがなにかに触れるかもしれません。また、なにかあっても公式からのサポートはないので自己責任でお願いします。
:::

# データがどこに有るか探す
下の公式ページからでんき予報が見れます。

https://looop-denki.com/home/denkiforecast/

エリアを選択すると今のkWhあたりの価格とその後の価格が見れます。
明日の単価は前日の16:00から反映されるようです。

# でんき日和等の算出条件
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518724/391fc156-f5e9-9e91-1c9a-2

元記事を表示

Engine Simulatorの作法 その11

# 概要
Engine Simulatorの作法を調べてみた。
githubでエンジンジェネレータ見つけた。

# サンプルコード

“`
def generate_v69():
cylinders0 = []
cylinders1 = []
cylinders = []
for i in range(34):
cylinders0.append(i * 2)
cylinders1.append(i * 2 + 1)
cylinders += [i * 2, i * 2 + 1]
cylinders0.append(68)
cylinders.append(68)
b0 = engine_generator.Bank(cylinders0, -34.5)
b1 = engine_generator.Bank(cylinders1, 34.5)
b1.flip = True
engine = engine_generator.Engine([b0, b1], cylinders)
engine.engine_name = “V69”
engine.s

元記事を表示

Engine Simulatorの作法 その10

# 概要
Engine Simulatorの作法を調べてみた。
githubでエンジンジェネレータ見つけた。

# サンプルコード

“`
def generate_v24():
cylinders0 = []
cylinders1 = []
cylinders = []
for i in range(12):
cylinders0.append(i * 2)
cylinders1.append(i * 2 + 1)
cylinders += [i * 2, i * 2 + 1]
b0 = engine_generator.Bank(cylinders0, -45)
b1 = engine_generator.Bank(cylinders1, 45)
engine = engine_generator.Engine([b0, b1], cylinders)
engine.engine_name = “V24”
engine.starter_torque = 400
engine.crank_mass = 200
engine.generate(

元記事を表示

Engine Simulatorの作法 その9

# 概要
Engine Simulatorの作法を調べてみた。
githubでエンジンジェネレータ見つけた。

# 参考にしたページ

https://github.com/ange-yaghi/engine-generator

# サンプルコード

“`
def generate_i4():
cylinders0 = []
cylinders = [0,2,3,1]
for i in range(4):
cylinders0.append(i)
bank = engine_generator.Bank(cylinders0, 0)
engine = engine_generator.Engine([bank], cylinders)
engine.engine_name = “I4”
engine.starter_torque = 400
engine.chamber_volume = 70
engine.generate()
engine.write_to_file(“i4.mr”)

“`

# 実行結果

“`
import “engine_s

元記事を表示

【Qt Designer】mMapLayerComboBoxのフィルター、バグ解消方法

Qt DesignerのMapLayerComboBoxにフィルターを設定するとエラーになるバグ?の解消法について、受け売りですが共有します。

# 方法

Qt Designerでフィルターをかけるのではなく
plugin名.pyに以下コードを追加してください。

“`プラグイン名.py
from qgis.core import QgsMapLayerProxyModel

def run(self):
#この場合はラインレイヤのみ表示
self.dlg.mMapLayerComboBox.setFilters(QgsMapLayerProxyModel.LineLayer)
“`
プラグインを使った際のみ適用される為、エラーが発生しないみたいです。

引用元:https://github.com/qgis/QGIS/issues/38472

元記事を表示

sin140°+cos130°+tan120°「2015 防衛医科大学校 看護学科【3】[1]」をChatGPTとsympyとWolframAlphaでやってみたい。

・以前、やった事があるかも。

# オリジナル
・大学入試数学問題集成 様>【3】[1]テキスト

https://mathexamtest.web.fc2.com/2015/201520110/2015201100300mj.html#top-0306

# ChatGPT-3.5先生へ(1回目)

大学入試数学問題集成 様> 【3】テキスト

・ページのソースを表示です。MathMLです。
 省略しようと思いましたが、大学入試数学問題集成 様 の全文から必要部分の抜粋です。
“`

2015 防衛医科大学校 看護学科

易□ 並□ 難□

<

元記事を表示

Whisperをローカル環境で使用する方法について

ビジネスシーンでもプライベートでも、文字起こしをする機会は多いです。

例えばYouTubeの動画の音声を文字にして出力したい時、会議の議事録を作成する時などで、記事を書く際の参照元はインターネット上のテキスト情報になることも多いですが、場合によってはYouTubeの方が詳しく説明されていたり、わかりやすかったりするので、動画を参照して文章を書くケースも近年は増加しています。

また、文字起こしをすることでプレゼンテーションを記録してスキルアップに役立てることが出来たり、プレゼンの内容をテキストで振り返ることができたりするなど、数多くのメリットがあります。

しかし、手動による文字起こし作業は人間に強いる負担が大きいのも事実です。

私は若い頃のサラリーマン時代、製造業で人事総務関係の仕事や、製造現場の安全衛生管理業務などを長くやっておりましたので、会議や各種委員会の議事録作成は全て自分に回ってくる仕組みになっておりまして、それだけで徹夜したこともありました。

動画音声の文字起こしにしても、動画を視聴しながらその音声に合わせてキーボードを叩いて文字起こしをすることも可能ではあります

元記事を表示

Selenium(Selenium-wire)をDockerで動かす(アプデ対応、要考慮項目)2024年6月最新版()

## 本稿執筆の経緯と目的
自宅で動かしているクローリングシステムのリプレイスを行おうと考えました。
### 現環境
– 自宅Linux端末(hpのビジネス向け小型マシン、i5-4870Uみたいなモデル)
– 単一ディレクトリにPythonスクリプトやSQliteのDBをひとまとめにしてvenvかpyenvで仮想環境を都度立ち上げ・・・というのをシェルスクリプトにまとめてcronjobで起動時に実行するように設定(ダブって起動しないような監視含む)

#### 現環境の問題点
– コードのCI/CDなんてあったものではない(もともと変更やアプデを前提にしていないが)
– なぜか最近、起動していると重くなる現象が発生→1時間に1回本体ごと再起動する強制措置で延命→情報の取りこぼしなどが発生

### 新環境
– 自宅Linux端末(nipogiとかいうよくある小型PC、中華ではまだ見る方、N100なのでTDPとスペック比は最高)←この端末がどうこう、という記事ではないです。今はTDP低くスペック(passmarkで6000↑)もLinux端末なら過剰くらいのものが安く買えていいぞ、という

元記事を表示

スクレイピングでのデータ収集を並列処理で高速化する!

# はじめに
スクレイピングを用いて、データ収集するコードを作成する機会があり
(これも別途記載できればと思います…)
そのデータ収集を、並列処理を用いて高速化することを試みました。
今回は、「スクレイピングでの認証に関する問題」と「並列処理について調べたこと」の2点をまとめていきます。
どちらの内容とも初学者ですので、誤植などあればアドバイスいただけますと幸いです。

# スクレイピングでの認証に関する問題
データ収集についてですが、
[SSLエラーに対する対応まとめ](https://jun-systems.info/articles/python-ssl-error/) を参考に修正しました。

認証エラーが発生したコード

“`python:get_data
import pandas as pd
import requests, ssl, urllib3
from retrying import retry

df = pd.read_excel(“ここは該当ファイル名を入れてみて”)

@retry(stop_max

元記事を表示

Pythonのrequirements.txtをなるべくちゃんとする

# 概要

Pythonをいじっていたら、`requirements.txt`に出くわすことがある。

(ホントかよ? みんなどうやってこういうの覚えるんだ?)

## requirements.txt
requirements.txtには、Pythonプロジェクトで必要なパッケージとそのバージョンをリスト化したテキストファイルが記述されている。

例えば

“`
fastapi==0.70.0
uvicorn==0.15.0
lanarky==0.8.4
“`

といったようなものだ。

このリストがあれば、必要なパッケージをこういうコマンド一つでインストールできる。

“`
pip install -r requirements.txt
“`

## 今使っているパッケージのバージョンの確認
今どのバージョンを使用しているかは、

“`
pip freeze > requirements.txt
“`

で知ることができる。

ただし、依存パッケージも含まれていてきれいではない。

![image.png](https://qiita-image-store.s3.a

元記事を表示

【Python】NotImplementedError: isna is not defined for MultiIndex

## 起きたエラー
seabornでbarplotしようとした際に以下のエラーに遭遇。
“`NotImplementedError: isna is not defined for MultiIndex“`

実行したコードは以下(データは某Titanicを使用):
“`python
data_count = train.groupby([“Sex”,”Survived”])[“Survived”].count()
sns.barplot(x=data_count.keys(), y=data_count.values)
plt.show()
“`

どうやら、data_count.keys()の戻り値がMultiIndexになっているらしい。
※groupbyで2つカラムを入れるとMultiIndexになるっぽいですね。

## 解決法
MUltiIndex.to_flat_index()を使うとOK!
※MultiIndexではなくIndexを使わないといけない。
“`python
data_count = train.groupby([“Sex”,”Survived”]

元記事を表示

GStreamer付きOpenCVをビルドしてほかのパソコンにコピーする(Windows)(py3.xにマルチ対応)

## はじめに
`pip install opencv-python`でインストールできるopencvにはGStreamerがついておらず、これを使ってrtspストリームをVideoCaptureするとラグがひどくてとてもリアルタイムとは呼べません。そこでGStreamerを使うために自前でビルドする必要が出てきますが、ビルドを完了すると**20~30GBくらいディスクを食われます**。こんなのよくないし、他のマシンにコピーだってできません。
この記事では、ビルドしたopencv(cv2フォルダ)を**コピーするだけで他のマシンでも使用でき**、ビルドに使ったファイルを削除しても問題ないように仕上げます。最終的に600MBくらいになりました。もっと詳しい人ならもっと小さくできるかもしれません。
また、僕の身の回りではpythonバージョンが乱立してるので、マルチバージョン対応(といってもそれぞれのバージョン用のビルドするというやっつけ仕様だが)にします。(ラップトップがPython3.9、仕事用PCには3.10、自宅用PCには3.11がインストールされちゃってます)

## ビルドに必

元記事を表示

Phi-3-miniをFine-Tuningしてみる。

## はじめに
以前から気になっていたFine-Tuningをやってみます。
色々ありますが、今回はReFTという手法で簡単にPhi-3-miniをFine-Tuningしていきます。

https://arxiv.org/abs/2404.03592

環境はGoogle ColaboratoryのT4で実行しています。

## ReFT(Representation Finetuning)とは?
ReFTは、事前学習されたモデルの表現力を最大限に活かしながら、特定のタスクに適応させるための微調整技術で、以下のような特徴を持っています。
– 柔軟性: 様々なモデルやデータセットに適用可能
– 効率性: 微調整のための計算コストが低い
– 性能向上: 特定のタスクに対して顕著な性能向上を実現

LoRAに近い手法のようです。

## Fine-Tuningの実行
step-by-step guideの通りに進めていきます。

https://github.com/stanfordnlp/pyreft

pyreftのインストール
“`bash
!pip install git+ht

元記事を表示

Amazon Bedrock Converse API と Tool use を知識ゼロから学び,発展的なチャットアプリを実装する

## はじめに

最近 Converse API を叩きすぎて,毎日`throttlingException`を出している[@ren8k](https://qiita.com/ren8k) です.
先日,Amazon Bedrock の [Converse API](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html) と [Tool use](https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html) (function calling) を利用した Streamlit チャットアプリ(デモ)を作成し,以下のリポジトリに公開しました.本記事では,チャットアプリ開発の過程で得た知見を基に,初学者から上級者までを対象として,Tool use の仕組みやその利用方法,発展的な活用方法を共有いたします.

https://github.com/ren8k/aws-bedrock-converse-app-u

元記事を表示

フィボナッチのロジック最適化

フィボナッチに慣れてきました。
ここまで来ると最速を知りたくなります。
最近の最速はどうやら固定行列を使った繰り返し自乗法の極まったやつなようです。
バイブルはこちら。

https://www.nayuki.io/page/fast-fibonacci-algorithms

今日はこれを読み解いていきます。

### Textbook recursive(教科書的な再帰)

よく書かれているコードですね。再帰で計算するやつで絶望的に遅く、スタックオーバーフローしちゃうやつです。黄金比を使った計算も出来ますが、誤差が発生するため実用には向きません。

“`python
import timeit

def fibonacci(n):
if n < 2: return n else: return fibonacci(n-2) + fibonacci(n-1) def measure(n): t = timeit.timeit(f'fibonacci({n})', globals=globals(), number=1)

元記事を表示

ラズパイでスマートロック作ってみたV2

# はじめに
カバンから鍵出すのって面倒ですよね。そして急いでいると閉め忘れることもありますよね。そんなあなた(私)のためのスマートロックを作ってみました。V1と機能面では大した代わりはありませんが、ろくにSlack使っていないのにSlack依存している状態から脱却したかったのと勉強を兼ねて作りました。
V1はこちら
https://qiita.com/akimax74/items/6856e936946fdf2da853

# 使ったもの
### ハードウェア
– Raspberry Pi Zero
– サーボモーター SG92R
– タミヤ ユニバーサルアームセット
### ソフトウェア
– Python
– Flask
– ngrok
– SQLAlchemy
# コード
https://github.com/akimax74/SmartLock_v2
# 説明
まずユーザー登録は/add_userに自分が設定しているパスワードと適当なユーザー名を叩くとUUIDを発行します。/lockまたは/unlockにUUIDを載せて叩くと鍵の操作が行えるという簡単な設計です。ngrokは

元記事を表示

Raspberry Pi&Webカメラで監視カメラを開発【LINEへ通知】

# はじめに

– 家に眠っていたRaspberry Piを使って何か開発したい.
– 一人暮らしに向けて家に侵入者がいないか監視したい.

こんなことを思い,Raspberry Piとwebカメラを使って監視システムを開発しました.
他のセンサーを使わずに,部屋に侵入者がいた際にカメラで撮影し,Lineに通知することができました.

# 概要
基準となる通常時の画像を撮影し,画像のフレームに変化があった際に撮影を行い,LINEに通知します.

![20240608_125443.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1776719/560b1e4f-3490-0002-b7b5-e19a6505ac4d.jpeg)
通常時の画像

![20240608_125614.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1776719/1dd60a44-2638-7ed5-d9e8-e

元記事を表示

【入門者・非専門家向け】AIプロジェクトに関わるにあたって抑えておきたい基礎知識・専門用語集

## プロジェクトの大別
AIプロジェクトは「予算」・「開発にあたって必要なスキル」・「リスクマネジメント」などの視点から、下記の3つに大別することができます。
“`
・生成AIツールの活用(ChatGPTなど)
・DeepLearningを用いた開発
・ルールベースAIやDeepLearning以外の機械学習
“`

以下、3つそれぞれの特徴や大まかなプロジェクトの大まかな進め方・注意点についてまとめます。

### 生成AIツールの活用(ChatGPTなど)
ChatGPTやGemini、Stable Diffusionなど、昨今は様々の会社から多くのAPIが提供されています。このようなAPIの活用によって、AI導入を行う事例が近年増えています。

#### 特徴
基本的にはWeb画面やAPIを使う、LoRAやプロンプトエンジニアリングによって出力を制御する。

#### プロジェクトの進め方
1. 実際にAPIを試す
2. 試した中から目的に合ったAPIを選定する(利用規約には注意)
3. 業務に導入する(業務内容に合わせて画面だけ作成する場合も含む)

#### 注意点

元記事を表示

RSA暗号をPythonで作ってなんとなく理解する

## 目的
RSA暗号の細かい理論などは全部すっ飛ばして、とりあえず何となくの動きだけ理解しようといった記事になります。

## RSA暗号の原理
RSA暗号では二つの大きな素数$p, q$に加え$(p-1)(q-1)$と互いに素な正整数$e$を用いる。

### 暗号化
まず初めに、暗号化を行うための鍵(公開鍵)を作成する。公開鍵は$n$と$e$の二つであり$n$は以下のように求められる。
“` math
n = pq
“`

次に、公開鍵$e$, $n$を用いて暗号化を行う。$n$より小さい正の整数$M$を送ることを考えると、暗号化された文$M’$は以下のように表される。
“` math
M’ ≡ M^e (mod n)
“`
つまり、$M^e$を$n$で割った余りが$M’$となる。これで、RSA暗号を用いて文章を暗号化することができた。

### 復号
次に復号を行っていく。まず初めに、復号を行うための鍵(秘密鍵)を作成する。秘密鍵は以下のように表される。
“` math
ed≡1 (mod (p-1)(q-1)) を満たす正の整数
“`
つまり、$(

元記事を表示

特徴量を標準化しないとどうなるか分かりやすくしてみた

よく機械学習を使う前に特徴量を標準化ないし正規化をして単位を統一しろと言われると思います。
それについて実際に単位を統一しないとどうなるか、今回は機械学習ではなくユークリッド距離(多次元の三平方の定理だと思っていただければ)を用いた1近傍法を使って説明してみようと思います。
# 標準化をしない場合
“`Python3
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
import pandas as pd
import numpy as np

df = pd.read_csv(“wine.csv”)
y = df[“Wine”].values
x = df.drop(“Wine”, axis=1).values

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1)

y_pred = []
for i i

元記事を表示

OTHERカテゴリの最新記事