- 1. 【Python】Ruff を使って Python らしいコードを学ぼう【初心者】
- 2. python import 自作モジュール 相対パスの不可解
- 3. 【Houdini】Script Solverで色々やる
- 4. PostgreSQL: Python で Upsert
- 5. UUID と Base32
- 6. en_core_web_smが見つからない場合
- 7. ガード節とは何か、綺麗なコードを書くために。
- 8. TypeScriptばかりの人が、初めてPythonを触った感想
- 9. Googleによる生成AIモデル「Gemma 2」をMacBook(M2)で動かしてみた
- 10. Pythonで小数をいい感じに取り扱うために
- 11. Pandas: テキストファイルを csv に変換
- 12. 【python】即興で3角形の辺の長さの和を入力して、ピタゴラスの定理が成立するかチェックしてみた
- 13. Pandas: List から DataFrame を作成
- 14. DIって難しそうだけど、FastAPI のDependsは簡単に使えた話
- 15. Pandas: csv ファイルの修正
- 16. DeepL API翻訳をPythonから使ってみた
- 17. Pandas: ストリングの置換
- 18. 【実装】ボストンの住宅価格推測AIを作ろう【前編】
- 19. PythonでGoogle Formを自動作成するためのクイックスタート
- 20. ここが違くてここは同じだよPythonとJavaScript
【Python】Ruff を使って Python らしいコードを学ぼう【初心者】
# はじめに
ナイトウ([@engineer_naito](https://twitter.com/engineer_naito))と申します。
最近 ChatGPT に頼りっぱなしです。
手でコードが書けないことに気づきました。一番経験のある言語が Python だったので、Python を自分の手で書けるように勉強をしています。
勉強には競技プログラミングでお馴染みの AtCoder の過去問を選びました。
Novisteps という非公式の過去問学習記録サイトを併せて利用しています。
https://atcoder-novisteps.vercel.app/AtCoder ではブラウザ上にエディタがあるのでそれを利用することもできますが、慣れている VS Code を使います。
linter や formatter などの静的解析ツールなしでのコーディングが辛かったので今回は Ruff も使います。この Ruff が Python 学習に非常に効果的だと感じのでその理由を書きます。
まずは Ruff について。# Ruff とは
公式ドキュメント
https
python import 自作モジュール 相対パスの不可解
my_package/
├── __init__.py
├── mod.py
├── sub_package
├── __init__.py
└── sub_mod.pysub_modからmodを呼び出す
sub_mod.py
from .. import modsub_mod.pyを単体で動かすとエラーになる事がある
対策
root dirに移動してパッケージで実行(my_packageの上に移動)
python -m my_package.sub_package.sub_modまたは、PYTHONPATHを設定 $env:PYTHONPATH=”C:\user\xxx\my_package”
sub_mod.py
import modとする。
【Houdini】Script Solverで色々やる
# 0. はじめに
HoudiniのScript Solver DOPについて調べたので、備忘録がてらまとめます.
質問や内容に関する指摘がありましたら、遠慮なくコメントとかください.### 0-1. 動作環境
Red Hat Enterprise Linux 9.2
Houdini Education Edition Version 20.0 Build 547 Py39### 0-2. 免責
この記事をもとに被った不利益について私は一切責任を負いません.# 1. Script Solverとは?
SideFXの[公式ドキュメント](https://www.sidefx.com/ja/docs/houdini/nodes/dop/scriptsolver.html)によると
>Script Solver DOPは、接続されたオブジェクトに対してSolveステップとしてHScriptコマンドを実行します。 通常では、このコマンドは、外部スクリプトファイルをソースとします。 このスクリプトは、どのHScriptコマンドも実行することができ、さらには、いくつかのコマン
PostgreSQL: Python で Upsert
こちらの SQL を python で実装しました。
[PostgreSQL: Upsert](https://qiita.com/ekzemplaro/items/0da59b50cb4ac9db007a)## プログラム
“`py:postgre_upsert.py
#! /usr/bin/python
#
# postgre_upsert.py
#
# Jul/17/2024
#
# ——————————————————–
import sys
import os
import psycopg2
from dotenv import load_dotenv
#
#
# ——————————————————–
def sql_upsert_string_gen_proc ():
insert_sql = ”’
INSERT INTO cities (id, name, population, date_mod)
V
UUID と Base32
## UUID と Base32
### UUID
– 128ビットの一意な数値
– 文字列では `540d79a1-0d3f-4973-b340-1d4923033768` のような16進数 36文字で表現### Base32
– 32を底とする(1つの文字で 0~31 を表す)
– 5ビットを1文字で表現できる
– 実際には、40ビット単位を8文字に変換する
– 使用するASCII文字により、Base32 と Base32hex がある[Base32](https://datatracker.ietf.org/doc/html/rfc4648#section-6) で用いる文字一覧
“`
Table 3: The Base 32 AlphabetValue Encoding Value Encoding Value Encoding Value Encoding
0 A 9 J 18 S 27 3
1 B
en_core_web_smが見つからない場合
## 問題
spacyを使ったpythonファイルをコマンドライン実行しようとしたところ、下記のエラーコードが発生した。
“`python
OSError: [E050] Can’t find model ‘en_core_web_sm’. It doesn’t seem to be a Python package or a valid path to a data directory.
“`## 解決
とりあえずエラーコードで調べたところ、下記コードを実行すればen_core_web_smがダウンロードされ、うまくいくらしい
“`
python -m spacy download en_core_web_sm
“`
(参考:https://github.com/explosion/spaCy/discussions/10895)初心者ゆえにどのような原因で上記エラーが発生したかまで特定することは叶わなかったので、詳細の説明は有識者にゆだねたいと思う。
ガード節とは何か、綺麗なコードを書くために。
## コードを綺麗にする
コードを綺麗にする(可読性を上げる)事によって、未来の自分を助けることになります。## ガード節
ガード節とは、メソッド(関数)のはじめに例外などを処理することです。
+ **悪い例**
ネストが3段もあり、ifとelseが多く、とても読みづらいです。
“`python
def is_hoge_check(age, state, time):
if(age >= 20):
if(state == “active”):
if(time >= 10):
return True
else:
return False
else:
return False
else:
return False
“`
+ **良い例**
悪い例とは違い、ネストが1段でelseが無く見やすくなりました。
“`
TypeScriptばかりの人が、初めてPythonを触った感想
## Pythonってキm
普段TypeScriptばかりの人が、初めてPythonを触った感想。
本気で全くけなす意図はないです。ネタです。
でも、そういうのが嫌な人はやめておきましょう。それと、本気で初めてPythonを触ったので、単に間違っていてもっとちゃんとした書き方すればいいんだよ、
とかあるかと思います、その辺も含めてファーストインプレッションがこんな感じだったということでお願いします。Python3の話です、それ以前との違いはよく分かっていませんが。
## インデントがブロック
うん、いやね、普段TypeScriptでもインデント入れてるから変わらないといえば変わらないけど。
特にブロックの終わりのところで何となくムズムズする、いやそれだけなんですが。## \_\_init\_\_ ってなんじゃ?
“`python
class Hoge
def __init__ (self)
honyarara“`
\_\_ を定義しやがったぞ!?
まあTypeScript(JavaScript)でもダブルアンダースコア自体は一
Googleによる生成AIモデル「Gemma 2」をMacBook(M2)で動かしてみた
[Supership](https://supership.jp/)の名畑です。2024年夏アニメが始まりましたが[異世界スーサイド・スクワッド](https://suicidesquad-isekai.com/ja/)がエンタメに徹していて見ていて楽しい。ハーレイ・クインはやっぱり最強。
## はじめに
Googleによる生成AIモデル[Gemma](https://blog.google/technology/developers/gemma-open-models/)の後継である[Gemma 2](https://blog.google/technology/developers/google-gemma-2/)が先日リリースされました。
> 2月に発表した「Gemma」は20億パラメータと70億パラメータの2サイズでの展開だったが、Gemma 2は90億パラメータと270億パラメータの2サイズ。
> 270億パラメータ版は、「そのサイズクラスで最高の性能を発揮し、2倍以上の規模のモデルに匹敵する性能を実現」するという。90億パラメータ版でも、[米Metaの「Llama
Pythonで小数をいい感じに取り扱うために
# はじめに
浮動小数点数の計算は、微妙な誤差が生じることがあります。
これはPythonというかCPUの性質に起因するものです。この記事ではPythonでいい感じに取り扱うための方法を書いていきます。
# Pythonでの挙動とその誤差
Pythonで以下のようなコードを実行します。“`python
a = 0.33
b = 10print(a * b)
“`0.33に10を掛けるだけの単純なものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3283241/9bb1326a-16ae-80b1-9de5-c35ef309231b.png)
実行するとこんな感じ。
ごく僅かですが、誤差がありますよね。これは当然の話で、現代のCPUにおいては精度に関する微小な誤差が生じてしまいます。
これは、コンピュータが有限の精度で実数を表現するために起こります。
(IEEE 754規格では2**53以上の整数値を表現できないため)Pythonの場合も同様で
Pandas: テキストファイルを csv に変換
## 仕様
コラム名、データとなっている次のようなテキストファイルを csv に変換する方法
入力ファイル
“`text:in01.txt
市区町村コード 131016
宛名番号 12345678912
個人履歴番号 1
個人履歴番号_枝番号 1
最新フラグ 1
改製番号 1
世帯番号 234567890123456
“`出力ファイル
“`text:out01.csv
“市区町村コード”,”宛名番号”,”個人履歴番号”,”個人履歴番号_枝番号”,”最新フラグ”,”改製番号”,”世帯番号”
“131016”,”12345678912″,”1″,”1″,”1″,”1″,”234567890123456″
“`## プログラム
“`py:vertical_to_csv.py
#! /usr/bin/python
#
# vertical_to_csv.py
#
# Jul/15/2024
#
# ——————————————————————-
【python】即興で3角形の辺の長さの和を入力して、ピタゴラスの定理が成立するかチェックしてみた
# はじめに
プログラムコンテストの題材で、三角形の3辺の和の長さを整数で入力し、ピタゴラスの定理が成立する(直角三角形)かどうか判定するプログラムを実装しました。## ソースコード
ソースコードは下記になります
“`python
num = int(input())
count = 0
for b in range(1,num):
for c in range(1,num-b):
a = num – b – cans1 = pow(a,2)
ans2 = pow(b,2)
ans3 = pow(c,2)
ans4 = ans2 + ans3
if ans1 == ans4:
count += 1if count >= 1:
print(“YES”)
else:
print(“NO”)
“`## 実行結果
実行結果は下記の画像です。
![tedt1.jpg](https://qiita-image-store.s3
Pandas: List から DataFrame を作成
## プログラム
“`py:from_list.py
#! /usr/bin/python
#
# from_list.py
#
# Jul/15/2024
# ——————————————————————
import pandas as pdkeys = [‘aa’,’bb’,’cc’,’dd’]
data = [[1,2],[4,56],[9,83],[11,24]]df0 = pd.DataFrame({
‘aa’: [1,2],
‘bb’: [4,56],
‘cc’: [9,83],
‘dd’: [11,24],
})print(df0)
print()df = pd.DataFrame({keys[i]: data[i] for i in range(len(keys))})
print(df)
# ——————————————————————
“`##
DIって難しそうだけど、FastAPI のDependsは簡単に使えた話
# はじめに
FastAPIのDepend、なぜこれを使うのか、どんな時に使うのか、私なりにまとめてみました。
Dependsは、依存性注入(DI)するものとも言われてますが、DIの側面はあまり気にせず、見てみます。# シンプルな例
例えば、q,skip,limitのパラメータを処理common_parametersがあったとします。
エントリーポイントの関数、read_itemにパラメータを並べて、取得して、common_parametersを呼び出します。“`Python:main.py
from typing import Unionfrom fastapi import FastAPI, Depends
app = FastAPI()
def common_parameters(
q: Union[str, None] = None, skip: int = 0, limit: int = 100
):
return {“q”: q, “skip”: skip, “limit”: limit}@app.get(“/items/{item
Pandas: csv ファイルの修正
## 仕様
指定されたフォルダー内にある csv ファイルの ”2021-10-00″ を “2021-10-12” に置き換える
## プログラム
“`py:csv_replace_folder.py
#! /usr/bin/python
#
# csv_replace_folder.py
#
# Jul/15/2024
# ——————————————————————
import pandas as pdimport sys
import glob
import csv# ——————————————————————
def csv_replace_single_proc(csv_file_path,str_src,str_target):
df = pd.read_csv(csv_file_path,dtype=str)df = df.map(lambda x: str_
DeepL API翻訳をPythonから使ってみた
# 概要
DeepL翻訳はDeep Learningを用いた高い翻訳性能で知られています。APIも用意されており、様々な言語から利用可能です。よって、試みにPythonから実行してみることにしました。# アカウント登録
DeepLのアカウント登録とは別にAPIのアカウント登録も行います。まずは**無料版**で利用を開始することにします。**無料で登録する**をクリックし、アカウント登録を行います。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/b2ffe8f3-bd12-d8fd-4b56-90f69ad74cba.png)
# APIキーの取得
DeepL API翻訳を利用するにはAPIキーが必要です。以下のサイトの方法に則ってAPIキーを取得します。https://support.deepl.com/hc/ja/articles/360020695820-DeepL-API%E7%94%A8%E3%81%AEAPI%E3%82%AD%E3%83%BC#h_0
Pandas: ストリングの置換
‘abc’ というストリングを総て、’01234′ に置き換える方法
## プログラム
“`py:str_replace.py
#! /usr/bin/python
#
# str_replace.py
#
# Jul/14/2024
#
import pandas as pd#
data = {‘col1’: [‘abc’, ‘xyz’, ‘abc’, ‘pqr’, ‘923’],
‘col2’: [‘abc’, ‘def’, ‘abx’, ‘ghi’, ‘654’],
‘col3’: [‘abc’, ‘abc’, ‘abc’, ‘abc’, ‘231’]}
df = pd.DataFrame(data)print(df)
#
str_src = ‘abc’
str_target = ‘01234’
df = df.map(lambda x: str_target if x == str_src else x)print(df)
“`## 実行結果
“`text
$ ./str_replace.py
col1
【実装】ボストンの住宅価格推測AIを作ろう【前編】
# はじめまして
始めまして!株式会社 Panta Rheiの「かず」と申します。[pandasista](https://x.com/sotsogprinciple) という名前でXをやっております。以後お見知り置きを!
本記事は4年前に勉強会で用いた記事になります!# 導入
Pythonの機械学習用パッケージ「scikit-learn」を用いてAI実装をしてみましょう!
本記事で扱うデータセットは「ボストンの住宅価格」。1970年のボストン標準都市統計地区のデータで、ボストン郊外または市内の住宅価格データとなっております。
今回は、このデータセットを用いて、ボストンの住宅価格を予想するAIを作ってみます!!
※ボストン住宅価格データセットは追記で示す理由で最新のsklearnには実装されていません。
sklearnのバージョンは“`1.1“`以下で行ってください。# 用いるパッケージ
– pandas (呼び方:パンダス)
– テーブルデータを扱いやすくしたパッケージ。Pythonのエクセルみたいなもの。
– scikit-learn(sklearn) (呼び方:
PythonでGoogle Formを自動作成するためのクイックスタート
# Google Formsの自動操作は準備が面倒
Google Formsを自動操作するためには、認証関係を突破する必要がある。
そこらへんが面倒なのでやれば最低限動かせるところまでの備忘録として残しておく。
本記事は、公式に[クイックスタート](https://developers.google.com/forms/api/quickstart/python?hl=ja)を進めているだけなのでご注意いただきたい。# APIを有効にする
Google Formsを操作するためには、APIを有効にする必要がある。
[APIを有効にする](https://console.cloud.google.com/flows/enableapi?apiid=forms.googleapis.com&hl=ja)に飛んで、APIを有効にする必要がある。
このとき、多分プロジェクトが関係ないものを選択されていたり、作成自体していないということがあると思うので、Google Formsを使うためのプロジェクトを作成する。
新しく作成したプロジェクトの場合、一回APIのアクセスが許可されていないとかの
ここが違くてここは同じだよPythonとJavaScript
# この記事は何の記事?
Python と JavaScript で動きが違う点・同じ点をまとめた記事です違う点・同じ点なんていくらでもあると思いますが,
個人的に痛い目を見た事例について取り上げていきます他にこんなのもあるよなどあれば是非教えていただきたいです
では本編スタートです
## 変数のスコープ・宣言・代入
Python の場合,宣言だけするということはできなく,
代入したときに変数が作られます
[www.w3schools.com](https://www.w3schools.com/python/python_variables.asp)
“`Python
hensu = “あたい” # これだけ
“`JavaScript の場合,宣言と代入はそれぞれ分けられます
“`javascript
// 宣言と代入一緒に
let hensu = “あたい”// 宣言と代入をわけて
let sengen
sengen = “せんげん”
“`ということで例を見ていきます
以下の流れを確認します1. 変数 `hensu` を出力する(1 回目)