Python関連のことを調べてみた2019年11月21日

Python関連のことを調べてみた2019年11月21日

[入門]二分探索木を解説しながら自力実装してみた

# [入門]二分探索木を解説しながら自力実装してみた
## 目的
* 二分探索木を学ぶことで、データ構造とアルゴリズムに対する理解を深めたい。
* pythonで二分探索木とデータ構造を実装する。
* データ構造を一次元のリストに畳み込んでしまえば実装は楽かもしれないが、木データ構造の理解を深めるために敢えてノードクラスを定義して二分探索木を実装する

## 内容
### 二分探索木の定義
 二分探索木とは、順序関係が定義されているノードの値(数値とか順列の定義された文字など)を有した二分木データ構造である。
 
木構造に関しては[こちらを参照](https://qiita.com/tagtagtag/items/c5c460633e1ac864937a)。

 各ノードは0,1,2個の子ノードを有し、自らより値が小さいものを左子ノード、大きいものを右子ノードと定義されている。

 同値のノードに関しては筆者が調べた限り厳密な定義が確認できなかったため、本記事では右子ノードに含める。

 場合によっては重複は削除する手法もあるので、注意されたい。

### 二分探索木の性質
 上述の定

元記事を表示

ProgateでPython(辞書、while文、break、continue)

#python progate 学習コースⅡ
##辞書
*辞書のリストの要素取り出し方*
for文を用いてリストを取り出し処理を行う
**for 変数名 in 辞書:**
ここで変数に要素のキーが一つずつ代入され、要素の値はキーが代入された変数を用いて取り出せる。
##while文
*while文の書き方*
ある条件に当てはまる間繰り返し処理
**while 条件式:**
変数の値を更新し処理の前にチェック
Falseであれば処理終了
無限ループにならないように注意、特にインデントに気をつける
###break
繰り返し処理を強制終了させる、if文などの条件分岐、while文などに用いる

numbers = [1,3,5,7,9]
for number in numbers:
print(number)
if number == 5:
break

console
1
3
5

###continue
breakとは違いその週の処理だけをスキップする

numbers = [1,2,3,4]
for number in numbers:
if number % 2

元記事を表示

LambdaでElasticsearch Serviceの手動スナップショットを取得する仕組みをCFnで一括デプロイ

Amazon Elasticsearch Service (AES) で手動スナップショット取得の仕組みをCloudformationで一気にデプロイします。かつCurator使って古いスナップショットは自動的に削除する設定になっています。スナップショット取るだけで意外に大変です。

PythonスクリプトはこちらのAWSのドキュメントにあるものベースにしてます。

https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/curator.html

# やりたいこと
これを作ります。スクリプトはAWSのドキュメントにあるものを、ほぼそのまま使っているので、読めばすぐわかるレベルだと思います。コメントも残ってます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/fd25ed74-896a-60f6-77fb-fc1ebf2bd53f.png)

# 手動スナップショ

元記事を表示

[Blender]shape_keyをスクリプトで設定する方法

Cube.001と、Cubeの間でshape keyを設定する。
後で指定した名前の方にshape keyが挿入されます。
このサンプルの場合だと、Cube側に挿入される。

“`
import bpy

objectToSelect = bpy.data.objects[“Cube.001”]
objectToSelect.select_set(True)
objectToSelect = bpy.data.objects[“Cube”]
objectToSelect.select_set(True)

bpy.context.view_layer.objects.active = objectToSelect

bpy.ops.object.join_shapes()
“`

Blender2.8 自分用メモ

元記事を表示

Python初心者が学んだ基本的な作法・関数・ライブラリ等を逐次更新していく

## 動機
* 画像処理等をやっている中年のおっさんで研究者の端くれ(C++、Rubyはそこそこ書ける)
* 機械学習を始めるのでPythonを学習する必要が出てきた
* せっかく全くの初心者という貴重な時期なのである程度のレベルになるまでに必要となる知識を逐次記録していくことにした(継続中)
* ある程度仕事を回せるためには結局どんな知識や関数を使えるようになる必要があるの?という問いに対する回答になれば…
* 今後同じような初心者の方が参考にできるものになれば…
* 以上の性質から体系的なまとめにはならないです…すみません

