Python3関連のことを調べてみた2021年01月09日

Python3関連のことを調べてみた2021年01月09日

typingを用いたdefaultdictの制限

# はじめに

[typingを用いたdefaultdict](https://docs.python.org/ja/3/library/typing.html#typing.DefaultDict)の公式ドキュメントがあります.

しかし,使い方は詳しく説明されていないため,まとめようと思います.

# defualtdict

defaultdictは,`callable`,かつ値を返すものを指定します.
例えば以下のようなものです.

“`python
from collections import defaultdict

d1 = defaultdict(int)
d2 = defaultdict(lambda: ‘hello’)
“`

`int`はCallableのため,指定できます.
そして,もしKeyがなければ,これらのCallableが呼ばれて初期値となります.

よって,`d1[‘hello’]`とすると,この時点でKeyが存在しなければ`int()`が実行されて0が入ります.

# typingを用いたdefaultdict

defaultdictは,V

元記事を表示

Raspberry PiでApache+WSGI+Python Flaskを使ってhttpsでWebアプリケーションを公開する

# 目的
Raspberry PiでPythonのFlaskフレームワークを用いたWebアプリを公開する。
その際、WSGIを用いてApacheと連携させることでSSLにも対応させる。

# はじめに
この記事は、Raspberry Piの初期設定、ドメインの取得、Apache2の導入、ポート開放、SSL証明書の取得等が済んでいる前提の記事です。
お済みでない方は、先にそちらの設定を行うことを推奨します。

[raspberry piでお手軽自家サーバー webサーバー編 – Qiita](https://qiita.com/picker/items/0466c55f9a03ebb0bd90)

# 使用環境
– Raspbian 10.7
– Apache 2.4.38
– Python 3.7.3
– Flask 1.0.2

## 環境構築
次のコマンドでmod_wsgiをインストールします。
Pythonのバージョンが2以下の方はインストールするものが違うので注意してください。

“`console
$ sudo apt-get install libapache2-mod-

元記事を表示

Pythonで文字列を検索

Pythonで文字列を検索して任意の文字列を含むか判定したり、その位置を取得する方法について。標準ライブラリのreモジュールを使うと正規表現でより柔軟な処理が可能。

### 任意の文字列を含むかの判定
in演算子を使う。
含まれていると`True`、含まれていないと`False`を返す。

“`python
text = “I like TWICE”

print(“TWICE” in text)
#True

print(“twice” in text)
#False

print(‘TWICE’ in text and ‘I’ in text)
# True
“`

### 任意の文字列の位置を取得
`find()`で文字列中の任意の文字列の位置を取得

第一引数に指定した文字列が呼び出し元の文字列に含まれている場合はその最初の文字の位置、含まれていない場合は **-1** が返される。

“`python
text = “I like TWICE”

print(s.find(‘TWICE’))
# 7

print(s.find(‘XXX’))
# -1

元記事を表示

Jリーグの勝ち点推移がグラフで見れるよ!

# 概要
## 記事概要
今回作ったサービスの紹介をしつつ開発の流れやつまずきポイントを紹介します。

## アプリ概要
– Jリーグのチームの勝ち点推移がグラフで見れる
– [こちら](https://yuta97.github.io/j-result-front-nuxt/)からサービスに飛べます。
– Jリーグのデータサイトからスクレイピングしてデータをためて、APIとして配信してフロントから表示させています。
![スクリーンショット 2021-01-08 19.01.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432257/988e1750-77c3-6847-493a-762da7963115.png)

# アプリ作成理由
– 川崎フロンターレの圧倒的な結果を視覚的にみたくなったから。

# 全体の構成
[フロント](https://github.com/yuta97/j-result-front-nuxt)のソースコードはGitHubにあげています。
## 構成図
![J勝ち点推

元記事を表示

中級者へのModern Python

# はじめに

## 本記事の読者対象

– Pythonの開発環境・ツールをさらに覚えたい方
– よりモダンに近いPython環境が欲しい方

## 想定していない方

– Python自体がはじめての方
– Python上級者

## 説明すること・しないこと

説明する

– ツールのおおまかな説明
– ツールを使用する理由・嬉しさ
– 参考になるドキュメント・URL

説明しない

– 具体的なコマンド
– 細かい文法

# Modern Python

大学院で研究をするようになってから、かなりの時間Pythonを書くようになりました。
なぜならば、研究で利用しやすいライブラリが豊富であり、かつ研究のようなイテレーションがはやいプロジェクトに対して非常に有効であるためです。

しかし、Pythonは短期的にコードを試して動作を変更できる分、安定した動作が難しくなってきます。
たとえば、C++などはコンパイルを通す必要があるため、設計をうまく考えて実装する必要があります。
一方、Pythonはスクリプト言語なので最悪`闇の設計`をすると設計が適当でもなんとかなってしまいます。

元記事を表示

[Day3]データベースへの接続準備

今回はデータベースの準備をしました。
結論から言うと何も進みませんでした、、、
しかし、得たものは大きい?!
#データベースの準備
Djangoにデフォで入っているSQLiteでやっても良かったのですが、参照しているサイトがMariaDBとPostgreSQLの解説をしていたため、そちらの設定を試してみました。
#Postgresqlの接続
まず、Postgresqlを試してみました。

“`bash
$ su postgres
#パスワード入力
“`

これでできるらしいのですが、postgresqlのパスワードと、パスワード変更がわからなかったことと、コマンドsuが調べてもよくわからなかったので諦めました。

#MariaDBの接続
MariaDBはMySQLと互換性があるらしく、大学でmySQL使用していたため、いけそうな気がしていました。
最初にターミナルにmySQLが入っていなかったのでhomebrewでmysqlをインストールするところから始めました。(コードは省略します)

で、以下のコードを入力すればできるらしいです。
{password}にはrootパスワードを入

元記事を表示

文字列の切れ目の一致率の計算【python】

#概要
切れ目の存在する2つの文字列において、切れ目の位置がどの程度一致しているかを計算するプログラムを書きました。
「〇〇で歌ってみた」というジャンルの替え歌において、本来の歌詞の文節の切れ目と替え歌歌詞の単語の切れ目がどの程度一致しているかを調べるために作りました。
#背景
「〇〇で歌ってみた」は特定カテゴリの名詞だけで本来の歌詞の発音を再現するように歌われた替え歌のことです。下図は童謡『ふるさと』の歌詞を駅名に置き換えた「〇〇で歌ってみた」の例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259353/c9f890e1-b72c-28c2-c9d0-6d5d9059130f.png)
「〇〇で歌ってみた」では替え歌歌詞の単語の切れ目と本来の歌詞の文節の切れ目がどちらかというと一致するように作られる傾向があります。理由は定かではありませんが、一つにはそのほうが歌いやすいからという理由が考えられます。いくつかの替え歌において、どの程度一致しているかを調べたくなったので、2つの文

元記事を表示

Python3のプログラミング関数 個人的まとめ

#初めに
これは、競技プログラミングなどで使用するPython3のライブラリや関数の個人的な備忘録です。

### 順になっているリスト
“` python3:
# startからendまでのリスト
# [1,…,100]が欲しいなら、start=1,end=100
li = list(range(start,end+1,step))
“`

### リストの要素を反転
“` Python3:
li.reverse()
# または
li[::-1]
“`

### リスト内の要素の合計
“` Python3:
sum(li)
“`

### リストをソート
“` Python3:
# 元のリスト昇順をソート
li.sort()
# 降順
li.sort(reverse=True)

# リストを昇順にソートしたリストを返す(元のリストは変更されない)
li_2 = sorted(li)
# 降順
li_2 = sorted(li,reverse=True)
“`

#自作の比較関数でリストをソート
“` Python3:
from functools import

元記事を表示

極座標で等高線図を作成(Contour maps in polar coordinate)

# はじめに
 Pythonで極座標形式の等高線図を描く方法を紹介します.[matplotlibの公式ドキュメント](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.contour.html)を参考にしたので,詳しくはそちらをご覧ください.

 本記事では,描き方の使用例として海の波の様子を表示させます.従って,変数は波の高さ・周波数・波向きの3つです.極座標形式の等高線図の周方向が波向きを,中心からの距離が周波数を,等高線の色が波高さを示します.
# 本編
## 準備
まずはモジュールのインポート

“`python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as cm
“`

続いては表示させたいデータをインポート.
本記事では,あらかじめ用意したcsvファイルを読み込みました.ファイルは25行36列のデータです.行は周波数を表し,列は波向きです.

“`python
a =

元記事を表示

PythonでProtocolを使って静的ダック・タイピング

この記事はニフティグループ Advent Calendar 2019の14日目の記事です。
昨日は@mito1296さんの「Terraformで立てたec2インスタンスをAnsibleで管理してみる」でした。
同様の問題に以前悩まされたことがあったのでタグ付けは非常に綺麗な解決方法だなと感心しました。
機会があれば、うちのチームでも導入したいですね!!

# TD;LD
Pythonは型安全で無いので大きめのプロジェクトになると心理的な安全が担保できないので敬遠していました。
しかし、Python3.5以降typingが導入されmypyと組み合わせることで、少し大きめのプロジェクトでもコーティングする際に心理的な安全を得ることができるようになったので中規模の開発に採用できるようになりました。

今回は、python3.8から`typing.Protocol`が正式に追加されたようなので紹介してみます。

# typing.Protocolとは

詳しくは、以下を見てください。
https://docs.python.org/ja/3/library/typing.html#typing

元記事を表示

cv_bridgeをpython3(virtualenv)で使いたい時の解決法

## 経緯
ROSを使って色々イジイジしていたときのことです。カメラの入力ノードからRGBデータが送られてくるので、それを別のノードで受け取りたいと思い、cv_bridgeを使おうとしていました。下のような感じです。

“`python3
from cv_bridge import CvBridge

def prediction(msg):
bridge = CvBridge()
img = bridge.imgmsg_to_cv2(msg, “bgr8”)
“`
しかし、ビルドして実行してみたところ、以下のようなエラーが発生しました。

“`
File “/opt/ros/melodic/lib/python2.7/dist-packages/cv_bridge/core.py”, line 91, in encoding_to_cvtype2
from cv_bridge.boost.cv_bridge_boost import getCvType
ImportError: dynamic module does not define module

元記事を表示

cx_Freezeでjanomeを使ったプログラムをエグゼ化する。

昔、仕事中楽したいことがあってjanomeをインストールし、exe化しようとしてハマったところを思い出しながら書いた記事です。
そのためやや古い情報になっているかもしれません。
# 環境
+ Windows10 pro
+ python 3.8.5
+ Cx-Freeze 6.2
+ janome 0.4.0

#pyinstallerではだめだったのか。
調べてみると pyinstaller を使ってエグゼ化するものはあったものの Cx-Freeze はなかった、しかしGUIを入れる必要があったのでそれを搭載した状態でpyinstallerにてビルドしようとしたところ、なぜかまともにできなかったのでCx-Freezeを使うことにした次第です。

## 普通にsetup.pyを書いてビルドに成功、かと思いきや。
何やらエラーが発生、なぜならば
**Cx-Freezeがjanome の中のsysdicを引き出さずにビルドしたからです。**
しょうがないのでjanome のsysdicを手動で

exe.win-amd64-3.8/lib/janome/

にコピーして解決しました。

#

元記事を表示

【Python】icrawlerで簡単に画像を集めよう!

機械学習の画像集めにicrawlerを利用したのでその紹介です。

# icrawlerとは
pythonでwebクローリングを行い、画像を集めるためのフレームワークです。
非常に短いコードを記述するだけで画像を集めることができます。
# インストール
pip

“`
$ pip install icrawler
“`
anaconda

“`
$ conda install -c hellock icrawler
“`
# 使い方
“`
from icrawler.builtin import BingImageCrawler

crawler = BingImageCrawler(storage={“root_dir”: ‘./images’})
crawler.crawl(keyword=’猫’, max_num=100)
“`
– `root_dir`に画像の保存先ディレクトリを指定します。
– `keyword`に集めたい画像のキーワードを指定します。
– `max_num`に集める画像の枚数を指定します。
– `BingImageCrawler`の部分を他のIm

元記事を表示

python3.8でlambda-uploader使用した時にpython3.8が見つからないとエラーを吐かれた時の原因調査

##事の発端
AWSのLambda上にそれなりに複雑になる予定のpythonの関数を追加する事になったが、lambda上ではpipが使用できないため、外部モジュールを使用する関数を使用する場合、
**[一つ一つ使用している外部モジュールを\Python〇〇\Lib\site-packages\] から探し出し纏めてzip化するという賽の河原のようなおちねり作業が発生する。**
当然ながら人間は信用ならない生物のため、こんな作業を毎回手作業でやろうものなら**パンジャンドラムとマーマイトをガンギメした某ブリテンの暴走青列車(ブルートレイン)の如く事故が発生する** 

**事故は起こるさ? 事故は人間が起こすものなんだよ!**
(※加えてこの作業にとても時間が取られる)

そこでlambda-uploaderを使用し、外部モジュールの抽出作業を任せてしまうことで効率化と事故発生率を少しでも下げようと画策した。

##作業環境
– Windows10(64bit)
– python3.8(64bitインストーラ使用)3.8なのは2020/12月末時点でlambdaがpython3.8以降

元記事を表示

[Day 2]プロジェクトの生成

January 7, 2021
[←前回:Day1 Djangoの開発環境](https://qiita.com/kizashi/items/e20a7a48c2879e72ab95)
#プロジェクトの生成
今回は”mysite”という名前でプロジェクトを作成します。

“`bash
$ source venv/bin/activate
(venv)$ django-admin startproject myproject
“`

生成されたプロジェクトの中身です。

“`bash
.
|–manage.py
|–mysite
|–__inin__.py
|–settings.py
|–urls.py
|–wsgl.py
“`

#言語設定
今のままでは英語なので日本語に直しましょう。
mysiteディレクトリのsettings.pyファイルを編集します。

“`bash
$ emacs settings.py
“`

から

“`bash
– LANG=’en_us’ #となっている箇所を
+ LANG=’ja’ #’

元記事を表示

[Day 1]Djangoの開発環境を整える

January 6, 2021
#はじめに
今回このようなものを作成しようと思った意図は、将来の自分がこの記事を見返して自分の成長を確認するためです。
未来の自分が何をやっているか検討もつきませんが、「昔はこういうことをやっていたよ」ということを一目でわかるようになっていればいいです。

#pythonの仮想環境の準備

最初にDjangoの開発を進めていく準備をします。
ここではすでにpython3がインストールされていることを前提をしています。

今回はvenvにて開発用に仮想環境を作ります。
今後も基本的にvnev環境で操作していきます。

“`bash
$ python3 -m venv venv
“`

場合によっては「python3」の箇所が「python」の場合もあります。
これでvenvディレクトリが作成されたかと思います。

では、作成したvenv環境を有効化しましょう。

“`bash
$ source venv/bin/activate
“`

これで有効化されました。
venv環境から出たい場合は以下のコマンドを入力すればおk。

“`bash
(v

元記事を表示

Django初心者がハマったエラーと解決法のメモ

## やったこと
pythonでwebアプリを作ってみたくて、[Udemyの初心者講座](https://www.udemy.com/course/django-3app/)をやってみました。

VScodeでソースを編集&Linuxの操作しつつ、Djangoでアプリを動かしDBはSQLiteを使っていく講座でした。

##開発環境
– VScode:1.52.1
– Django:3.1.4
– python:3.8.5

##環境構築
venvで仮想環境構築後、Djangoパッケージのインストールを行ったのにVScodeから”Unable to Import Django~”とチェックが入った。

VScodeのLinterが参照するPythonファイルが仮想環境にインストールしたものと違っていた。
設定から変更可能。選択肢が自動で表示されるがディレクトリを直接指定することも可能。

##プロジェクト設定
アプリで登録した画像ファイルが指定のディレクトリに保存されない。

プロジェクトのsettings.pyにて”MEDIA_ROOT”と設定すべき変数名を”MEDIA_DIR”と

元記事を表示

Python数学シリーズ③ 行列式(置換)

## このシリーズについて
数学の理解を深めるためにpythonで実装しながら、理解を進めてます。当分は線形代数やろうと思います。数学はそんなに好きではありませんでしたが、最近好きになってきたかもしれません。シリーズの目次は[こちら](https://qiita.com/Hiroaki-K4/items/90b2f86558ef825e5d21)。間違いやもっといい方法など、ご意見あれば気軽にコメントください。

## 行列式と置換
行列式は以下の式で定義されます。[参照元](https://mathtrain.jp/determinant)
![Screenshot from 2021-01-05 23-00-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/770f8c45-35db-a66a-fa39-975a963c338d.png)
いきなり、行列式を実装しようとしても色々と知識が足りなかったので、とりあえず置換をまずやっていこうと思います。
置換は以下のように定義されます。[

元記事を表示

Pythonで環境変数にアクセスする方法

# 環境変数にアクセスする方法

### モジュールのインポート

“`
import os
“`

### 環境変数にアクセスする

Pythonでは、osモジュールの`environ`に環境変数が格納されている。
型は、マップ型です。

“`
user_name = os.environ[‘USERNAME’]
print(user_name)
“`

また、`os.getenv(key, default=None)`を使用することでも取得できます。

“`
user_name = os.getenv(‘USERNAME’, ‘dummy’)
print(user_name)
“`

`os.getenv()`は第1引数で環境変数のキーを指定します。
指定されたキーが存在していない場合は、第2引数の値を返却します。

# まとめ

環境変数にアクセスする方法は2つある。

* 1つ目は、`os.environ`を使用する方法
* 2つ目は、`os.getenv()`を使用する方法

場合によると思いますが、単純にアクセスするだけなら、環境変数が存在していない場合に任意の

元記事を表示

privateでないAPIがscikit-learn v0.24で削除されたために、unpickleできない経験をしました

scikit-learn v0.22 より前に作った`MultiLabelBinarizer`が、scikit-learn v0.24以降の入った環境でunpickleできないことを示します。
ちょっとハマった身から言えること:**pickleする環境とunpickleする環境のバージョン違いにはご注意ください**

## 環境

macOS
Python 3.7.3

## 手順

### `scikit-learn` 0.22より前

scikit-learn-0.21.3

ドキュメントのExamplesを用います
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MultiLabelBinarizer.html#sklearn.preprocessing.MultiLabelBinarizer

experiment.py

“`python
import pickle

from sklearn.preprocessing import MultiLabelBinarizer

m

元記事を表示

OTHERカテゴリの最新記事