Python関連のことを調べてみた2022年06月08日

Python関連のことを調べてみた2022年06月08日

Airflowはすごいぞ!100行未満で本格的なデータパイプライン

# はじめに

ワークフローを作成、実行、監視するためのプラットフォーム「**[Airflow](https://airflow.apache.org/)**」が、近年人気を集めていて、[多くの企業](https://github.com/apache/airflow/blob/main/INTHEWILD.md)に利用されています。[Airflow Summit 2022](https://airflowsummit.org/events/tokyo/) のようなグローバルイベントも開催されるようになり、世界中から2000人以上のコントリビュータ(私もその1人)が貢献しているアツいプロジェクトです。

https://qiita.com/hankehly/items/0f1a3e93bb6478f6e192

この記事で Airflow を使う意味と主要コンセプトを説明します。最後に、100行未満で実装できる本格的なデータパイプラインの実例をお見せしたいと思います。

# Airflowとは
## 概要

Airflowは **ワークフロー** を作成、実行、監視するためのプラットフ

元記事を表示

pythonで他のサイト上の画像を直接s3に保存する

環境は以下です。
“`
$ python3 –version
Python 3.10.4
“`

コードは以下です。
“`python
import requests
import boto3

# s3の設定
BUCKET_NAME = ‘your-bucket-name’
s3 = boto3.resource(‘s3’)
bucket = s3.Bucket(BUCKET_NAME)

# 画像を直接保存
url = ‘https://hogehoge.jpg’
res = requests.get(url, stream=True)
bucket.upload_fileobj(res.raw, “foo/bar/baz”)
“`

AWS EC2インスタンス上から実行するとして、
IAMロールでs3へのアクセス権限を設定したものをアタッチしておくか、`aws configure`から認証情報の設定周りは済んでいる前提です。

元記事を表示

scipy.stats: アンダーソン・ダーリング検定 anderson

# scipy.stats: アンダーソン・ダーリング検定 `anderson`

データが特定の分布関数からのものであるかどうかの検定。

`scipy.stats.shapiro` が正規分布を対象にしているのに対して,いろいろな分布に従っているかどうかを検定できる。

`anderson(x, dist=’norm’)`

`dist` には `’norm’`, `’expon’`, `’logistic’`, `gumbel’`, `’gumbel_l’`, `’gumbel_r’`, `’extreme1’` が指定できる(デフォルトは `’norm’`)。

“`python
from scipy.stats import anderson
import numpy as np

np.random.seed(123)
x = np.random.normal(50, 10, 20)
result = anderson(x)
result
“`

AndersonResult(statistic=0.36238834776122175, critical

元記事を表示

Pythonのコードを1行書くだけで誰でも手軽にインタラクティブな地図アプリを作れるLeafmapを使ってみよう

![leafmap_demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/709a741e-1998-82d4-8095-6e541b9c1e31.gif)

※公式サイトのデモ映像です。これがPythonのコード1行で作れます。

[https://leafmap.org/](https://leafmap.org/)

## データ確認ってめんどくさくないですか

GISデータってよくわからないな、なんだそれ。っていう方がいきなり上司に「いろんなデータが蓄積されてきたから、地図上に可視化して分析してみよう。」とか「誰でも手軽に閲覧できるように、Web上にサイトを構築しよう」なんていう話をされたら多分キレますよね?

GISデータを日常的に利用していてもそれはさほど変わらず…

GISデータを取り扱う中で、主にデータの前処理などを行っている方は同じような悩みを抱えているんじゃないかなと思うんですが、データの可視化ってめんどくないですか?

いや、QGISとかデスクトップGISでデータ処

元記事を表示

GeoPandas(GeoDataFrame)のread/writeなら1000万レコードを10秒で読み込めるpyogrioを使って高速に行おう!

## GeoParquet以外が遅すぎる

先日こんな記事を書いてGeoParquetの書き込み・読み込みがいかに早いか、という紹介をしました。
[GeoPandasをやるならFlatGeobufより10倍早いGeoParquetを使おう!](https://qiita.com/nokonoko_1203/items/a01168096c2d4c2d6914)

結果としてはこんな感じになりました。

### write

1. GeoParquet: `31.5 s`
2. FlatGeobuf: `8min 6s`
3. Shapefile: `9min 30s`
4. GeoJSON: `10min`
5. GeoPackage: `13min 37s`

### read

1. GeoParquet: `5.67 s`
2. FlatGeobuf: `2min 57s`
3. GeoPackage: `3min 12s`
4. Shapefile: `3min 46s`
5. GeoJSON: `4min 1s`

ダントツでGeoParquetが高速ですね。

が、しかしG

元記事を表示

AtCoder Beginner Contest 254 参戦記

# AtCoder Beginner Contest 254 参戦記

## [ABC254A – Last Two Digits](https://atcoder.jp/contests/abc254/tasks/abc254_a)

1分くらいで解いたけど遅刻したせいで2分半で突破. 書くだけ.

“`python
N = input()

print(N[-2:])
“`

## [ABC254B – Practical Computing](https://atcoder.jp/contests/abc254/tasks/abc254_b)

11分半で突破、TLE1. 見た瞬間にパスカルの三角形だと分かったのに、なぜこんなに時間がかかって TLE までしてしまうのか orz.

“`python
from functools import lru_cache

N = int(input())

def print_pascal(d):
for i in range(d):
t = []
for j in range(i + 1

元記事を表示

【Python】声優100人をキレイに話者識別するための機械学習レシピ

[とあるプログラミング学習サイト](https://paiza.jp/works/ai_ml/primer/ml-challenge2)で以下のような講座を見つけました。

>## Python×AI・機械学習入門編2: 話者認識をしよう
>機械学習で音声認識を行います。音声データから特徴量を抽出する方法を学習し、SVMで分類します。

とても面白そうな記事ですが、**残念ながら有料プランの講座**でした。
概要とコードをチラ見したところ、**3人**の声優を話者識別するために音声データから特徴量(MFCCなど)を抽出して、**SVM**(サポートベクターマシン)で分類しているようです。

Google検索してみると、話者識別の記事のほとんどがSVMを用いていますが、
**「SVMは本当にベストプラクティスなのか」
「声優を100人に増やしても

【pandas】1行ずつ追加するときのスマートな書き方

# 前提
データ加工や分析でお世話になるPythonのライブラリ「pandas」。
「__forループで処理した結果を1行ずつ格納したデータフレームを作成する__」
ということはよくある(と思う)のだが、なかなかスマートな書き方が分からない。

例えば以下のような感じ。

“`py
dic = {‘i’: [], ‘i^2’: [], ‘i^3’: [], ‘i^4’: []}

for i in range(10):
dic[‘i’].append(i)
dic[‘i^2’].append(i**2)
dic[‘i^3’].append(i**3)
dic[‘i^4’].append(i**4)

df = pd.DataFrame(dic)
“`

上のコードは

|i|i^2|i^3|i^4|
|-|-|-|-|
0|0|0|0|
1|1|1|1|
2|4|8|16|
3|9|27|81|
4|16|64|256|
5|25|125|625|
6|36|216|1296|
7|49|343|2401|
8|64|512|4096|
9|81|7

[備忘録]Docker環境でコーディングしたい

備忘録です。
Docker環境を構築したものの、その環境でプログラミングするには?どのフォルダにコーディングファイルを配置するんだ?となっているので、書き留めます
気が向いたら内容整理します。

目的

Docker環境でプログラミングしたい
.pyファイル(Pythonファイル)を実行したい

下準備

Docker環境を構築する

参考文献

【VScodeプラグイン Remote Containers解説】Docker×docker-compose開発で必須

https://niwakatech.info/vs-code-docker/

【Django】Python のインストールからサーバーを建てるまで

# ざくっと概要
・Python で Webアプリを開発したい!
・Django って名前にたどり着いたけど起動できない!
・とりあえず動かしたい!

って方向け。コピペで動きます。

# バージョン (執筆時)
“`:version
Python : 3.10.4
pip : 22.1.2
Django : 4.0.5
“`

# Python をインストール
公式ドキュメントから最新版をDL。
https://www.python.org/downloads/

https://www.python.org/downloads/

ダウンロードが済んだら起動。
![python-3-10-4-amd64-exe.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2701040/1b2eeed4-d73e-e61a-af6b-b0dda442001a.png)

インストール時に

:::note warn
`Add Python 3.version to PATH`
に**チェック

Raspberry PiでCAN通信

# はじめに
Raspberry Piに慣れるために、以前、NUCLEO L476RGとCANシールドで作成したボードとRaspberry PiでCAN通信を行うことにしました。

# 使用機器
|メーカ|型格|
|:-:|:-:|
|Raspberry Pi|Raspberry Pi 4 Model B|
|inno-maker|USB2CAN|

# 作りたいもの
+ Raspberry Pi上で動くGUIアプリケーション
+ CAN通信ができる
これを実現するためにPythonを使うことを使うことにしました。GUIを実現する方法はいくつかあるようでしたがGoogle Trendsで上位であったTkinterを使うことにしました。

# Pythonの準備
Raspberry Piには標準でPython3がインストールされているのでアップデートするだけ使用できました。
エラーが発生したのでpip(Pythonのパッケージを管理するツール)のアップデートを行いました。
“`
sudo pip3 install –upgrade pip
“`

# python-canの準備
P

replitでpymongoを使う

# まずすること
“`sh
pip install pymongo
“`
[mongodb](https://www.mongodb.com)にアクセスしてアカウント作成。

## Databaseを立てる
[mongodb](https://www.mongodb.com)の左のメニューから`database`を選択して`Build a database`をクリック。
`shared`を選択して、名前を`Cluster0`から好きな名前に変更し、`create`をクリック。
そしたら、`quick start`に飛ぶので`username`と`password`に好きな値を入れる。
このuserとpasswordは後に使うのでメモしておいてください。
`create user`をクリック。
`network access`をクリックして、`add ip address`をクリック。
`connect from anywhere`を選択して追加。
`database`に戻り、`connect`をクリックし、
`connect your application`を選択。
`Pyth

moviepyで出力した動画をアップロードすると音が消えてしまう問題

# 動画の一部を切り出すスクリプトを書いた

moviepyを使っています。手始めに開始後10~20秒を切り出してみます。

“`python:videocut.py
import sys
import moviepy.editor as mp

for filename in sys.argv[1:]:
clip_in = mp.VideoFileClip(filename).subclip(10, 20)
clip_in.write_videofile(‘./outtest3.mp4’)
clip_in.close()
“`

実行します。

“`
python videocut.py MY_MOVIE.mp4
“`

# 音が出ない

ローカルでは音が出ましたが、Twitterにアップロードしたら音が出なくなりました。

確認できていませんが、一部の動画プレイヤーでも音が出ない問題が発生する場合があるとのこと。

# どうすればよかった

Python,pipでのバージョン確認

pythonを実行して“`ModuleNotFoundError: No module named ‘xxxx’“` とエラーが出たとき、調べてみると、pythonのバージョンやライブラリのバージョンが対応していないとか、そもそもライブラリが入っていないとかがよくあります。その都度、pipやpythonのバージョンをネットで確認するのが手間なので、バージョンをチェックするプログラムを作って確認できるようにしてみました。

# 実行環境
Python version: 3.9.13
OS: Windows 10

# プログラム
## python,osのバージョン確認
platformモジュールで確認することができます。

“`platform.py
import platform
“`
実行結果
“`
print(“Python version:”,platform.python_version())
print(“OS:”,platform.platform())
“`

## pipの確認
subprocessモジュールを使用すると、コマンドを実行することができます。

scipy.stats: シャピロ・ウィルク検定 shapiro

# scipy.stats: シャピロ・ウィルク検定 `shapiro`

シャピロ・ウィルク検定(正規性の検定)を行う。

`shapiro(x)`

帰無仮説 $H_0$: データは正規母集団から抽出されたものである
対立仮説 $H_1$: データは正規母集団から抽出されたものではない

“`python
from scipy.stats import shapiro
import numpy as np
“`

# 1. 正規乱数

平均値=50,標準偏差=10 の 20 個の乱数を発生させ,シャピロ・ウィルク検定でこのデータが正規分布に従うか検定する。

“`python
np.random.seed(123)
x = np.random.normal(50, 10, 20)
shapiro(x)
“`

ShapiroResult(statistic=0.9611964225769043, pvalue=0.5680192112922668)

$p \gt 0.05$ なので,有意水準 5% のもとでは,帰無仮説は棄却できない。結論は,「データ

pipxでinstallしようとすると失敗するときの対処法

備忘録も兼ねて。

# 経緯
pipxを使ってみようと思い、
`pip install –user pipx`でインストールして
`pipx ensurepath`でパスを通したあと、
blackを使うために`pipx install black`としたら、以下のエラーが赤文字で出た

“`
pipx: The term ‘pipx’ is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
“`

# 原因と対処法
`pipx ensurepath`で自動的に通された環境変数パスが、何故かすべて小文字になっているのが原因

正しいパスを環境変数に入れてやれば解決する

正しいパスは、`pipx ensurepath`をはじめてしたときに出てくる
“`
S

pythonよくある質問(FAQ)

自分でPythonを学ぶことはできますか?
はい、Pythonを自分で学ぶことは完全に可能です。 YouTube動画から本、インタラクティブゲームまで、コーディングスキルの向上に役立つさまざまなリソースを見つけることができます。多くのオンラインコースでは、自分のペースで学習することもできますが、構造が追加され、明確な学習パスがあり、場合によっては他の学習者のコミュニティが組み込まれています。

Pythonを学ぶのは難しいですか?
Pythonは、実際には初心者にとって最高のプログラミング言語の1つです。その構文は英語に似ているため、比較的読みやすく、理解しやすくなっています。ある程度の時間と献身があれば、これまでコードを1行も記述したことがなくても、Pythonの記述方法を学ぶことができます。

Pythonを学ぶには数学が得意である必要がありますか?
プログラミングには多くの数学が必要であるというのはよくある誤解です。 Pythonで成功するために、数学の専門家である必要はありません。算数の基本を理解するのに役立ちます。 Pythonを作成するということは、問題を小さなステップに

Pythonを学ぶのにどれくらい時間がかかりますか?

基本的なPythonを学ぶのにどのくらい時間がかかりますか?
Pythonの基本を2〜6か月で学ぶことは可能ですが、学習に費やす時間によっては、これよりもはるかに短い場合もあります。たとえば、CourseraのPython for Everybody Specializationは、コースに1週間に6時間費やしている場合、通常、完了するまでに約4か月かかります。より多くの時間を、たとえば1日2時間費やすことができれば、2か月でスペシャライゼーションを完了することができます。

このコースや他の多くの入門コースでは、Pythonの次の基本的な構文と要素を学ぶことを期待できます。

変数とタイプ

オブジェクトとデータの構造(文字列、整数、浮動小数点数など)

インデックス作成とスライス

比較演算子

forループとwhileループ

機能

リスト、辞書、およびタプル

ファイルの読み取りと書き込み

クラスとオブジェクト

ウェブスクレイピング

アプリケーションプログラミングインターフェイス(API)

Pythonの基礎知識を身に付けたら、データアナリストやアプリケーション開発

再帰関数でpythonのyieldを使う(例題:数字和がnになる数を昇順でリスト)

再帰関数でpythonのyieldを再帰関数でどう使うか分かりづらかったので調べてみました。

### 【例題】数字和がnになる数を小さい順に出力する関数を作れ

このような問題を例として考えてみます。まず数字和がnになる**k桁の数**を昇順にプリントする再帰プログラムを考えます。

#### 数字和がnになる**k桁の数**を昇順にプリントする
“`python
def ds2n(n,k,ans=0): # n:数字和, k:桁数, ans:答え 初期値0,
if n==0 and k==0:
print(ans)
return
for d in range(max(0 if ans>0 else 1,n-(k-1)*9),10):
ans1, n1 = ans*10+d, n-d
if n1 >= 0:
ds2n(n1,k-1,ans1)
return

n = 5
for k in range(1,2+1):
print(f”– k={k} –“)
ds2n(n,k)
#

Pythonを使い始めるための3つの学習オプション

他のプログラミング言語と同様に、Pythonを学ぶにはさまざまな方法があります。これらのオプションには、ブートキャンプ、従来の学位、および自己誘導学習が含まれます。それぞれの経路には独自の利点があります。すべての意欲的なコーダーが独自のニーズ、関心、制約を持っているのと同じです。あなたのキャリアの目標は、Pythonを学ぶ方法を決定する上で重要な要素になります。特にPythonに焦点を当てる方法もあれば、Pythonと連携して他のプログラミング言語やスキルを学ぶ機会を提供する方法もあります。

1.データ分析ブートキャンプ
ブートキャンプは、さまざまなプログラミング言語とスキルを教える集中的なプログラムであり、通常、完了するまでに3〜6か月かかります。彼らはまた、仕事や他の責任を維持する必要があるが、プログラマーになるためのスキルを習得したい学生のために柔軟なスケジュールを提供する傾向があります。データ分析ブートキャンプは、複雑なデータ問題を解決および分析するために必要なスキルを教えることに重点を置いています。学生は、ピボットテーブルやVBAスクリプトなどのExcel関数から、HTM