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

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

機械学習の練習問題”あやめの分類”をやってみたよ

# あやめの分類

機械学習の有名な練習問題である、あやめの分類について実施してみます。 これは、花弁や萼片のサイズに関するデータセットをもとに機械学習のモデルを作成し、あやめ(iris)の種類を判定するものです。 機械学習の練習問題として有名なあやめのデータセットはFisher[^1]が1936年に報告した論文に載っているデータを用いたもので、 三種類のあやめ(Iris-versicolor、Iris-setosa、Iris-virginica)の花それぞれ50個体ずつの花弁の長さと幅(PetalLengthCm, PetalWidthCm)、萼片の長さと幅(SepalLengthCm, SepalWidthCm)についてまとめたものとなっています。 今回用いるデータセットは、機械学習の分野で有名なコミュニティである[kaggl](https://www.kaggle.com/)の[Iris Species](https://www.kaggle.com/datasets/uciml/iris)からダウンロードしております。

[^1]:Fisher, R. A. (1936) T

元記事を表示

Pythonを使ってIBM i でCSVファイルをJSONに変換する

# はじめに

以前の投稿で、IBM i 上でDBのデータをCSVに書き出す方法を書きました。
最近では、JSON形式でのデータを求められる事も増えてきており、CSVから変換しているという話も聞いています。
そこで、今回はCSVをJSONに変換する方法を紹介していきます。

CSVへの出力方法はこちらで書いています。
https://qiita.com/tom_m_m/items/660cb6ce0bafaeac832f

本記事は、IBM i 7.5 環境を元に記載しております。

# JSONへの変換方法

CSVファイルをJSONに変換する方法はいくつか考えられますが、Pythonで変換するのが簡単かと思います。
IBM iでもPASE環境であれば、Pythonも実行できるので全てIBM i上で完結してJSONファイルの書き出しまで行うことができます。

PASE環境へのアクセスは、以下になります。
– ACSからSSH端末を開く
– コマンドラインでsshアクセスする
– VSCodeなどを使ってアクセスする

どの方法でも大丈夫ですので、好きな方法で良

元記事を表示

<Python>xlsファイル群を読み取りシート削除

物流の現状分析を行うにあたり、月次に倉庫業者が提供する請求書データ、xlsファイルを大量に受領。

協力会社に情報共有を行うにあたり、受領した各xlsファイルのなかの、
シート「料率」部分のみを削除したかったため、下記コーディングを行った。

人を介してファイル提供してもらう場合、シートの順序が変わる場合もあるため、
シート名を指定して削除した。

“`
import xlwings as xw
import glob

#Excel画面を見せない
xw.App(visible=False)

for file in glob.glob(“*.xls”):
wb = xw.Book(file)
wb.sheets[“料率”].delete()
wb.save()
wb.close()
“`

元記事を表示

Python で業務システムからエクスポートした Shift-JIS とされているファイルを処理する際には cp932 として扱う方がよさげという話

## 概要

Pythonで業務システムからエクスポートしたShift-JISとされているファイルを処理する際、エンコーディングとしてcp932を使用することが推奨されます。これは、Shift-JISとcp932の間には微妙な違いがあり、特に日本語の一部の文字(一部の記号や特殊文字など)がShift-JISではなくcp932でしか正しく表現できないためです。そのため、エラーを避けるためには、Pythonでこれらのファイルを扱う際にはcp932として処理することが望ましいです。

`㈱`という特殊な文字を`shift_jis`エンコーディングで処理しようとすると、エラーが発生します。これは、`shift_jis`がこの特殊な文字をサポートしていないためです。このような問題を避けるためには、`cp932`エンコーディングの使用を検討してみてください。

“`python
import pandas as pd

data = [
{“col_1”: “㈱”},
]

df = pd.DataFrame(data)
df[‘col_1’] = df[‘col_1’].str.enc

元記事を表示

Databricks(Spark)にてタイムスタンプの文字列(例:`2024-02-19 13:35:24`)を扱う際に必要となる考慮事項

## 概要

Databricksでは、タイムスタンプの文字列(例:`2024-02-19 13:35:24`)を扱う際、クラスターのタイムゾーン設定が重要となります。例えば、タイムスタンプのタイムゾーンが`UTC`であるにも関わらず、Sparkの設定(`spark.sql.session.timeZone`)が`JST`になっていると、予期しない結果が生じる可能性があります。これを避けるための一つの戦略として、データエンジニアリングのフェーズでは全てのタイムゾーン処理を`UTC`で行い、BIツールなどでデータを参照する際に適切なタイムゾーンを設定するという方法があります。

Databricks(Spark)では、タイムスタンプ型のデータはタイムゾーン設定(例:`JST`や`Asia/Tokyo`)を考慮します。つまり、設定されたタイムゾーンに基づいて、タイムスタンプに対してタイムゾーンのオフセットが適用されます。例えば、`2020-01-01 00:00:00`というタイムスタンプを取得しようとした場合、タイムゾーンが`JST`に設定されていると、内部的には9時間加算され、`202

元記事を表示

DASH de ダッシュボード【1.概要編】

# 【概要】

DASHはPythonで書かれたウェブアプリケーションフレームワークで、データ分析等にも使われています。グラフやデザインはPlotlyやDash Bootstrap Componentsなどライブラリも使用できるため柔軟にカスタマイズも可能です。順次コードを紹介していくつもりです。今回はアプリについての説明になります。

# 今回紹介するダッシュボード【動画】


DASHはおそらくデータ分析で主に使われているのでファイルからデータを読み込んで様々なグラフで分析に用いているようです。
DASHでのリアルタイム処理の記事が少なく、コールバック出力処理が同一IDは一つまでしか使えない制限等もあり、実装にやや癖があります。(DASHはリアルタイムには向いていないかもしれませんFlaskとかの方がいいと思います)

# アプリについて【実装する機能】
(テーマ:PC情報をGUIで可視化してみる)

– 通信中IPアドレス、ポートを取得する

– プロセスやそれを起動している親プロセスも取得する

– 通信先サーバ

元記事を表示

Scaled dot product attention 計算の q と k の内積を q と k のユークリッド距離の逆数にしても学習します。

## はじめに

Transformer のことを勉強していたら、Scaled dot product attention の q と k の内積は、q と k の類似度を見ているという説明がありました。類似度なら、内積以外にも計算方法があるぞと思い、コサイン類似度とユークリッド距離を試してみました。コサイン類似度は距離の情報がなくなるということで学習には使えないようです。ユークリッド距離の逆数を使うと学習することが分かったので、ご報告させていただきます。

## Scaled Euclid Distance Attention クラス

“`python
import torch
import torch.nn as nn

num_batch = 8
q_seq = 300
k_seq = 100
dim_hidden = 512
num_heads = 8

func2 = ScaledEuclidDistanceAttention( dim_hidden, num_heads )

q = torch.randn( ( num_batch, q_seq, dim_hidde

元記事を表示

Python venvの使い方

Pythonの仮想環境は使わずに来たんだけど、f文字列の仕様が良くなったVer. 3.12を使いたくなって、仮想環境に手を出すことにした。venvを使おうとしたら、きちんと説明しきっているものが少なかったので、確認した結果を以下にまとめます。

# venvとは

– pythonに標準で入っている仮想環境構築ツールであるゆえ、追加インストールが不要
– シンプルな仕組みとなっていて理解し易い
– ライブラリーのインストールなどには、pipが標準状態と同じ様に使える

# 仕組み

– 仮想環境構築時に、指定ディレクトリーの下に、Pythonインタープリターの実行ファイルをコピーするかシンボリックリンクファイルを作成するかし、ライブラリーのsite package用ディレクトリーを空の状態で作成する
– その際に、その実行ファイルのディレクトリーやライブラリーのディレクトリーを使うように環境変数を設定するスクリプトファイルを生成する
– また同時に、仮想環境構築前の環境変数の設定に戻すためのスクリプトファイルも生成する
– 仮想環境に関わる設定を記録したファイル“`pyvenv.cf

元記事を表示

ラズパイ5 2023年10月更新 bookworm ④ 気圧センサBME280をデバイス・ドライバで利用

 [第2回目](https://qiita.com/jamjam/items/c34dcfd59d1ac624d925)は、気圧センサLPS22HBを利用し、I2Cバスのアクセスは、smbus2ライブラリを利用してpythonで記述しました。

 ここでは、気圧センサBME280を利用します。温度、気圧、湿度が読み出せます。LPS22HBのつながっているI2CバスにStemma QT/Qwiicコネクタで増設します。LPS22HBをつなげたままにしているのは、外すのが面倒だっただけで他意はありません。両端がStemma QT/Qwiicコネクタのケーブルは市販されています。ラズパイのI2Cピン付近にStemma QT/Qwiicコネクタのメスが付いた製品もどこかで見かけました。

![bme260-b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/05e229f6-5b00-66eb-d118-d777defeb284.png)

 BME280は、ラズパイにはデバイス・ドライバが用意さ

元記事を表示

信じられるのはsetuptoolsだけ ― Stub-only packageを初めて作った話

## 結論
Stub-only packageを作るときはsetuptoolsを使いましょう。

## Stub packageとは?
Stub package は [PEP-561](https://peps.python.org/pep-0561/)で定義されるパッケージの形態です。
主にThird partyのライブラリに対してType hintを与えることを目的としたPEPです。

Type hintがあればVS Codeなどエディタから引数リストやメンバ変数の補完などの支援が得られる他、mypyやpyrightによる静的型チェックの支援を受けることができます。
一方で、歴史的な理由やC++,Cythonを利用しているパッケージでは型ヒントが付けられていない場合があります。
自分が管理するライブラリであれば色々な手段 [^1][^2] で型ヒントを付与すれば非常に便利です。

しかしながら、先述の通りThird partyのライブラリの場合、ライブラリのコードを変更せずに型ヒントを付ける必要があります。
Pythonにはそのための方法が定義されており、それが [PEP-561]

元記事を表示

Python: PyPDF で page 分割する際は、add_page() ではなく、append() を使わないとファイルサイズが小さくならない

# 背景

あるデモプログラムにて、PDF を page 分割処理にて、pypdf が使われていたが、
何故か分割したファイルのサイズが、分割前と変わっていなかったので、調査した記録

# 結論

– [add_page()](https://pypdf.readthedocs.io/en/stable/modules/PdfWriter.html?highlight=add_page#pypdf.PdfWriter.add_page) は、コンテンツ保持したまま、page を追加するのでファイルサイズは元ファイルとほぼ変わらない
– [append()](https://pypdf.readthedocs.io/en/stable/modules/PdfWriter.html?highlight=add_page#pypdf.PdfWriter.append) は、対象ページだけの追加になるので、ページ分割すればちゃんと**小さくなる。**

ということで、append() を使おうってだけ

:::note warn

– [PdfMerger](https://pypdf.rea

元記事を表示

【Python】大きなSQLファイルを複数の小さなSQLファイルに分割する方法

# 概要
ある大きなSQLファイルを複数のSQLファイルに分割したいという必要性が生じたので、Pythonプログラムで実装しました。
分割したいSQLファイルがたくさんあるとプログラムで一括処理した方が早いですよね。

## 前提
前提として、どのSQLファイルも`INSERT INTO…`各SQLステートメントから始まるものとします。
また、分割した際のファイル名は`01_insert.sql`、`02_insert.sql`…といった形で連番のファイル名にして行きます。

# サンプルコード

“`py
import os

def split_sql_file(file_path):
dir_path = os.path.dirname(file_path)

with open(file_path, ‘r’) as f:
lines = f.readlines()

insert_file_counter = 1
insert_file = None

for line in lines:
if

元記事を表示

discord pyで簡単にメッセージリンクを検知して埋め込みが表示されるbotの作り方

今回はメッセージリンクをサーバーに送信するとこんな感じに埋め込み(embed)が送信されるbotを作っていきます。
![スクリーンショット 2024-01-04 124632.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3044030/8e875be8-1e4e-cc12-0ac4-1b85abf7d206.png)
# 具材(用意するもの)
python (ver3.9以上を推奨)
discord py
# 作り方
まずは基本のソースコードを貼り付けます。
~~~python:sample.py
import discord
from discord.ui import Button, View

lass SampleView(discord.ui.View):
def __init__(self, timeout=None):
super().__init__(timeout=timeout)

@bot.event
async def on_message(mess

元記事を表示

[python / transformers] M2 Mac 上で pip install transformers できない問題の対策

# 概要

`pip install transformers` しようとしたところ、この人と同じ問題で、

https://github.com/huggingface/transformers/issues/2831#issuecomment-1906165500

以下のようなエラーが発生した(; ・`д・´)

# 発生したエラー

“`bash:mac terminal
$ pip install transformers==4.21.2

…(略)

error: `cargo rustc –lib –message-format=json-render-diagnostics –manifest-path Cargo.toml –release -v –features pyo3/extension-module –crate-type cdylib — -C ‘link-args=-undefined dynamic_lookup -Wl,-install_name,@rpath/tokenizers.cpython-310-darwin.so’`

元記事を表示

wsl上でpyenvを用いた環境構築

# ライブラリ
“`
sudo apt update
sudo apt upgrade -y
“`

↓pyenvの依存ライブラリ

“`
sudo apt install libffi-dev zlib1g zlib1g-dev libsqlite3-dev make gcc

sudo apt install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
“`

# pyenv

https://github.com/pyenv/pyenv?tab=readme-ov-file#basic-github-checkout

“`
echo ‘export PYENV_ROOT=”$HOME/.pyenv”‘ >> ~/.bashrc
echo ‘command -v pyenv >

元記事を表示

MobileVLM V2の学習を日本語データで試してみる

# はじめに
LLMをデコーダとして使用した、Vision-Language Model(以下VLM)が[MiniGPT-4](https://arxiv.org/abs/2304.10592)や[LLaVA](https://arxiv.org/abs/2310.03744)をきっかけに様々なモデルが発表されています。

また、最近ではより小さなLLMを使用した、[TinyGPT-V](https://arxiv.org/abs/2312.16862)や[MobileVLM](https://arxiv.org/abs/2312.16886)等も発表されています。

色々な手法が提案されている中、2024年2月上旬に発表された[MobileVLM V2](https://arxiv.org/abs/2402.03766)がProjectorに工夫を入れることで推論速度や学習効率を改善していて個人的に面白いなと感じたのでモデルのアーキテクチャについて紹介していきます。

紹介するだけでは面白くないので、本記事では日本語による学習を試してみて簡単にLLaVA-1.5のアーキテクチャとの性

元記事を表示

今更だが、Gemini APIを無料で発行して使ってみよう

右も左もわからずの自分がやってみて面白かったとか、備忘録とかにした方がいいと思った物を記事にしたものなります。もし、必要な方にいらっしゃったら、この記事が役に立てたら嬉しいと思います。
* * *

## なんだと?Gemini APIが無料?
OpenAI社のChatGPTのAPIは初回限定かつ、期限ありで20ドルの枠まで使えたことに対し、GoogleのGeminiはいくつかの制限はあるが無料で使えると発表していた。これを用いれば自分のおもちゃ用ボットとかも作れるわけなので、早速APIしないと思った。

## 無料の枠でできること
以下のイメージを参照
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714030/a27c8968-22f8-db2d-891b-b779986c1e9b.png)

## まず、Gemini APIのkeyを発行しよう
以下のページからGemini ProのAPI Keyの申し込みができる
[Gemini Pro APIの申請ページ](https://

元記事を表示

MultiIndexの解除と設定方法(pandas)

# `MultiIndex`って?
MultiIndexとはこんな感じのやつです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3655949/fa2433f5-45ba-9e34-4ea2-a6cbbf72c7d4.png)

これがうっとうしくて、解除方法を調べたので。

# 【解除方法】

`df`の`列名`あるいは`行名`に対して上書きする。以下に2通り示す。
“`python
#Indexの場合
df.index = df.index.get_level_values(0)
df.index = df.index.droplevel(1)

#Columnの場合
df.columns = df.columns.get_level_values(0)
df.columns = df.columns.droplevel(1)
“`

`.get_level_values( )`の括弧の中の数字は、MultiIndexの残したい階層を指定する。一番上の階層が`0`、下の階

元記事を表示

サブモニターで表示する用の、簡単なmdメモ閲覧GUIアプリをpythonのCustomTkinterで作成した。

# はじめに
競技プログラミングを始めました。まだまだ初心者ですが、
– 標準ライブラリや自作したライブラリの仕様を見返したい
– 有名なアルゴリズムのメモを残したい

等と思うことが増えてきました。
今まではtexを利用してメモを取っていたのですが、量が増えてくるとpdfでは情報を探し辛く、またtex自体書くのが面倒に感じてきたためmdに乗り換えることを決めました。
この乗り換えを機にして長期休みの暇つぶしがてらに今回作成したのが**手元でいつでも見られるカンニングペーパー的なメモアプリ**です。

本記事では実行例から順を追って説明します。ソースコードだけ欲しい方は最後の方にスクロールしてください。

# 実行例
GUIを立ち上げると以下のようなページが立ち上がります。

本プログラムでは特定のディレクトリにあるmdファイ

元記事を表示

筋トレを継続したい!(AWS Lambda × Python × ChatGPT でLINEbot作成)

# 筋肉ムキムキになりたい!!
1度くらい筋肉には憧れたことはあるだろう…
そしてトレーニングを始める人もいるだろう…
しかし、続かない…
そこで、筋トレを継続するための、**筋トレbot**を作成しました!

# 開発環境
AWS Lambda
Python 3.12

# トレーニングメニュー
トレーニングメニューを自分で考えるのは面倒ですよね。
そこで、ChatGPTにお願いして、トレーニングメニューを考えてもらおう!

![image0 (1).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682615/74b9ba69-6594-941d-ffde-ac88146299e2.jpeg)

いい感じのメニューを提案してくれましたね。

# 筋トレ後は褒めてもらおう
ただトレーニングをこなしていくだけだと、モチベーションが保てませんよね。
トレーニングが終わった後は、トレーニングしたことを報告して、褒めてもらおう!

![image1.jpeg](https://qiita-i

元記事を表示

OTHERカテゴリの最新記事