- 1. 1年前の日付を求める
- 2. Anacondaセットアップ備忘録
- 3. PythonのTypedDictのキーの有無・値の型をチェックするツールtypeddict-validatorを作った
- 4. pythonとc言語間での定数の同期方法の提案
- 5. PyflowでWindowsにPythonの小さな環境構築する
- 6. B – Chocolate
- 7. チームでの開発環境を整える
- 8. データ型の覚えやすい暗記法を思いついた
- 9. n個のサイコロを振った時の和の確率分布をpythonを使った統計的確率で求める
- 10. 【Python】令和4年度春期応用情報技術者試験 プログラミング問題
- 11. pythonでCの関数だけではなく、構造体も参照する方法
- 12. クッソ初心者がエラー起こしまくった備忘録
- 13. pygribでGPVデータを処理してPyGMTで描画
- 14. 【Python】二次元リストからcsvファイル作成・追記
- 15. Python3: 文字列がカタカナかを判定する
- 16. SQLAlchemy で MariaDB のデータを削除 (Delete)
- 17. SQLAlchemy で MariaDB のデータを更新 (Update)
- 18. SQLAlchemy で MariaDB のデータを読む (Read)
- 19. SQLAlchemy で MariaDB のデータを作成 (Create)
- 20. nondominated sortを高速に計算する
1年前の日付を求める
1年前の日付とググるとdateutilの`relativedelta()`を使う旨がよく出てくる。
一目datetimeでマイナス365日で良さそうだが`うるう年`を考慮すると`relativedelta()`が良いようだ。| 日付 | timedelta(days=365) | relativedelta(years=1) | 備考 |
| ——— | ——————– | ———————- | – |
| 2020/2/28 | 2019/02/28 | 2019-02-28 | 期待通り|
| 2020/2/29 | 2019/03/01 | 2019-02-28 | うるう年はずれる|
| 2020/3/01 | 2019/03/02 | 2019-03-01 | 同上|“`
// 2020/2/28 の365日前
$ python3 -c “import d
Anacondaセットアップ備忘録
# 旧環境がある場合
事前にインストール済のパッケージをtxtファイルにエクスポート
“`export.cmd
conda list –export > package-list.txt
“`# Anacondaのインストール
[anaconda公式のWEBサイト](https://www.anaconda.com/)のDownloadよりインストール
* just meを選択
→user profile下層にAnacondaがインストールされる
* 基本的にすべての項目をrecommendでOK
anaconda.exeチェックもつけたまま# Anaconda起動後
まず初期設定
“`init.cmd
conda init
“`事前にリストアップしていたパッケージのインポート
“`inport.cmd
conda create -n [env-name] –file package-list.txt
“`# 他コマンド
### 使用環境の情報を確認
“`check_info.cmd
conda info -e
“`
### 自分の環境[env-n
PythonのTypedDictのキーの有無・値の型をチェックするツールtypeddict-validatorを作った
JSON を受け取る API などでは、多くの場合で何らかのバリデーションをしていると思うが、そのバリデーションに Python の TypedDict を使えるようにしてみました。
## 概要
https://github.com/SogoKato/typeddict-validator
TypedDict を使って辞書型のデータをバリデーションするユーティリティ。辞書が必要なキーを持っているかや、値が適切な型を持っているかを再帰的にチェックします。 API リクエストや何らかのファイルのような、 JSON や YAML をデシリアライズするシーンで便利です。
現在のところ、一般的な型および Optional を含む Union 型をサポートしています。
## 要件
* Python 3.10 以降
## インストール
PyPI からインストールできます。
https://pypi.org/project/typeddict-validator/“`
pip install typeddict-validator
“`## つかいかた
`validate
pythonとc言語間での定数の同期方法の提案
# はじめに
c言語で作成したシェアードライブラリ(*.so)をpythonから呼び出す場合、
C言語の関数の呼び出し方さえ変わらなければ、処理の中身が変わっても、
pythonの処理(ソース)の変更を行うことなく、最新の状態で動作します。残念なのは、#defineで定義している内容が変わった場合、
最悪、python側のソースを変更しないと期待しているように動かない
可能性がある事です。いくつかオープンソースの実装例を見ていくと、C言語側で定義している#define xxx を、
pythonでは、同じ名称のインスタンスへの代入文で実装しています。実際、同じ内容を2箇所(c,python)に持っている状況が気持ちが悪いですし、
値が変わったか気にするのも大変だし、値を転記するのも面倒なので、
何か仕組みができないかと考えた案を投稿します。pythonは、1ヶ月位しか勉強していないので、このコーディング
がリーズナブルなのかわからないのですが、もっと良いやり方が
あれば、ぜひ教えてください。# 使い方
C言語側条件
* 記号定数マクロのみ指定可能
* マクロ展開後
PyflowでWindowsにPythonの小さな環境構築する
PyFlowというビジュアルスクリプトフレームワークもあるので気を付ける
PyflowのGitHub: [https://github.com/David-OConnor/pyflow](https://github.com/David-OConnor/pyflow)
## Pyflow
最小限のAPIを備えたシンプルで使いやすいインストールと依存関係を管理するシステムツール
+ 環境を自動で判別して,指定されているPythonで実行をするようにしてある
+ ユーザー側のPythonを利用せず[独自にコンパイルしたPythonを利用](https://github.com/David-OConnor/pyflow#python-binary-sources)することで環境に依存しないで構築できる
+ 依存関係のキャッシュされたデータベースや[warehouse](https://github.com/pypa/warehouse)などを利用しているためパッケージ依存関係の解決やlockingが速い
+ (Rustで開発されている)個人的にはこれらが特徴として良いなあと思った
B – Chocolate
## 問題
https://atcoder.jp/contests/abc092/tasks/abc092_b## 答え
“`
n = int(input())
D, X = map(int, input().split())
A = [int(input()) for i in range(n)]
ans = 0
for i in range(n): #2の時、5の時、10の時
for j in range(1,D + 1,A[i]):
ans += 1
ans = X + ansprint(ans)
“`## ポイント
range(start, stop, step)のように引数に整数を3つ指定すると、start ≦ i < stopでstepずつ増加する等差数列が生成される。 第三引数が増える数となる。 引数stepに負の値を指定すると減少していく。この場合は、start ≦ stopでないと空となる。 これを使って合宿の日におけるAiの値が入る日はいくつあるのかを計算することができる。 https://note.nkmk.me/pytho
チームでの開発環境を整える
# 始めに
複数人数でPythonを用いた小規模開発をすることになりました。
今まではデータ集計/分析のために一人でPythonを用いていただけなので、Python/ライブラリバージョン、書き方の統一について意識していませんでした。
ということで、上記事項について調べて実行してみました。# PC環境
– OS : Windows 10 Home 64bit
– WSL2 : Ubuntu 20.04
– IDE : VSCode**VSCode**を用いて**WSL2上のUbuntu 20.04**で**Python3**を使った開発を行うことを目指します。
# Pythonバージョン
[pyenv](https://github.com/pyenv/pyenv)であらゆるPythonバージョンへ切り替えられるように設定します。
## pyenv導入
まず初めに[正常なビルド環境の為の推奨コマンド](https://github.com/pyenv/pyenv/wiki#suggested-build-environment)を実行
“`bash
sud
データ型の覚えやすい暗記法を思いついた
# 背景
プログラミング初学者からPythonの場合strが「文字列」でintが「数字(整数)」だと全く覚えられず混乱するから良い覚え方はないかと打診を受け、「なるほど、、、」と思い考案。# 覚え方
## str(String)
**st**o**r**yは**文字**で書く。
## int(Int)
**int**elliは**数字**で語る。
## bool(boolean)
正解(true)かな?いいえ、不正解(false)です!ブーー(**boo**l)## 所感
もはやギャグですが、「いい国作ろう鎌倉幕府」みたいなノリで初学者には理解してもらえるようです。
需要があれば随時更新していきます。
n個のサイコロを振った時の和の確率分布をpythonを使った統計的確率で求める
## [初投稿]
自分の勉強したことを振り返ることがメインの目的です。拙い文章かもしれませんが、よろしくお願いします!
## 概要
n個のサイコロを振った時の和の確率分布を、pythonを使った統計的確率で求める。## はじめに
確率分布とは、ある操作において起こりうる事象のそれぞれの確率の分布を表現したもので、一般には散布図やヒストグラム形式で表されます。今回はn個ののサイコロを振るという操作を十分大きな試行回数行うことで、確率を求めていきます。
これは統計的確率、もっとわかりやすくいうと、経験に基づいた確率ですね。
試行回数が多ければ多いほどより正確な確率が求められます。## 実装コード
実装は、https://note.com/omori55/n/n639148bab42b
を参考(ほぼパクリ)させていただきましたが、使ったライブラリや関数の中身について自分なりに噛み砕いたことを書きます。“`python:qiita.py
import random
import matplotlib.pyplot as plt
n = int(input(“幾つのサイコロを振
【Python】令和4年度春期応用情報技術者試験 プログラミング問題
## 問題
IPA公式HPの以下を参照。
https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2022r04.html## 深さ優先探索での解法(前半部)
### コード
“`python:ans.py
import pprintMAX_BOARD = 81
board = [2,0,1,0,9,0,7,0,0,
0,4,0,2,0,0,3,0,0,
5,0,0,0,0,8,0,2,9,
0,9,0,6,7,0,2,0,0,
6,0,0,3,0,5,0,0,4,
0,0,7,0,4,9,0,1,0,
7,6,0,9,0,0,0,0,3,
0,0,9,0,0,6,0,4,0,
0,0,4,0,1,0,6,0,0]def solve(x):
if x > MAX_BOARD-1:
print_board()
return
pythonでCの関数だけではなく、構造体も参照する方法
pythonから、C言語(シェアードライブラリ)の関数を呼び出す例はありますが、同じようにデータを取り出すやり方です。
C言語のdata構造体をアドレスで参照している場合、pythonでは、下記の様にする必要がありました。C言語側のdata構造体を指すdata_table_ptrからpython側でdataインスタンスを生成します。
“`c:C言語
struct data_table {
int attr;
char *data;
};
const struct data_table data = {
.attr = 100,
.data = “文字列”,
};
const struct data_table *data_table_ptr = &data; ・・・C①
:
void functionA(const struct data_table *ptr) ・・・C③
{
attr = ptr->attr; ・・・C②
:
}
:
functionA(data_table_ptr);
:
“``
クッソ初心者がエラー起こしまくった備忘録
Python初学者が関数のところでSyntaxErrorを起こしまくったので原因と解決法を備忘録として残す。
“`
>>>|def f(x):
…| return x+1
…|f(2)
|
|SyntaxError: invalid syntax
“`
IDLE shellの左端も表記しているので、[>>>]や[…]を意図的に含んでいる。defで関数を定義した後、直後でf(2)のように関数を呼びだそうとしたら、
上記のようにSyntaxErrorと表記された。そこでreturnとf(2)を一行開けた状態にしたところ
“`
>>>|def f(x):
…| return x+1
…|
>>>|f(2)
|3
“`
このように出力された。前者ではまだf(x)が定義される前にf(2)を呼び出していたということだろうか?
IDLE shellの左側にある[>>>]と[…]の違いがあるが、
[…]の中にある場合は一連の流れだからまだ定義し終わっていないということなのだろうか?
pygribでGPVデータを処理してPyGMTで描画
この記事では、気象庁の配信するGPVデータの処理を行い、PyGMTで可視化する方法を紹介します。
# はじめに
GPVデータ(Grid Point Value Data)とは、世界中の地表面などを等間隔に区切った領域ごとに、気温や気圧など多数の気象要素を収録したデータのことです。日本語にすると格子点値なのでそのままですね。
PyGMTとは、地球科学の研究者がよく用いるGMT(Generic Mapping Tool)をPythonで扱えるようにしたものです。データを地図にする機能に優れています。GPVデータの形式は、世界気象機関(WMO)が定めた二進形式格子点資料気象通報式(第2版)形式、いわゆるgrib2形式がよく用いられます。中身はテキストデータではなくバイナリデータなので、いきなりPyGMTで描画は出来ません。ところでPythonの世界には、grib2形式を簡単に読み込んでくれる`pygrib`というライブラリがあります。今回は、これを使って扱いやすい形式に変えてからPyGMTで描画します。
# 環境の準備
## 仮想環境の有効化
この記事の内容はAnacondaの仮想環
【Python】二次元リストからcsvファイル作成・追記
## 環境
+ Microsoft Windows 10.0.22000.613(21H2)
+ Windows PowerShell 5.1.22000.613
+ conda 4.12.0
+ Python 3.8.12.final.0
+ csv 1.0## コード
“`py:py
import csvCSV_PATH = “パス”
li = [[“A”, “B”], [“C”, “D”, “E”]]with open(CSV_PATH, mode=”a”, encoding=”utf-8″) as f:
writer = csv.writer(f)
writer.writerows(li)
“`“`:csv
A,B
C,D,E
“`### csvモジュールについて
`writerow(list)`:一行用
`writerows(list)`:複数行用https://www.delftstack.com/ja/howto/python/write-list-to-csv-python/
https://techacademy.jp
Python3: 文字列がカタカナかを判定する
Ubuntu でのライブラリーのインストール
“`bash
sudo pip3 install regex
“`“`py:katakana_hantei.py
#! /usr/bin/python
#
# katakana_hantei.py
#
# Apr/19/2022
# ——————————————————————
import sys
import regex
# ——————————————————————
def katakana_hantei_proc(word_in):
rvalue = False
changed = regex.findall(“\p{Katakana}+”, word_in)
if 0 < len(changed): if word_in == changed[0]: rvalue = True # return rvalue # #
SQLAlchemy で MariaDB のデータを削除 (Delete)
“`py:maria_delete.py
#! /usr/bin/python
#
# maria_delete.py
# Apr/19/2022
#
# —————————————————————-
import sys
from time import localtime,strftime
#
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime, Sequence
from sqlalchemy.orm import scoped_session, sessionmaker
#
# —————————————————————-
sys.stderr.write (
SQLAlchemy で MariaDB のデータを更新 (Update)
“`py:maria_update.py
#! /usr/bin/python
#
# maria_update.py
# Apr/19/2022
#
# —————————————————————-
import sys
from time import localtime,strftime
#
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime, Sequence
from sqlalchemy.orm import scoped_session, sessionmaker
#
# —————————————————————-
sys.stderr.write (
SQLAlchemy で MariaDB のデータを読む (Read)
“`py:maria_read.py
#! /usr/bin/python
#
# maria_read.py
# Apr/19/2022
#
# —————————————————————-
import sys
#
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime, Sequence
from sqlalchemy.orm import scoped_session, sessionmaker
#
# —————————————————————-
sys.stderr.write (“*** 開始 ***\n”)
#
host=’localhost’
data_
SQLAlchemy で MariaDB のデータを作成 (Create)
“`py:maria_create.py
#! /usr/bin/python
#
# maria_create.py
#
# Apr/19/2022
#
# ——————————————————–
import sys
import string
#
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime, Sequence
from sqlalchemy.orm import scoped_session, sessionmaker
#
# ——————————————————–
def dict_append_proc(dict_aa,key,name,population,date_
nondominated sortを高速に計算する
## はじめに
表題の通り,高速なnondominated sortの計算に必要な関数を作りました.
nondominated sortとは主に多目的最適化においてサンプルの優劣をつけるために利用されるSort方法です.## 追記 (2022年4月21日)
Githubに[コードを公開](https://github.com/nabenabe0928/fast_pareto)し,`pip install`で利用できるようにしました.“`shell
pip install fast-pareto
“`以下の方法でimport可能です.
“`python
from fast_pareto import is_pareto_front, nondominated_rank
“`## 実装
以下の `nondominated_rank` 関数では入力 `costs (shape := (n_points, n_costs))` に対して,`ranks (shape := (n_points, ))` を返します.“`python
import numpy as n