## 参考記事(網羅的・体系的なまとめ)
* [python 組み込み関数を全て(69個)紹介する](https://qiita.com/anieca/items/5afa1787aa0c7cd3ab49
)
* [AtCoderの問題を分類しました](https://qiita.com/KoyanagiHitoshi/items/32dc42d8c5ee75339e54)

## str
### str.join
* 文字列を結合

元記事を表示

Blenderにはオブジェクトの選択順序がない

Maya等では、

“`
string $sl[] = `ls -sl`;
“`

などとすると、選択した順番にオブジェクト名が配列の中に追加される。

しかし、Blenderには選択順序がないので配列の中の順番はテキトーになるらしい。
順序くらい作って欲しいよね。

代わりに、最後に選択したオブジェクトを以下のコマンドで取得する
最後に選択したオブジェクトは、アクティブになっているのでこれで取得できる

“`
bpy.context.active_object
“`

選択中のすべてのオブジェクトは

“`
bpy.context.selected_objects
“`
で取得できるので、これらを組み合わせる必要がある。

自分用メモ

元記事を表示

Pythonで標準入力またはファイル名指定でテキストを読み込む方法

`cat`などのコマンドは、ファイル名を引数にとって読み込みを行いますが、ファイル名が与えられない場合は標準入力を読む、という挙動をします。今回はこれをPythonで実現する方法について調べました。

“`
$ cat input.txt
$ cat < input.txt $ python hoge.py input.txt $ python hoge.py < input.txt ``` # 0. 基本 Pythonでは標準入力もテキストファイルへのポインタもfile object(細かく言うと`_io.TextIOWrapper`クラスのインスタンス)なので、次のような関数は標準入力`sys.stdin`が引数に与えられても動作します。 ```python def process(fp): for line in fp: print(line, end='') ``` 本記事はこの外側の処理をどうするか?というお話で、3通りの方法を検討していきます。 # 1. 素朴に場合分け ```hoge.py import argparse import s

元記事を表示

Blenderで選択したオブジェクト階層をすべてサーチするScript

Mayaで言うところのlistRelatives -adコマンド
Mayaでは1行で出来るのに、Blenderでは、簡単には出来ない(?)らしく、自分で再帰関数を作ってやらないと出来ないっぽい。

↓オブジェクトを1つ選択した状態で実行すると、下の階層のオブジェクト名がすべてprintされる

“`
import bpy

def return_hierarchy(ob):
hierarchyList = []
def recurse(ob):
hierarchyList.append(ob.name)
if not len(ob.children) == 0:
for child in ob.children:
recurse(child)
return
recurse(ob)
return hierarchyList

selectList = bpy.context.selected_objects
his = return_hierarchy(selectList[0])
for hi in his:
print(hi)
“`

hie

元記事を表示

PythonでShift_JISをUTF-8に変換

# TL;DR
[こちら](https://github.com/yuta0601/Conversion)のソースコードをご利用ください。

# 環境
Python 3.7.5

# ソースコード
“`Conversion.py
# -*- coding:utf-8 -*-
import codecs
import sys

args = sys.argv

def main():
shiftjis_path = args[1]
utf8_path = args[2]

# 文字コードを utf-8 に変換して保存
fin = codecs.open(shiftjis_path, “r”, “shift_jis”)
fout_utf = codecs.open(utf8_path, “w”, “utf-8”)
for row in fin:
fout_utf.write(row)
fin.close()
fout_utf.close()

if __name__ == ‘__main__’:
main()

“`

Shift_JISファ

元記事を表示

和訳:PEP 20 — The Zen of Python

# 概要
### 英語
> Long time Pythoneer Tim Peters succinctly channels the BDFL’s guiding principles for Python’s design into 20 aphorisms, only 19 of which have been written down.

### 日本語
> 長い間PythoneerであるTim PetersがPythonの設計に対するBDFLの基本理念を20の格言を19の文章に簡潔にまとめました。

# The Zen of Python
### 英語
> Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Spe

元記事を表示

ArcPyでフィーチャレイヤーに図形を描画

# ポイント(点)を描画

## 手順

1. ポイントタイプのフィーチャクラスを作成
– ここでは例として、名前を「TestPoint」と設定。
– 他はデフォルトのまま。
1. Pythonコードを実行
– フィーチャクラスに点データが作成される。
1. フィーチャクラスをレイヤーとして表示
– 点データが描画される。

## コード

“`python:insertPoint.py
import arcpy

# データ挿入用のカーソルを作成する。
# 第1引数: 操作対象のデータ名。事前に作成しておいたTestPointフィーチャークラス(点タイプ)を指定。
# 第2引数: データ内のフィールド名。TestPointにはデフォルトで作成された
# OBJECTIDとSHAPEの2つのフィールドしかない。
# OBJECTIDは操作対象にはしない(できない?そもそもするべきではないが…)ので、
# ここではSHAPEフィールド(のXY座標)を指定。
cursor = arcpy.da.Inser

元記事を表示

NumPyコードまとめ

#NumPyの基本的なコードのまとめ
機械学習を勉強する中で、NumPyをきちんと学ぶ機会があり、その中で競プロで使えそうなものがあったので、まとめてみました。
自分のメモ用的な面が強いです。
追加したいことが出てきたら追加します。
これ使うのに書いてないやん!みたいなことがあったら教えていただきたいです、、、

### ブルーインデックス参照
ブルーインデックス参照とは、[]の中に理論値(True/False)の配列を用いて要素を取り出す方法のこと。

“`python:qiita.py
import numpy as np

arr = np.array([2,5,6,7,8,9])
print(arr[np.array([True,True,False,True,False,False])])

#output : [2,5,7]

arr = np.array([2,5,6,7,8,9])
print(arr[arr % 2 == 0])

#output : [2,6,8]

“`

###ユニバーサル関数

ユニバーサル関数とはndarray配列の各要素に対して演

元記事を表示

opencv-pythonで右クリックイベント取得が上手く行かない

# 内容
タイトル通りです. opencv-pythonでマウスイベントを取得していたところ, **右クリックのイベント取得をしようとするとdefaultの機能でmenuが開かれてしまいました**.
調べた所なにもしないでも上手くいっている方もいるのでopencvのバージョンが原因かもしれません.

– 環境
Ubuntu 18.04 LTS
opencvはpipでinstall(多分これが原因)
– 日時
2019/11/20

# 解決法
[opencv 2.2 documentation » ユーザインタフェース](http://opencv.jp/opencv-2svn/cpp/user_interface.html#cv-namedwindow)
[stackoverflow/Why does a right click open a drop down menu in my OpenCV imshow() window?](https://stackoverflow.com/questions/56623487/why-does-a-right-click-op

元記事を表示

【Python】RxPY(3.0.1)で学ぶReactive Extensions【Rx】

# TL;DR
PythonでRx書きたいなぁって思ってRxPYを使ってみたら、なんか使い心地が思ってたのと違った。
どうやら、新しい仕様ではObservableのchainingはpipeという仕組みを使って書くらしい。
https://rxpy.readthedocs.io/en/latest/migration.html

従来↓

“`python
observable_object.map(lambda x:x*2) \
.filter(lambda x:x>3) \
.subscribe(print) \
“`
現在↓

“`python
from rx import operators as ops
observable_object.pipe(
ops.map(lambda x:x*2),
ops.filter(lambda x:x>3)
).subscribe(print)
“`

ただ、これを伝えたかった。

でも、あまりにもRxPYの日本語記事がでてこないので、ついでに初学

元記事を表示

Blenderで指定したオブジェクト直下にあるオブジェクトの名前をprintする

Mayaで言うとこのlistRelatives -cはコレ
objectNameのところに指定したいオブジェクト名を入れるだけ

“`
childrenList = bpy.data.objects[‘objectName’].children

for child in childrenList:
print(child.name)
“`

自分用メモ

元記事を表示

nginxでエラー文言を制御する

# はじめに
WEBサーバを開発する際に有名なnginxのエラー設定方法を調べたため、まとめました。
nginxはエラーが発生したときに静的なエラーをユーザに返却することができます。そのエラーをオリジナルのものにする方法をまとめました。

# 環境
– Ubuntu:18.04.2
– nginx:18.04.2

# インストール
“`apt install nginx“`でインストールするだけです。

# エラーの制御
普通エラーはpython側で制御しますが、タイムアウトなどでnginxがエラーを返却する場合があります。その際にデフォルトではnginxの文字がエラー文言に含まれセキュリティ的に問題があったり、システム全体の統一性を崩すため、オリジナルのエラーを返却したいことがあります。“`/etc/nginx/nginx.conf“`または“`/etc/nginx/conf.d/xxx.conf“`のserverコンテキストを修正することで可能になります。

## エラーのファイル
オリジナルのhtmlファイルやjsonファイルをユーザに返却する場合はserver

元記事を表示

お前らの多層パーセプトロンは汚い

# 「ところで俺の多層パーセプトロンを見てくれ」
「こいつをどう思う?」

「すごく…綺麗です…」

# 本題

出オチ感。

多層パーセプトロンをスクラッチする機会があったのでそのまとめ的な記事です。

今回はいい感じに汎用的にしつつscikit-learnみたいなインタフェースで学習が出来るように書きました。

隠れ層の層数やノード数、学習回数、学習率などなどだいたい全部のパラメータが引数を渡すことで調整可能です。バッチノーマライゼーションには挑戦した形跡がありますが、分散とか使ってうまいこと正規化したりはできていません。

この[記事](https://qiita.com/hppRC/items/af0fc49f78d9fed70def)に汎用的じゃないけど簡潔なものを載せているので、あわせてご覧ください。

やっぱある程度なんでも使えるように作ると複雑になりますね。もっと綺麗にしたい。下記は多層パーセプトロンに排他的論理和(よく見る)を学習させたやつです。

“`python

import numpy as np

class MultilayerPerceptron:

元記事を表示

Pythonで株式システムトレードのストラテジーを評価してみた。

システムトレードでは、過去の株価データに基づいて、ストラテジーを検証します。

例えば、以下の検証結果は、とある順張りの検証結果です。
![【分析結果】_名前なし__7順張り250日20日_20191118_pdf(2___12ページ).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256260/57ee7bfe-4f89-419e-099b-8a580f3baa09.jpeg)

しかし、それは一つのシナリオでの評価にしか過ぎません。

そこで、出来上がったストラテジーの勝率、利益率、損益率、資金量で複数回シミュレーションしたらどのような結果になるかPythonを使って評価してみました。

“`
#ライブラリーの導入
import pandas as pd
import matplotlib.pyplot as plt
import random

#評価用の関数
#asset 初期資本
#bet 資本の何%を投入するか
#probability 勝率
#win 平均利益率
#loss 平均損率

元記事を表示

2020年ソフトウェア開発の7つのトレンド

以下はTiara Brown Neilさん ( [hackernoon](https://hackernoon.com/@theneil248) )による記事、[7 Software Development Trends 2020 Revealed](https://hackernoon.com/software-development-trends-2020-revealed-spi305m)の日本語訳です。

# 7 Software Development Trends 2020 Revealed

![表紙](https://hackernoon.com/drafts/6i17k30ki.png)

知ってますか? ITプロジェクトの半分以上が失敗しています。
ソフトウェア開発業界の複雑さと動的な性質を認識している私たちの多くにとっては、それほど衝撃的な事実ではありません。

絶え間ない革新と進歩が伴うこの予測不可能な業界で生き残るためには、そのペースに合わせることが必須です。
賢い者は、ソフトウェア開発のサービスを利用するだけでなく、すべてのテクノロジーの長所と短所を比較し検

元記事を表示

courseraの字幕を読みやすくする.py

courseraの字幕をターミナルで読むのに読みやすくしたくて作りました。やったことは「。」を「。」と改行を2つにreplaceしました。

“`python:convert.py

import sys

args = sys.argv
f = open(args[1])
data = f.read()
f.close()
print(data.replace(‘。’, ‘。’ + ‘\n\n’))
“`

“`terminal:実行方法
python convert.py subtitle.txt
“`

元記事を表示

OTHERカテゴリの最新記事