Python関連のことを調べてみた2021年07月15日

Python関連のことを調べてみた2021年07月15日

ラズパイ4でサーボモータを動かすpigpio

ラズパイ4 カーネル5.1.0(2021.5.7版 32bitおすすめ全部入り)を使用しています
ラズパイの紹介記事でよく見かけるGPIOライブラリ RPi.GPIO でサーボモーターをPWMで制御するとパルス幅などに揺らぎがあるためにサーボモーターが止まるはずなのに、ジッ、ジッ、と動いてしまいます。

GPIOにアクセスするライブラリはいくつかあるようですが、 pigpioを使ってみることにしました。

##pigpioのインストール
公式ページのダウンロードリンクhttp://abyz.me.uk/rpi/pigpio/download.html
ここに、以下の2つのコマンドを打つとあるので端末から実行します。
sudo apt-get update
sudo apt-get install pigpio python-pigpio python3-pigpio
今回は、実行時に既に最新板があるよ!と表示されたので、32bitおすすめ全部入り版はインストール不要かも知れません。
使用前にデーモンを起動します。
sudo pigpiod   pigpioではなくdが付いています。
p

元記事を表示

全てを再現可能に:機械学習とデータレイクハウスの出会い

[Reproducible Machine Learning with Data Lakehouse \- Databricks Blog](https://databricks.com/blog/2021/04/26/reproduce-anything-machine-learning-meets-data-lakehouse.html)の翻訳です。

機械学習は、イノベーションの加速、パーソナライゼーション、需要予測など数えきれないユースケースで、企業やプロジェクトに前例のない価値を付加することを証明しました。しかし、機械学習(ML)は、変化し続けるツールや依存関係を伴う数多くのデータソースを活用し、このことはソリューションが流動的かつ再現が難しいものにしています。

誰もモデルが100%正しいことを保証できませんが、再現可能なモデルと結果を生み出したエクスペリメントの方が、そうでないものよりも信頼できるものと言えます。再現可能なMLエクスペリメントは少なくとも以下を再現できることを意味します:

– トレーニング/検証/テストデータ
– 計算
– 環境
– モデル(および関連付

元記事を表示

系列内の要素をシャッフルする前と後の間の編集距離の分布について

# 前置き

突然ですが、以下のようなあるリスト source があった時、

“`python
>>> source = [0, 1, 2, 3, 4, 5]
“`

このリスト内の要素をランダムにシャッフルして得られるリストを target とします。
例えばこんな感じです。

“`python
>>> target = [2, 1, 3, 5, 4, 0]
“`

この時、source と target の間の距離を[編集距離](https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E8%B7%9D%E9%9B%A2)を使って測ると、以下のように `4` になります。

“`python
>>> from my_utils.algorithm import levenshtein_editops_list
>>> levenshtein_editops_list(source, target)
[(‘r

元記事を表示

SudachiPyで形態素単位に分割|つぶやきをWordcloudで可視化③

私事ではありますが、2020年5月にコーギーという中型犬をお迎えしました。
[愛犬のブログ](https://corgi-komugi.com/)を運営してますので、見てもらえると嬉しいです。

corgi_komugi

「コーギー関連のツイートをwordcloudで可視化したい!」と思い立ち、以下の4項目を実施しました。

1. [TwitterAPIでツイートを取得](https://qiita.com/komugi_papa/items/e5d7fb6dafaf68caa1e0)
2. [正規表現を用いてツイートを整形](https://qiita.com/komugi_papa/items/9b21cc0b5c612b5c0521)
3. SudachiPyで形態素単位に分

元記事を表示

Djangoに0から入門

#はじめに

本記事では、Python初心者でもDjangoでWeb開発をスタートするために必要な環境構築の手順をまとめました。ただし、筆者がDjangoに関する知識がほぼ0の状況から作成した内容であるため、技術的に誤った記述をしている可能性があることをご承知おきください。

#目次
– [環境構築](#環境構築)
– 開発環境
– Pythonインストール
– Djangoインストール
– PyCharmインストール
– [簡単なアプリケーション作成](#簡単なアプリケーション作成)
– Djangoプロジェクトを作成
– PyCharmの設定をする
– Webアプリケーションの動作確認
– アプリケーションを作成する
– ページにアクセス
– [おわりに](#おわりに)
– [参考文献](#参考文献)

##■環境構築
###◇開発環境
| 種別 | 名称 (バージョン) |
|:———–|:——————–|
| OS | macOS

元記事を表示

初期化済みの配列を用意する

## 初期化済みの配列
Pythonで初期化済みの配列がほしいことがあります
例えばこんなの

“`python
ARRAYNUM = 3
array = [0, 0, 0]
“`

しかしこれでは、ARRAYNUMが生きてません
そこでこんな書式が便利です

“`python
array = [0] * ARRAYNUM
“`

もちろん、Noneや空文字での初期化も出来ます

“`python
arraynone = [None] * ARRAYNUM
arraystr = [”] * ARRAYNUM
“`

## 配列の配列
もちろん配列の配列もやっちゃいましょう

“`python
#間違ったコード
arrayarray = [[]] * ARRAYNUM
“`

これは以下のコードと等価です

“`python
a = []
arrayarray = [a, a, a]

# 同じインスタンスなのでどこか一箇所を変更すると全部変わる
arrayarray[0].append(0)
# aの中身は[[0], [0], [0]]
“`

同じインスタン

元記事を表示

半分にするテク

# 3^n DP でループ回数を半分にするテク
「$3^n$ $\mathrm{DP}$ でループ回数を半分にするテク」、略して「半分にするテク」について書きます。

## 半分って何?
$3^n$ $\mathrm{DP}$ と呼ばれるアルゴリズムがありますね。部分集合を列挙して処理するやつです。普通にやるとループが $3^n$ 回ぐらいになるけど、それを $3^n/2$ 回ぐらいにするためのテクを紹介します。

## そもそも 3^n DP って何?
$U = \\{1,\ 2,\ \cdots,\ n\\}$ とします。競プロ的には $n$ の上限は $15$ ~ $18$ ぐらいのことが多いです。 $U$ の各部分集合 $S\subset U$ に対して $f(S)$ が前計算されているとします。さらに $S\subset U$ に対して $g(S)$ が、「 $S$ の空でない真部分集合 $T\subsetneq S$ に対する $f(T)$ および $g(S\setminus T)$ たち」から計算できるとします。さらにこの計算量は真部分集合の数に対して線形、すなわち

元記事を表示

UnityとPython間でのデータのやり取り

#背景
Unityで計測したデータをPythonに送って、機械学習で推定した結果を可能な限りリアルタイムでUnity側に反映させたかったが、調べてもサーバーを使うものしか見つからず、リアルタイムにやり取りできなかった.

#目的
可能な限りリアルタイムでUnityとPythonでデータをやり取りする.

UnityとPythonのコード:https://github.com/sakamo1290/DataExchange

Unity:2019.4.28f1
Python:3.7.6

#方針
csv(Unity2Python.csvとPython2Unity.csv)を介してデータをやり取りする.

#実装
Unity側でFixedUpdateが呼び出されるたびにインクリメントされる変数(count)をcsvを介してやり取りする。

###Python側
まずPython側でデータを読み書きするスクリプトを作る。

“`python:DataExchange.py
#実際に使うときはやり取りするデータは1つではないため、pandasのDataFrameでcsvに読み書きする
imp

元記事を表示

“ワンピースのキャラクター”を判別するアプリを作ってみた

#はじめに
AidemyのWebアプリコースを受講し、その最終成果物の作成についてを記事にしました。
まず、どのようなアプリを作るか悩みましたが、単純に自分の好きなものとして、漫画が好きだったということで「ワンピース」のキャラクターを判別するアプリを作ることにしました。

#目次
[1. 開発環境](#1-開発環境)
[2. 画像収集](#2-画像収集)
[3. 学習データとテストデータの作成](#3-学習データとテストデータの作成)
[4. 学習モデルの作成と学習](#4-学習モデルの作成と学習)
[5. Webアプリ画面作成](#5-webアプリ画面作成)
[6. アプリのデプロイと動作確認](#6-アプリのデプロイと動作確認)
[7. 考察・感想](#7-考察感想)
[8. 参考文献](#8-参考文献)

#1. 開発環境
Windows10 Home
python 3.8.8
Google Colaboratory
Visual Studio Code (1.58.0)

#2. 画像収集
まず、機械学習を行うにあたっての画像収集です。
今回のアプリでは、主要キャラクター「麦わ

元記事を表示

【論文要約】GAN一族のまとめ

## はじめに
華麗なるGAN一族のサーベイを行いました。GANの名称・論文URL・概要・ネットワーク構造・結果(生成画像)のフォーマットで記載しています。

## 初代GAN
https://arxiv.org/abs/1406.2661
#### 概要
ガウスノイズから偽物画像を生成するGeneratorと、本物画像と偽物画像を識別するDiscriminatorの二つのネットワークを競わせるように学習します。偽物画像が本物画像と見分けがつかないようになることが目標となります。理論的な保証はMin-Max-GANという定式化で行われますが、実際は非飽和GAN(NS-GAN)という独立した損失関数として定式化する方法で学習させています。

#### ネットワーク構造
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614092/5c3bc7ed-5013-b372-2337-a612f073980f.png)
[画像引用元](https://www.imagazine.co.jp/gan%

元記事を表示

残プロ 第-42回 ~カメラで撮ったレジュメをいい感じに~

# 台形検出+射影変換

レジュメなんかをデータ化する際,印刷機でスキャンできればいいのですが,忙しいとスマホのカメラで済ませることもあるかと思います.そうするとレジュメが曲がっていたり,机の余計な部分が移ってしまいます.
下記のプログラムでは,射影変換を行うことにより,スキャン風のいい感じな画像に補正してくれます.

~~~ python:
import sys
import cv2
import numpy as np

def image2scan(src):
# extract white
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
lower_white = np.array([0,0,100])
upper_white = np.array([180,45,255])
mask_white = cv2.inRange(hsv, lower_white, upper_white)
res_white = cv2.bitwise_and(src, src, mask= mask_white

元記事を表示

【Heroku】”code=H14 desc=”No web processes running”を解決する

#はじめに

久しぶりにHerokuを触っていたら,何故か簡単な”Hello world”さえも,エラーで動かなくて
かなり時間を取られました.
そのため,備忘録として記録しておきます.

#開発環境
開発環境は以下のようになっています.
・Heroku(無料版)
・Flask

#エラー

以下のエラーに悩まされました.

“`
…code=H14 desc=”No web processes running”…
“`

https://qiita.com/rebi/items/efd1c36f0a9e46222d80

こちらの記事のような解決もできるかもしれません.
しかし,自分はもっと初歩的な部分でつまづいていました…
そもそも,このエラーはwebサービス(Flask)が立ち上がってないよ!と言っています…

##正常に動く場合

ちゃんと,Flaskが動くと,以下のようなログが確認できます.
これは,herokuのアプリ管理ページの右上More>View logsで確認できます.

![img2.jpg](https://qiita-image-store

元記事を表示

eval関数を使わずに四則演算式を解く

# はじめに
タイトルにある通りです。
少しだけ詳しく解説します。
最初はeval関数を全く知らず、知ってる知識だけで解いてみようと思ったのがきっかけです。
プログラムが完成した後、どんなアルゴリズムがあるのかなって調べてみたらeval関数なるものを見つけて、あまりにも簡単に答えが出せてしまったので笑ってしまいました。

# 問題
以下の計算式が文字列として与えられたとき、解を求めよ。

“`
‘(((3+1+6+2+3+1234+234+8)/3)+2*235-442+2312)/9+6*(3)+(1+1+1*5/90)=’
“`

# 回答プログラム
### 割り算を掛け算に、引き算を足し算に
与えられた式を一つずつ見ていき、以下の表のように対応します。

|変換前の四則演算記号|変換後の四則演算記号|備考|
|:—:|:—:|:—|
|/|*|変換後の数字は分数にする|
|-|+|変換後の数字の前に「-」をつける|

“`python
def chg_subtosum_divtomul(formula):
tmp_list = []
tmp_nu

元記事を表示

Flaskで画像が表示されない(備忘録)

#はじめに
普段はwebアプリを制作するのに,herokuでFlaskを動かして遊んでいます.

初歩的なことですが,単なる画像をhtmlで表示するのに
少しつまずいたので,備忘録として残しておきます.

いろんな要因で画像が表示されない場合があると思いますが,
その場合は,以下のようなマークが出ると思います.

![non_pic.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262828/20916b32-b25e-4fbf-6ade-aff69b8104e2.jpeg)

原因としては,ファイル名を間違えていたり…,ファイル自体が存在していなかったり…

#TL;DR

“static_folder”で静的なファイルの置き場所を明示してあげると動く場合があります.

“`python
app = Flask(__name__, static_folder=’./templates/images’)
“`

#詳細
細かい状況をまとめます.

###ファイル構造
Flaskのコード

元記事を表示

Python歴5年の私が最近はじめて知ったPythonの機能(小ネタ)

## enumerateの第二引数で開始番号を指定できる

通常0から番号が振られるところを任意の番号で始められる。

“`python
data = [“a”, “b”, “c”]
for i, x in enumerate(data, 2):
print(i, x)
“`

出力

“`
2 a
3 b
4 c
“`

## デフォルト値のスマートな与え方

`x = value or default_value`という構文で、valueがNoneや0の場合はxにdefault_valueが代入される。

“`python
a = None
b = 10
x = a or 1
y = b or 1
print(x)
print(y)
“`

出力

“`
1
10
“`

## listにcountというメソッドがある

値の出現回数をカウントできる。

“`python
data = [“a”, “b”, “a”, “c”, “c”]
print(data.count(“a”))
“`

出力

“`
2
“`

元記事を表示

CSV書き出し方法

with open(csv_file_path, ‘w’, newline=””) as csv_file:
# データの書き込み
writer.writerow({‘code’: stock_code,
‘timestamp’: str(time),
‘benefit_today’: benefit_today,
‘benefit_subtotal’: benefit_subtotal,
‘open1’: row1[‘open’],
‘low1’: row1[‘low’],
‘high1’: row1[‘high’],
‘close1’: row1[‘close’],

元記事を表示

DataFrame 行・列の追加

#行を追加
DataFrame型のdfに対して下記を実行

“`python
df.append(“Series型のデータ”, ignore_index = True)
“`

“`python
import pandas as pd

fruits = [“apple”, “orange”, “banana”, “strawberry”]
data1 = [10, 5, 8, 12]
data2 = [30, 25, 12, 10]
data3 = [30, 12, 10, 8, 3]
series1 = pd.Series(data1, index = fruits)
series2 = pd.Series(data2, index = fruits)

fruits.append(“pineapple”)
series3 = pd.Series(data3, index = fruits)

df = pd.DataFrame([series1, series2])
df = df.append(series3, ignore_index = True)

df.ind

元記事を表示

pythonを便利に使おう第五回! 数学編!

#初めに
 数学というのは「数学」というルールに基づいて式を組みたてていく、言わばパズルのようなものです。木組みのパズルとは違い、これほどまでに難しいのは、3つほどの理由があるでしょう。
 まず1に、素材が大きすぎるのです。そりゃ、自然と並走するような形で数学という概念を成り立たせているわけなのですから、木組みのパズルよりも大きくないということはないのです。なんせ比較対象たる木組みのパズルさえも、自然の集合の要素に過ぎないのですからね。
 そして2に、パズルの複雑さでしょう。木組みのパズルは、どれがハマりどれがはまらないのかを見ずとも、パターンをたった数百通り組み合わせるというのに、自然という正解の形に数学を整えるには、何億も何兆も複雑なパズルを解かなくてはいけないのです。
 最後の3は、記憶の難しさでしょうか。上2つの例を納得していただいた方なら解ると思いますが、パズルというのは大きくなるほど、また複雑になるほど頭を使い、なお何かしらを記憶しなくてはいけないのです。
 それで、数学の難しさを解いて何がしたいのかというと…。
 ただ難しいなと感じた問題を解きたかっただけなんですよね^^

元記事を表示

pythonによる二分探索

## 概要
atcoderなどで二分探索の問題が出た際に、さらっと参照するための記事です。
細かな説明は、[アルゴリズムの解説サイト](https://algo-logic.info/binary-search/)などを見た方が良いと思います。

## 二分探索について
二分探索とは、集合{1,2,3,…,N}が線形的に変化する際に、端から順に調べるのではなく、
真ん中を探索していく方法です。

例えば、[1, 3, 5, 7, 9]の配列から4より大きい数の個数を求める場合、配列の数字は単調に増加しているため、真ん中(インデックス2)の5が
4より大きければ、5より右側は全て4より大きいことが分かります。
そうすると、今度は5より左側のみを調べればよいので、[1, 3, 5]の真ん中の3を調べて4より小さいから…
といった流れで、わずか2回の計算で配列のどこからどこまでが4より小さいのかが分かります。

今回の場合は、配列の長さが5だったため、全探索の回数**5**に対して、二分探索では**2**と差が少なかったですが、
Nが大きければ大きいほどその差は歴然です。

以下から

元記事を表示

DataFrameでインデックスとカラムを設定する

##概要
DataFrameでは、行の名前をインデックス、列の名前をカラムと呼ぶ。

######indexを指定なしで作成した際、インデックスは0から割り当てられる。

“`python
import pandas as pd

fruits = [“apple”, “orange”, “banana”, “strawberry”]
data1 = [10, 5, 8, 12]
data2 = [30, 25, 12, 10]
series1 = pd.Series(data1, index = fruits)
series2 = pd.Series(data2, index = fruits)

df = pd.DataFrame([series1, series2])

display(df)
“`
![スクリーンショット 2021-07-14 20.34.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1736279/48c5d64e-1826-4fdf-2b4f-e9e9d2a7

元記事を表示

OTHERカテゴリの最新記事