- 1. AiFlowと DAG内でできるタスク生成について超ざっくり書いてみる
- 2. MacBook(M2)にインストールしたStable DiffusionのAPIをPythonで呼び出して画像を生成してみた
- 3. ABC311、F問題の初心者的解説
- 4. 複数の.MTSファイルを.MOVや.MP4に一括で変換する
- 5. Disjoint Setの計算量
- 6. 【Python】Pandasを利用して、同じ数値から始まる二つのCSVファイルの中身を一瞬で結合する方法
- 7. PyQtを用いて端末を作成する
- 8. Python 学習1日目
- 9. asyncとawaitの基本的な使い方
- 10. Pyhon 辞書(dict)のループ処理(for)をするときのメソッド(keys(),values(),items())の使用例
- 11. python-note(1:Text処理)
- 12. python-note (基本系)
- 13. 【Python】ttkbootstrapを使用してGUIアプリ作ってみた!
- 14. Python3でクラス変数をオーバーライドする関数を作成する
- 15. matplotlibで日本語を表示する方法
- 16. Python初心者の備忘録 #05
- 17. pythonでAWS Lambda を使った、どんなプロジェクトでも使える共通基底クラス群の雛形を書いてみた
- 18. VSCodeでJupyter Notebookを使う
- 19. 個人用scikit-learn
- 20. コーディングテストで便利だと思った機能 (Python)
AiFlowと DAG内でできるタスク生成について超ざっくり書いてみる
# AirFlowとは?
一言で表すと **実行タスクのワークフロー管理プラットフォーム**です。
対応言語はPythonのみです。(2023/07時点)「DAG」と呼ばれる、AirFlow上でPythonコードを実行するための書き方を使用してます。
もう少し詳しく書くと、
Pythonコード内で処理タスクを生成し、各タスクに依存関係を持たせます。
AirFlowはワークフローを管理してるので、「DAG」で定義されたタスクを順番に実行している、ということです^^# タスクの生成
処理したい内容によって、**動的**にタスクを生成、**静的**にタスクを生成することを使い分けましょう。##### 静的にタスクを生成したい場合
主に日次で動かすチェック処理や、スナップショット作成や、簡単な単体テストで用いることが多いです。
・処理の内容が固定で決まっている場合
・処理するデータが単一の場合##### 動的にタスクを生成したい場合
外部から複数データが連携される場合や、洗い替えDBの登録データ数に応じてなど、ユーザー起因で処理が実行されるケースで用いることが多いです。
MacBook(M2)にインストールしたStable DiffusionのAPIをPythonで呼び出して画像を生成してみた
[Supership](https://supership.jp/)の名畑です。今期アニメの[AIの遺電子](https://ai-no-idenshi.com/)が原作連載開始されたのは8年近く前なわけですが、現代においては、さらに迫って感じられます。
## はじめに
前回の記事[Stable Diffusion web UIをMacBook(M2)にインストールして画像の生成をしてみた記録](https://qiita.com/nabata/items/81dcc430aa03fc0b0f45)では**web UI**(ブラウザ)を経由して[Stable Diffusion](https://ja.stability.ai/stable-diffusion)の画像生成を行いました。
今回は**web UI**を経由せずに、PythonからローカルのAPIを叩いて画像の生成を行ってみます。
## 環境設定
[前回の記事](https://qiita.com/nabata/items/81dcc430aa03fc0b0f45)で行った環境構築が完了していることが前提です。
ABC311、F問題の初心者的解説
# 0. はじめに
AtCoder Beginner Contest 311(ABC311、トヨタ自動車プログラミングコンテスト2023#4)のF問題について、解説を読んでもよく分かりませんでした。初心者的に樹形図的に考えてなんとかACしたので、自分で解説を書いてみました。
本記事の内容は、つぎのとおりです。
1. 問題設定、「美しいグリッド」について
2. 樹形図による数え上げ(辞書型で実装)
3. テーブル中の累積和による高速化
4. 終わりに# 1. 問題設定、「美しいグリッド」について
美しいグリッドの定義からは、解法に必要な以下の二点が導かれます。
* 各列の最も上にある「#」の位置が必要。
* 各列を左から右($j$の増加方向)に調べる。問題文の定義から、美しいグリッドは直角二等辺三角形の近似表現である事が分かります。ある一点 $(i, j)$ が「#」ならば、その下 $(i+1, j)$ と右下 $(i+1, j+1)$ が「#」となり、これが下方($i$増加方向)へ延々と続きます。この直角二等辺三角形の形状、加えてそれが複数重なってできる鋸歯状の形状が数え
複数の.MTSファイルを.MOVや.MP4に一括で変換する
## 背景
AVCHD内の.MTSファイルをmp4に一括変換したかったのですが、フリーソフトにろくなもんがないため、chatGPTに教えてもらいながらpythonでそれを実行できるコードを書きましたffmpeg(v6)を使用しているので、ffmpegが対応してるコーデックならなんでも変換できるはず(未検証)
## 簡単な機能説明
・指定ディレクトリ内の.MTSファイルを.mp4に変換して別の指定ディレクトリに置く
・その際ファイル名は動画ファイルの撮影日時を使用(2023-07-25-14-32.mp4みたいな)
・コマンドラインで簡単めに実行できるといい## 前提
Macで動くことを確認してます(一応windowsでも動くはず)
pythonのバージョンは`3.11.4`です## セットアップ
1. 任意の場所に`mp4-converter.py`を作成する
2. 下記のコードを貼り付け後保存
“`python
import os
import argparse
import datetime
import platform
from tqdm import tqdm
Disjoint Setの計算量
# 1. Introduction
競技プログラミングで度々出てくるDisjoint Setの計算量が気になったため、計算量を求めてみた。# 2. Algorithm
Disjoint Setは下図のようなノードの要素が互いに素な集合(1つのノードが複数の集合に属することのない集合)を持つデータ構造である。構築は以下の操作に基づく。詳細のアルゴリズムは後述に記載する。
– make-set($n$):各集合にノードがただ一つのみの$n$個の集合を用意
– find-root($x$):ノード$x$のrootノードを取得→ノード$x$がどの集合に属するかを判別
– union($x, y$):ノード$x$とノード$y$を合併![スクリーンショット 2023-05-31 23.56.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656963/f2752c75-c11d-8184-dc91-8310bdd200e1.png)
※改良によって削除に対応したアルゴリズムは[こちら](http:
【Python】Pandasを利用して、同じ数値から始まる二つのCSVファイルの中身を一瞬で結合する方法
# 概要
同じ数値から始まる二つのCSVファイルの中身を、横方向(列方向)に結合するコードを実装しました。### 前提
`hoge`ディレクトリにある`XXX_output.csv`と、`foo`ディレクトリにある`XXX_2_output.csv`を結合して、一つのCSVファイルを作成します。`XXX`には同じ数値が入ります。“`
例:1234567890_output.csv
1234567890_2_output.csv
↓
結合
↓
1234567890_data.csv
“`結合して作成されたCSVファイルは、ディレクトリ`combined`に`XXX_data.csv`の形で保存するものとします。
# サンプルコード解説
“`py
import os
import pandas as pdhoge_dir = ‘hoge’
foo_dir = ‘foo’
combined_dir = ‘combined’# 出力先ディレクトリを作成
os.makedirs(combined_dir, exist_ok=True)# hogeディレクトリ
PyQtを用いて端末を作成する
# はじめに
PyQtの日本語資料の少なく,外国語やQtのC++で書かれたコードを参考に作成せざるを得なかったため作成しました.
参考になれば幸いです
擬似端末として使用する方法を追加予定## コード
“`python
import sys
from pyqtgraph.Qt import QtCore, QtGui, QtWidgets
# from PyQt5 import QtCore, QtGui, QtWidgets # 上と同意義class Terminal(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()self.widget = QtWidgets.QWidget(self)
self.widget.setFixedSize(800, 300)
self.layout = QtWidgets.QVBoxLayout(self.widget)self.output = QtWidgets
Python 学習1日目
・ullib.parseモジュール
https://docs.python.org/ja/3/library/urllib.parse.html
上記URLの説明では、urlを解析して構成要素にするとある。getリクエスト
getリクエストでパラメーターを送信するときは以下の書式になる
“https://example.com?key1=v1&key2=v2&key3=v3…….len()
len関数は()内に指定したオブジェクトの長さや要素の数を取得する。
例)len(oppai)
>5sysモジュール
コマンドライン引数を指定したい時に使用する
コマンドライン引数:コマンドプロンプトの画面で入力する引数プログラムを中断するときは
処理を終了したい時の関数はexit()もしくはquit()を使用する
asyncとawaitの基本的な使い方
今回もメモ用。
自分なりの解釈です。# 概要
asyncとawaitの基本的な使い方です。とりあえず、以下を書いてみます。
asyncとawaitを使用すると、非同期処理が実装できます。
asyncをつけた関数をコルーチン関数と呼びます。
awaitでコルーチン関数を呼び出してしようします。# 内容
とりあえず、test1~test3を順番通り実行してみます。“`asyncawait.py
import asyncioasync def test1(num):
print(num + 10)
await asyncio.sleep(5)
print(“test1”)async def test2(num):
print(num + 0)
await asyncio.sleep(5)
print(“test2”)async def test3(num):
print(num + 20)
await asyncio.sleep(5)
print(“test3”)async def m
Pyhon 辞書(dict)のループ処理(for)をするときのメソッド(keys(),values(),items())の使用例
# Pyhon 辞書(dict)のループ処理(for)をするときの要素関係
Pythonの辞書`dict`の中のシーケンス要素をfor文でループ処理をする時、`key()`,`value()`,`items()`を使用することで辞書に対して指定したキーや値の組み合わせで要素を取り出すことができる。
### そもそもPythonでいう辞書(dict)って?
簡単に説明すると、**Pythonコード内で定義できるデータの持ち方**の一つです。
他にもリスト(list)、タプル(tuple)があります。※Pythonのデータの持ち方については、他記事で記載します。^^
辞書の例
`d = {‘key1’: 1, ‘key2’: 2, ‘key3’: 3}`
* `キー:値` の書き方で値を設定すること
今回は`key1`がキー、`1`が値
* `{}`で囲むこと
* 辞書内に要素を複数入れたい場合は`,`で区切って設定すること### そのまま辞書オブジェクトをfor文で実行すると、`key`が取得される
辞書作成“`
d = {‘key1’: 1, ‘key2’: 2,
python-note(1:Text処理)
# 概要
Pythonノート(1) Text処理系# file open / close
## open()
– open() を使ってファイルを開く“`
>>> f = open(‘./xxx.txt’)
“`– 第二引数でモードを指定する
|mode|description|
|–|:–|
| ‘r’| open a file for reading (default) |
| ‘w’| open a file for writing. create a file if it does not exist |
| ‘x’| exclusive flag, If the file already exists, the operation fails. |
| ‘a’| open for appending |
| ‘t’| open in text mode (default) |
| ‘b’| open in bianry mode |
| ‘+’| open a file for updating(reading and writing) |–
python-note (基本系)
# 概要
Pythonノート基本系 (自分用メモ)# 基本
## 文・式
基本的にインタープリタなので1文ずつ解釈して動作改行が文の区切りになる
“`py
print(“Hello”)
print(“Goodbye”)
“`コロンで区切っても良い
“`py
>>> print(“Hello”); print(“Goodbye”)
Hello
Goodbye
“`## コメント
`#`で始まる行はコメントとして扱われる
“`py
# comment xxxx
“`# 制御構文
## インデント
制御構文のブロックは一般的に括弧{ …… }で表すことが多いが、pythonはインデントによってブロックを表現する
## if文
“`py
if a is b:
print(“a is equal to b”)
else:
print(“a is not equal to b”)
“`## while文
`while condition:` でブロックを始める。
`else:`節を記載した場合ブロックは一度だけ実行される
【Python】ttkbootstrapを使用してGUIアプリ作ってみた!
今回はttkbootstrapについて動画を見ながら勉強したのでその記録を残したいと思います。
まだまだソースコードの方は改善します。ちょっと、長すぎます…
また、今回のは基本なのでもう少し自分なりにアレンジしていきます。参考にした動画はこちらになります。
## 参考動画
## 実際に作成した成果物
①QRコード生成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759
Python3でクラス変数をオーバーライドする関数を作成する
# はじめに
[django REST framework](https://www.django-rest-framework.org/)にある[Serializers](https://www.django-rest-framework.org/api-guide/serializers/)では、以下のようにクラス変数で定義されたフィールドをオーバーライドして、書き換えたり独自のバリデーションを付与したりすることができます。
“`py
from rest_framework import serializersclass BlogPostSerializer(serializers.Serializer):
title = serializers.CharField(max_length=100)
days_since_joined = serializers.SerializerMethodField()def validate_title(self, value):
if ‘django’ not in value.lowe
matplotlibで日本語を表示する方法
## 記事内容
以下の画像のように、日本語を使ってmatplotlibのグラフ表示を行えるようにする。
![japanese_matplotlib.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3509941/c0b1e564-9768-8522-1d08-f3480d8e05fa.png)## 状況
matplotlibを用いて折れ線グラフを生成しようとしていた時のこと。日本語のタイトルや、日本語のラベル値を設定しようとしていた。以下のプログラムは、例として用意したプログラムである。
“`python
import sys
import matplotlib.pyplot as pltdef main():
section = [“りんご”, “みかん”, “ぶどう”, “メロン”]
# 日本語ラベルを指定
x = range(len(section))
plt.xticks(x, section)# グラフ生成
plt.xlabe
Python初心者の備忘録 #05
# はじめに
今回私は最近はやりのchatGPTに興味を持ち、深層学習について学んでみたいと思い立ちました!
深層学習といえばPythonということなので、最終的にはPythonを使って深層学習ができるとこまでコツコツと学習していくことにしました。
ただ、勉強するだけではなく少しでもアウトプットをしようということで、備忘録として学習した内容をまとめていこうと思います。
この記事が少しでも誰かの糧になることを願っております!
**※投稿主の環境はWindowsなのでMacの方は多少違う部分が出てくると思いますが、ご了承ください。**
最初の記事:[Python初心者の備忘録 #01](https://qiita.com/Yushin-Tati/items/961dc47d6163f944f7e9)
前の記事:[Python初心者の備忘録 #04](https://qiita.com/Yushin-Tati/items/83aa101d7673e69d9279)
次の記事:まだ今回の記事はStyle Guide、ErrorとException、ファイルの入出力、テスト、Da
pythonでAWS Lambda を使った、どんなプロジェクトでも使える共通基底クラス群の雛形を書いてみた
# はじめに
pythonでAWS Lambda を業務利用で量産するにあたって、自分があると便利だと思うクラス構成の雛形を作成してみました。
どんなプロジェクトに入っても、これに近いクラス階層や構成を用意したり、なければ自作することになるであろう階層たちなので、雛形として作成&公開してしまおう。という考えです。
# 機能群
+ 環境変数でのログレベル指定
+ オブジェクト指向の多重継承クラス
+ 非同期処理の直列待ち合わせ
+ 入出力JSONのログ出力(Lambdaで便利)ここら辺が量産用の雛形として、プロジェクトに用意してあると嬉しいですね。
# クラス設計
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281768/f1304181-9823-2be2-c052-30304e235e5b.png)
AWS Lambda基盤から直接実行される、lambda_function.pyと、業務処理クラスは切り離したいのと、各クラス階層ごとに、どのレベルの共通処理をするか定め
VSCodeでJupyter Notebookを使う
最近説明する機会が多いので書いておきます。
Jupiter Notebook自体はシステムにインストールしたPythonで動かせますが、Global環境を汚したくないので仮想環境(pipenv)で実行します。
pipenvは仮想環境を管理するためのパッケージです。
[Pipenv: Python Dev Workflow for Humans — pipenv 2023.7.12.dev0 documentation](https://pipenv.pypa.io/en/latest/)## この記事でやること
– 仮想環境(pipenv)のインストール
– 仮想環境(pipenv)の作成
– Jupyterカーネルのインストール
– Jupyter Notebookファイルの実行## 前提
– Python3のインストール
– インストール時にPATHの設定をチェックしておく
– VSCodeのインストール
– 以下の拡張機能をインストールしておく
– Python(https://marketplace.visualstudio.com/items
個人用scikit-learn
# 回帰
## 線形回帰
“`python
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X, y)
y_pred = lin_reg.predict(X)
lin_reg.score(X, y) #R2スコア
lin_reg.get_params()
lin_reg.set_params(**params)
“`## Ridge回帰(L2正則化)
“`python
from sklearn.linear_model import Ridge
ridge = Ridge(alpha=1)
ridge.fit(X, y)
y_pred = ridge.predict(X)
ridge.score(X, y)
“`
グリッドサーチによるモデル選択
“`python
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV
p
コーディングテストで便利だと思った機能 (Python)
# はじめに:point_up:
僕はエンジニアを目指している大学生です。
コーディングテストで使って便利だなと思ったPythonの機能を紹介しようと思います。## 便利な機能たち
### リストをN個に分割
“`python
def split_list(l, n):
for i in range(0, len(l), n):
yield l[i:i + n]l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = list(split_list(l, 3))
print(result) # [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]“`
関数に `yield` を含めることで、ジェネレータになり反復可能になります。
また、ジェネレータを用いることで、都度必要な分だけ値を生成するので、メモリを効率的に使用できます。### 累積和を生成
“`python
import itertoolsl = [1, 2, 3, 4, 5, 6]
print(itertools.