Python関連のことを調べてみた2020年01月25日

Python関連のことを調べてみた2020年01月25日

Django/Related objects(add, create, remove, clear, set)まとめ

## 書くこと
add, create, remove, clear, setってどう使うんだっけというのを何度か調べてしまっていました。
その度英語を読むのは面倒なので、日本語でまとめておきます。
[Django Documentation / Related objects reference](https://docs.djangoproject.com/en/3.0/ref/models/relations/)

### 用意する Model,データ
“`
from django.db import models

class Reporter(models.Model):
pass

class Article(models.Model):
title = models.CharField(max_length=255, null=True)
reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
“`

“`
r1 = Reporter.objects.create(

元記事を表示

Pythonで、デザインパターン「Proxy」を学ぶ

GoFのデザインパターンを学習する素材として、書籍「[増補改訂版Java言語で学ぶデザインパターン入門](https://www.hyuki.com/dp/)」が参考になるみたいですね。

ただ、取り上げられている実例は、JAVAベースのため、自分の理解を深めるためにも、Pythonで同等のプラクティスに挑んでみました。

# ■ Proxy(プロキシ・パターン)
Proxyパターンは、プログラミングにおけるデザインパターンの一種。Proxy(プロキシ、代理人)とは、大まかに言えば、別の物のインタフェースとして機能するクラスである。その「別の物」とは何でもよく、ネットワーク接続だったり、メモリ上の大きなオブジェクトだったり、複製がコスト高あるいは不可能な何らかのリソースなどである。
Proxyパターンのよく知られている例として、

元記事を表示

C# GUIからPythonのコードを実行する

#はじめに
[C# GUIアプリケーションからPythonスクリプトを実行する](https://qiita.com/kimisyo/items/0879fc9f1315e2abfd1f) の延長で、GUIから直接入力したpythonのソースコードを実行できるようにしたという話。

#作ったもの

画面は以下の通りだ。画面ではnumpyにより計算を実行した結果を表示している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329816/f99162e7-203a-e788-6cf9-e558d78bfd57.png)

また文法が違っている場合は以下のようにエラーが表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329816/ab7a6c51-01fb-8257-3053-5b6464a1588f.png)

#ソース
ユーザが入力したPythonのコードをpythonスクリプ

元記事を表示

[WIP] Fluent Python 勉強メモ

みなさん、こんにちは、えいりんぐーです。

この記事は [Fluent Python](https://www.oreilly.co.jp/books/9784873118178/) の勉強メモ録です。随時更新されます。

正直プログラミング言語の教科書を真面目に読み通すことはあまりないのですが、言語について解説している本をちゃんと読むと、実務でアドホックに身につけるものとは違って、ちゃんとしたコーディング技術や発見があります。
ということで、Fluent Python で気になったことを適宜メモしていきたいと思います。

# 1章

**P.8 脚注**
>Python 2では明示的に `FrenchDeck(object)` と記述する必要がありますが、Python 3ではデフォルトです。

…なん…だと…!?

# 2章

**P.45**
> ### 2.7 list.sortと組み込み関数sorted
list.sortメソッドはリストをインプレイスでソートし、コピーは作成しません。新規にリストを作成せずに対象のオブジェクトを変更していることは、`None`が返さ

元記事を表示

pythonの標準入力受け取りinput()とsys.stdinはどっちがいいの?

なんとなく`input()`を避けて`sys.stdin`を使ってきたけど実際どっちがいいのか?を速度とコード量的に比較してみました。
###結論 sys.stdinを使え
sysを使った方が速い。

 
###比較方法
– オンライン実行環境の[paiza.io](https://paiza.io/ja) を使用(特に意味は無し)。
– `1 2 3 4`の様な数字+空白のフォーマットを**1万行**、標準入力として渡す。
– `time`を使って、標準入力をintに変換しlistに格納するまでの時間を計測。

#input()の動作速度
“`input()のコード例.py
data_list = []
data_all = [input().split() for i in range(10000)]#データ一括取得
for d in data_all: #データのint化
data_list.append([int(n) for n in d])
“`
動作時間: 約21.1[msec]

#sys.stdinの動作速度
“`sysのコード例.py
data_li

元記事を表示

blenderのpythonスクリプト入門してみた_その02

# 続きを3年後に書くとは……
* [blenderのpythonスクリプト入門してみた_その01](https://qiita.com/muripo_life/items/42d7f49aa99077f52cb0)

三年前にBlenderのPython コンソールに触り、3年ぶりに触る機会がでてきたので、続きを書いていきたいと思います。

# Blenderのバージョン
Blender2.8.1a:大幅なUIとAPIの変更があったみたいです。

# Blender上のデバック環境
以下のような配置にしました。

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102634/4e277d8e-c6fa-dbb1-e88f-5473bc623b0f.png)

図の表示の左下に `Text Editor` 右下に `Python Editor` を配置しました.

# 最低限の点データを表示してみる.
スクリプトは、参考の[Blender + Pythonでポイントクラウドを可視化する](h

元記事を表示

データ分析者の為の VS Code スニペット集

## 初めに

日頃,コードを書いていると,同じ内容を何度も書いていたり,検索していることが多々あります.そんな時,スニペットを登録しておくと,少ない手間で入力できるのでコーディングが捗ります.今回は,データ分析時に役立つスニペットを紹介します.

## 設定方法

VS Code でスニペットを登録する方法は,以下を参照してください.

– [VsCodeのスニペットのススメ](https://qiita.com/xx2xyyy/items/fd333368db548167f15a)
– [Visual Studio Codeで、ユーザー定義スニペットで楽をする](https://qiita.com/kz_kazuki/items/d26946c1e7169847aeef)
– [Visual Studio Codeでスニペットを定義する〜初心者にはあまり知られていないかもしれない機能を添えて〜](https://qiita.com/a4rcvv/items/7903502d779bd2077aaf)

## 内容

以下のライブラリに関するスニペットを作成します.

– jobli

元記事を表示

paizaとか競技プログラミングで使う標準入力をintで一括取得する(python)

paizaとか競技プログラミングやっている時用の標準入力受け取り&int化。
入力値は`1 2 3`の様に間にスペースが入ってたりすることを想定してます。
input使うのがなんか嫌なので`sys`使ってます。実行速度もsys使った方が速いのでいいのかなぁと。
[pythonの標準入力受け取りinput()とsys.stdinはどっちがいいの?](https://qiita.com/Sak1361/items/d84a6e6dac7157b12de8)

“`1行の場合.py
data = [int(s) for s in sys.stdin.readline().split()]
“`

“`複数行の場合.py
data = list()
for l in sys.stdin:
data.append([int(i) for i in l.split()])
“`

元記事を表示

pd.concat関数におけるsortのwarning

## 縦に結合する場合はsortを入れてね、今はとりあえず列をsortしておくよ

結論からいうと異なるカラムを持つ、またはカラムの順序が異なるふたつのデータフレームを縦にpd.concatする場合はsort=Trueかsort=Falseをいれなければなりません。じゃないと以下のようなwarningが出ます。

“`
pd.concat([df_1, df_2])

=============================================
FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.

To accept the future behavior, pass ‘sort=False’.

To retain the current behavior and silence the warning, pass ‘sort=True’.

= pd.

元記事を表示

VS Code+Azure Functions+Python環境構築手順

##前提条件
– VS Code (https://code.visualstudio.com/)
– Node.js(10以降)+npm (https://nodejs.org/ja/)

**※ローカルで起動&動作確認までとしており、Azureへのデプロイまでは行わないのでAzureのアカウントは不要**

##環境構築
###Python(3.7.x)
以下から3.7.4の**64bit版**をダウンロードしてインストール
プロセスの終了時にDisable Path length limit(パスの長さの制限を無効にする)を実施
※32bit版だとローカルデバッグ時に異常が発生したので64bit版にする
https://www.python.org/downloads/
![PythonInstall.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133525/bd64ed2e-fbac-07ff-b007-29dab494eed8.png)

###VS Codeプラグインのインストール
– P

元記事を表示

独自(root)CA のインストール方法

独自の root CA 証明書をインストールする必要があり、まとめました。

1. Ubuntu (18.04)
2. Red Hat / CentOS (7)
3. Python – certifi/requests/ssl
4. Mozilla Firefox
6. Mozilla Thunderbird
7. Windows 10
8. Splunk

# Ubuntu (18.04)

1. `/usr/share/ca-certificates/` 下に適当な(いい加減な、という意味ではなく)ディレクトリを作成します。
ここでは、*mylocal* とします。(以下、`/usr/share/ca-certificates/`*mylocal*/ とする)
ディレクトリは管理組織単位などでまとめるためのもの。
(おそらく、`mozilla/` というディレクトリがあると思われますが、これは触らない)
ディレクトリは無くても構いませんが、ローカルなものは、ディレクトリでまとめた方が、後々、管理しやすい。

2. 作成したフォルダ *mylocal* の下に、証明書フ

元記事を表示

Matplotlibでマウスオーバーすると対応する画像を表示させる

# まとめ

こんなんできました。

例はt-SNEで低次元化したMNISTの散布図です。プロット上にマウスカーソルを持ってくると、そのプロットに相当する図が表示されます。

![Figure-1-2020-01-24-21-54-54_Trim.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258019/47ccaa95-e8e1-b2b2-40b5-48e39d9cc31e.gif)

# 環境

* python 3.7.3 anaconda
* matplotlib 3.1.0
* numpy 1.16.4
* sklearn 0.21.2

# まずはt-SNE処理

今回の記事はmatplotlibの使い方をメインにします。MNISTとか、t-SNEとかの説明は省略します。

ただどんな変数名でどうやって作ったかなどはプログラム依存ですので、そちらのコードを掲載します。

“`python
import numpy as np
from sklearn.datasets import fe

元記事を表示

カスタムUserモデルを作成した後にUserが上手く追加されない件

## 起きたこと

なにが起きたかというと、

1. AbstractUserモデルを継承してカスタムUserモデルを作成。
2. adminにadmin.register.site(CustomUser)のように**普通に登録**
3. admin管理画面から新しくUserを登録!
4. 何故かパスワードが生で表示される。
5. ログインできない!!!

という問題が発生しました。。
結論から申しますと2の操作が原因です。

ちなみにUserのカスタマイズについては以下の記事に詳しくあります。
[okoppe8さんの記事](https://qiita.com/okoppe8/items/10ae61808dc3056f9c8e)

## 解決方法
UserAdminをadmin.site.register()の第2引数に登録してあげる。

“`python:admin.py
from django.contrib import admin

from . models import CustomUser
from django.contrib.auth.admin import

元記事を表示

[イメージ図付]Nginx+gunicorn+FlaskをDocker化[前編]

# 本記事の概要
*[PythonによるWebアプリケーション学習ロードマップ](https://qiita.com/mintak21/private/ee7ba51bacfc8e587df5)*のStep2として、Step1で作成した**WebサーバおよびAppサーバをDockerコンテナにて起動する**ように設定する手順について記載していきます。
記事は前・後編の2編での構成となり、
`前編:Docker化“後編:docker-compose導入`
についての記載となります。

# 前提
`MacOS`をホストPCとして利用することを想定したコマンド表記となります。

# ホストPCとしての準備
本記事ではローカルPCをDockerのホストPCとして構築していきます。
これにあたりDockerを動かすための準備が必要です。
いくつかの方法がありますが、`MacOS`の場合は`Docker for Mac`をbrewインストールするのが手っ取り早いと思います。

“`bash:Terminal
brew cask install docker
“`

これでアプリケーションがイ

元記事を表示

書籍「15Stepで踏破 自然言語処理アプリケーション開発入門」をやってみる – 2章Step05メモ

# 内容
[15stepで踏破 自然言語処理アプリケーション入門](https://www.amazon.co.jp/dp/4865941320) を読み進めていくにあたっての自分用のメモです。
今回は2章Step05で、自分なりのポイントをメモります。

# 準備
– 個人用MacPC:MacOS Mojave バージョン10.14.6
– docker version:Client, Server共にバージョン19.03.2

# 章の概要
Step04では特徴抽出手法を学び、次のStep06では抽出した特徴ベクトルから学習して識別器を作成する。
Step05ではその間の処理で、特徴ベクトルを識別器にとって望ましい形へと加工する次元圧縮の手法について学ぶ。

– 潜在意味解析(LSA)
– 主成分分析(PCA)

# 05.1 特徴量の前処理
BoWは単語の出現頻度をベクトル化したもので、「特徴ベクトルの値の分布が非常に偏りがち」である。

– 特徴抽出で解決
– Step04のTF-IDFなど
– 抽出後に特徴ベクトルを加工して解決
– sklearn.prepr

元記事を表示

Pipenvを用いた仮想環境上でDjangoを起動する

#はじめに
Pipenvを用いた仮想環境上でDjangoを起動させます。

Pipenvを用いた仮想環境上にDjangoを配置することでDockerやチーム開発でのビルドが常に同じ結果となり、開発がスムーズになります。複数人やDockerを用いた開発でのベストプラクティスと考えています。

本記事は[DjangoアプリをDocker上に構築しAWS Fargateにデプロイする](https://qiita.com/keita_gawahara/items/66e58a6eed5c0c5f31d2)プロジェクトの一部です。

#pipenvのインストール

pipを用いてpipenvをインストールします。

“`
$ pip install pipenv
“`

#仮想環境上にDjangoをインストールする
pipenvをインストール後、デスクトップでhelloディレクトリを作成、helloディレクトリに移動します。

“`
$ cd ~/Desktop
$ mkdir hello && cd hello
“`

Pipenvコマンドを使用して仮想環境上にDjangoをインスト

元記事を表示

遺伝的アルゴリズムで特徴量選択

# はじめに
へー遺伝的アルゴリズムってやつがあるのか〜。011101010…これって特徴量選択に使えるのでは?と思ったら当たり前のようにやっている人がいました。先駆者の方のコードを参考に自分なりにまとめ直しました。n番煎じです。

# 参考
– 遺伝的アルゴリズムで特徴量選択(https://horomary.hatenablog.com/entry/2019/03/10/190919)
– 遺伝的アルゴリズムに入門するときに参考になったスライドとOneMax問題の実装(https://tech.mof-mof.co.jp/blog/ga-one-max-problem.html)
– Azunyan1111
/
OneMax(https://github.com/Azunyan1111/OneMax)

# 手順
## 遺伝的アルゴリズムの実装
遺伝的アルゴリズムの詳細は[こちら](https://tech.mof-mof.co.jp/blog/ga-one-max-problem.html)が参考になります。この記事ではOneMax問題を例題にします。OneMax問題は、初

元記事を表示

Atcoder Beginner Contest152のきろく(python)

## 1

正答数と問題数が一致した時ACとする

“`
N , M = map(int,input().split())
if N == M:
print(“Yes”)
else:
print(“No”)
“`

## 2
辞書順で先に来るとは数が小さいことと同義である。
その為、smallの値をlargeの回数繰り返せば良い

“`
a, b = map(int,input().split())
ans = str(min(a, b)) * max(a, b)
print(ans)
“`

## 3

chokudaiさんも解けてほしいと言っていた問題。
問題文が複雑であるが、問題文をあるiが任意のすべてのjのうち最小であるという問題に帰着できる。
その為、左から値を保持し、常に最小であるか判定すれば$O(N)$で解ける。

“`
N = int(input())
P = list(map(int, input().split()))
now = P[0]
ans = 1
for i in range(1, N):
if now >= P[i]:

元記事を表示

Djangoで区分値を定義し、簡単に画面へ反映する

# Djangoで区分値を管理する
## 要件
`model.py`で区分値を定義し、履歴のリストを表示するhtmlページへ反映します。

## 1. モデルに定義する
`History`テーブルに`STATUS`という区分値を持たせます。
ポイント:`choices=`

“`python:manage.py
class History(models.Model):
STATUS = (
(‘001’, ‘実施前’), # BEFORE_EXECUTE
(‘011’, ‘ログイン中’), # DURING_LOGIN
(‘012’, ‘取得中’), # WHILE_GETTING
(‘101’, ‘完了’), # DONE
(‘401’, ‘失敗’) # fail
)

start_at = models.DateTimeField()
status = models.CharField(max_length=3, choices=STATUS)

元記事を表示

たくさんインスタンス変数を使う場合の速度比較[Python]

速度比較

“`
import timeit

class checkTime():
def __init__(self):
self.a = 0
self.b = 0
self.c = 0

def local(self):
a = self.a
b = self.b
c = self.c
for i in range(10000):
a+b+c

def self(self):
for i in range(10000):
self.a+self.b+self.c

def getTime(self):

def test1():
self.a = 1
self.b = 2
self.c = 3
self.self()
self_elapsed_time = timeit.Timer(stmt=test1).repeat(number=100)

def test2():
self.a = 1
self.b = 2
self.c = 3
self.local()
l

元記事を表示

OTHERカテゴリの最新記事