Python3関連のことを調べてみた2019年12月22日

Python3関連のことを調べてみた2019年12月22日

【CGI】Vue.js + axiosでサーバのPythonプログラムを動かし出力データをもらう

# はじめに
フロントエンドで全部できるっちゃできるけど、やっぱり計算部分にPythonの楽さは欲しいなあ、という思いからサーバでプログラムを動的に動かすCGIを触ってみたのでそのまとめ。バックエンドは未だ疎い。

フリーレンタルサーバーのXREAのアカウントを持っているので実際にそこで試してみる。
[無料から使える高機能・高品質レンタルサーバー | XREA(エクスリア)](https://www.xrea.com/)

やりたいことは、

1. ボタンをクリック
2. Vue.jsとaxiosを使ってデータをサーバに渡す
3. Pythonで書かれたCGIスクリプトを実行して演算、結果をJSONで返す
4. 同じ画面に返されたデータを表示

というかんじ。

今回は例として入力された2数の最大公約数と最小公倍数を計算して返すプログラムを作る。

# 作ってみる

## ファイルの配置
“`
├─ cgi-bin
│ └─ index.cgi
├─ index.html
└─ main.js
“`
Pythonで書かれたCGIスクリプトは `cgi-bin` というディレ

元記事を表示

Cloud RunとSlackBotで作るおすすめランチスポットボット

# Cloud RunとSlackBotで作るおすすめランチスポットボット

この記事は ウェブクルー Advent Calendar 2019 22日目の記事です。
昨日は@ytakadama0922さんの「令和になってもまだDC作業で疲弊してるの?」「してるよ」ってお話でした。

## はじめに

みなさんは、お昼ごはんのお店をどうやって選んでいますか?私は、だいたい、同じお店に食べに行く事が多く、最近まんねり化しています。というわけで、この課題をCloud RunとSlackbotを使って今回はいい感じに解決してみたいと思います。

Cloud Runはフルマネージドなサーバーレスプラットフォームで、Dockerコンテナをデプロイするだけで、簡単にHTTPリクエスト経由で呼び出し可能なアプリケーションが作成できます。

一方で、Slackbotには色々機能がありますが、今回は一番簡単な、ワークスペースでの特定の発言に対して、レスポンスを返してくれる機能を使います。Slackのワークスペースのカスタマイズ( https://ワークスペース名.slack.com/customize/

元記事を表示

Python3.7ランタイムのAWS LambdaでC拡張ライブラリを使用したい!

本記事はamazonlinuxでpython3.7を使用したい人、lambda上でpythonのC拡張ライブラリを使用したい人向け。

# 動機
Python3.7ランタイムのlambda上でscrapyを動かそうとしたところ以下のエラーでうまく実行できなかった。

“`
{
“errorMessage”: “Unable to import module ‘spider’: cannot import name ‘etree’ from ‘lxml’ (/var/task/lxml/__init__.py)”,
“errorType”: “Runtime.ImportModuleError”
}
“`

調べたところ、どうやらlxmlライブラリはC言語の拡張を使用しており、そのままではlambdaで使えないとのこと。

諦めればいいものの、Python3にこれから移行していくというタイミングで困ることが多そうなので頑張って解決してみる。

PCはMacを使用。

# とりあえずEC2上で動かす

lambdaはサーバレスといっても裏ではamazonlinuxのサーバ上で動

元記事を表示

Python Javaでどうやったらマネタイズできるか戦略

#Python Javaでどうやったらお金になるか?
##フレームワークではなくて言語から勉強する。
PythonならPython JavaならJava
##プログラム作成の仕事を探す。
実務しながらの方がやはり伸びると思う。
テストではなくてプログラミングがある仕事を探す。
どっちが偉いってことはないけど違う仕事だと思う。
##JavaはフレームワークはSpring+ORマッピングだから
お金にはなるけど、世の中のいろんなツラミを引き受けてるせいか
Java・Springに燃えてる人ってあんまり見ないけど
心を込めてやろうと思うね。なんか例が作れたらと思う。
##Pythonは
Flaskの公式見たり、ソース見たり
Flask + chabot
勉強
既存の物を使って研究してみるとか
→ IBM Watson等

Flask + APIとか
フレームワークも改造できたりするところまでいけたらと思うね。

元記事を表示

Python超入門 <3> 関数

#関数とは
`print(‘Hello World!’)`の`print()`のように何らかの作業をしたり、値を返したりするものを関数と呼びます。

数学でやった関数$f(x)$に似ていますね。

また、`print(‘Hello World!’)`の`’Hello World!’`のような、関数が受け取る値のことを引数(ひきすう)と呼びます。
基本的に関数は引数を必要としますが、必要のないものもあります。

関数は、もともとPythonの中にあるものを使うだけでなく、自分で定義することもできます。

今回は関数を定義しながら理解していきましょう。

#関数を作ってみよう
Pythonの関数は`def`で作ることができます。

以下のプログラムを見てください。

“`python
def add(a, b):
print(a + b)
“`

これで`add`という関数を定義することができました。
`add`の括弧内の`a`と`b`が引数で、`a`と`b`の和を表示せよというプログラムですね。

ここで、`add(2, 3)`と入れて実行してみます。
結果は

“`pyt

元記事を表示

Python超入門 <2> 変数と代入

#はじめに
Python含め多くのプログラミング言語において変数というものがあり、代入という作業をすることができます。
今回はこれを理解しましょう。

#変数と代入とは
変数とは皆さんがプログラムを書くときに自由に定義できるものです。
数学などで分からない値を$x$などの文字で置くことがあったと思いますが、雰囲気としてはそんな感じです。

プログラミングの世界では、変数は基本的に何かの値を格納するものとして使われます。
その格納する作業を代入と言います。

変数を使うことで、プログラムを見やすくしたり、簡単にできたりします。

#変数を使ってみよう
皆さんも実際にやってみましょう。

##数値の代入
Pythonの変数にはいろいろなものを代入できますが、まずは

以下のようなコードがあったとします。

“`python
print(10 + 20)
“`
これは`10+20`という計算の結果を表示するプログラムで、もちろん出力は

“`python
30
“`
ですね。

これを変数を使ってこのように書くこともできます。

“`python
a = 10
b = 20
pri

元記事を表示

Python超入門 <1> Spyderを使ってみよう

# はじめに
前回はコマンドプロンプトでPythonスクリプトを走らせてみましたが、そのやり方だと基本的に一行ずつ実行することになるので長いプログラムを動かすのは面倒くさいですよね。

だから基本的には拡張子pyのファイルにPythonスクリプトを書いて、それを実行させるのが普通です。

.pyのファイルはWindows付属のメモ帳でも作ることができますが、プログラムを書くためのテキストエディタを使うと便利です。
AnacondaにはSpyderというエディタが付属しています。
今回はSpyderを使ってみましょう。

Jupyter NotebookやJupyter Labというものもとても使いやすいですが私は基本的にSpyderを使っています。

#Spyderの使い方
Windowsのスタートメニューのアプリの一覧からAnaconda3フォルダの中にあるSpyderをクリックして起動しましょう。

Anaconda NavigaterからSpyderを起動することもできますが、直接Spyderを起動しても大丈夫です。

##画面の説明
###左側
エディタです。ここに入力してプロ

元記事を表示

企業研究者のためのNumPyまとめ

# はじめに

NumPyは、ベクトルや行列計算を高速で行うためのライブラリです。
ここでは、NumPyでよく使うメソッドなどについて解説します。
Python3系の使用を想定しています。

# インポート

NumPyを使うには、まずライブラリを読み込む必要があります。
慣習的に、`np`とすることが多いです。

“`python:NumPy_1.py
import numpy

import numpy as np
“`

# 1次元配列

NumPyでは、リストのような配列を作ることができます。

“`python:NumPy_2.py
import numpy as np

np_arr_1 = np.array([1, 2, 5])

print(np_arr_1)
print(type(np_arr_1))
print(np_arr_1**2)

np_arr_2 = np.array([3, 5, 7])

print(np_arr_1 + np_arr_2)

np_arr_3 = np.arange(10)

print(np_arr_3)

np_ar

元記事を表示

1年実務でPythonを使って困ったところ – 2019年初アドベント投稿

今年も残すところあと10日
初のアドベントカレンダーで無事に2019年を締めたいと思います!

Pythonを使っていて困ったこと3つです。聞いてください。

## 君の型は

初心者(わたし)にありがちな事件です。

画像処理とかでNumpy使ったりOpenCVを使っていたんですが、
それぞれの関数での戻り値をちゃんと理解してなかったあの頃。

**intがfloat**になってることや、**listがint**になっているなどよくあることでした。

コード量が多くなってくると、型に関連するエラーがやっかいです。
途中でどう型が変化したのかわからなくなり、デバッグに手こずったのが今となっては懐かしいです。

手こずった時の呪文

**君の型は**

“`python
print(type(you))
“`

## 消えないremove

for文でリストを回し、不要な要素をremoveで消していた時の話

「あ、あれ、消えてない…!?」

どんなにprintしてデバッグしても、消したはずの要素が消えていない
リストから取り出される値がなんか変?

検索してみた結果答えはこ

元記事を表示

Queue

# Pythonで「キュー(Queue)」

## はじめに

ここでは[「プログラミングコンテスト攻略のためのアルゴリズムとデータ構造」][1]の中で取り上げられている[「AOJ (Aizu Online Judge」)][2]の問題を自分で解いた際に学んだことや、こう考えれば分かりやすいと感じたことなどを自分への整理も兼ねてまとめています。
このテキストはC++で書かれているので、私のようにpythonで勉強をされている初学者の方の参考になれば幸いです。また私自身も初学者ゆえ、至らない点が多々あると思いますので、ご指摘・ご助言頂ければ喜びます。よろしくお願いします。

## 問題詳細

[ALDS 1_3_B: Queue][3]
キューを使ってラウンドロビンスケジューリングをシミュレートする問題です。
問題詳細は上記リンクをご参考ください

## 考え方
・ラウンドロビンスケジューリングと呼ばれる処理方法ではCPUがプロセスを順番に処理していくのですが、各プロセスの所要時間がクオンタム(1回の制限時間みたいなもの)を越える場合、そのプロセスは待ち行列の最後尾に移動させられ、次のプ

元記事を表示

【jinja2】for文内で加算した変数が引き継がれない問題の解決策

# はじめに
バージョン
Python: 3.7.4
jinja2: 2.7.2

以下のようなコードがあり、for文内でcntという変数を加算していったとします。

“`text:count_test.j2
{%- set cnt = 1 -%}
{%- for i in range(3) -%}
{%- set cnt = cnt + 1 -%}
{{ cnt }}
{% endfor -%}
result : {{ cnt }}
“`

# 実行結果(失敗例)
結果を見てみると、for文の外には変数に加算した結果が引き継がれていないことがわかります。

“`text:出力
2
3
4
result : 1
“`

バージョンによっては、加算されない場合もあるようです。

“`text:出力
2
2
2
result : 1
“`

# 解決策1:リストに格納する
加算した結果をリストに格納すると上手くいきます。
加算した値をappendでリストに足して、加算前の値はpopで削除します。

“`text:count_test2.j2
{%- set cnt = [1]

元記事を表示

[Python]値段・サイズなどの文字列を綺麗なint型に変換する

いろんなECサイトをスクレイピングしていると、値段や長さ、重さといった「比較可能な数字なんだけど、表現が多様な文字列」に出くわす。

そんな文字列を一律にきれいなint型に変換する方法のメモ。
(今回は小数点以下は無視して整数型として取り出す)

### 変換コード
“`python:convert.py
# ライブラリのインポート
import re

# 全角半角が混じった小数点つき表現
price = ‘値段1,800.000円’

def convert(price):
splitted = price.split(‘.’)
nums = [re.sub(“\\D”, “”, s) for s in splitted]
return int([n for n in nums if n != ”][0])

int_price = convert(price)
print(int_price) # => “1800”
“`

小数点であるコンマと数字表現以外の文字列は無視し、全角半角は全て半角に直した上でint型に変換できた。

元記事を表示

【AWS SAM】Python版入門

# 内容
samがアップデートされて使いやすくなったらしいので、Pipenvでの環境構築からデプロイまでの流れを備忘録として残しておこうと思います。

# 環境
– macOS Mojave -10.14
– python3.7.4
– sam 0.38.0

# 目次
1. Pipenvで環境構築
2. アプリケーションの初期化
3. デプロイ

# 1. Pipenvで環境構築

### Pipenvインストール
“`
$ pip install pipenv
“`

### Pipenv初期化
“`
$ pipenv –python 3.7
“`

### 仮想環境に入る
“`
$ pipenv shell
“`

### aws-sam-cliインストール
開発時に必要なライブラリは`–dev`オプションをつけることで別枠に出来ます

“`
$ pipenv install aws-sam-cli –dev
“`

# 2. アプリケーションの初期化

この後の作業のため、`Project name [sam-app]:` はpipfile等があるディレク

元記事を表示

Windows10上のSpacemacsでPythonの自動補完やlinterなどを効かせる

基本的には[公式developブランチのドキュメント](https://github.com/syl20bnr/spacemacs/tree/develop/layers/%2Blang/python)に従う感じで。

# pyenv + pipenv
Pythonの仮想環境を使いたいので準備する。
pyenvでPythonバージョンを管理し、pipenvで依存ライブラリを管理する?

## pyenvインストール

環境変数周りとか、詳しく解説されている。

## pipenvインストール
https://qiita.com/youkidkk/items/b6a6e39ee3a109001c75

使い方はこれとか良さそう (基本的にPipfile用意して `pipenv install`でよしなにやって頂ける)
https://qiita.com/subarunari/items/dcbdad68ba1809b721b9

# 依存ライブラリの準備
Spacema

元記事を表示

DjangoのTestCaseを使ってみた

##今回の内容
Djangoで作成した電子ジャーナルサイトをテストしてみました。

##準備
複数のテストファイルを管理しやすいように、Djangoのアプリケーションディレクトリ(今回はjournals)直下に“tests“ディレクトリ、さらにその中に“test_urls.py“ファイル、“test_views.py“ファイル、“test_models.py“ファイル、“__init__.py“ファイルを作ります。
ファイル名は“test_“で始めないとDjangoがテスト用のファイルと認識してくれないので注意してください。
また、デフォルトで作られているtests.pyは削除します。

##URL test
まず簡単なURLのテストを行います。
テスト内容は、「特定のURLでの動作が、そのURLのViewと一致しているか」です。

“`python:urls.py

from django.urls import path
from . import views

urlpatterns = [
path(‘signup/’, views.sig

元記事を表示

Stack

# Pythonで「スタック(Stack)」

## はじめに

ここでは[「プログラミングコンテスト攻略のためのアルゴリズムとデータ構造」][1]の中で取り上げられている[「AOJ (Aizu Online Judge」)][2]の問題を自分で解いた際に学んだことや、こう考えれば分かりやすいと感じたことなどを自分への整理も兼ねてまとめています。
このテキストはC++で書かれているので、私のようにpythonで勉強をされている初学者の方の参考になれば幸いです。また私自身も初学者ゆえ、至らない点が多々あると思いますので、ご指摘・ご助言頂ければ喜びます。よろしくお願いします。

## 問題詳細

[ALDS 1_3_A: Stack][3]
スタックを利用して逆ポーランド記法の計算を行う問題です。
問題詳細は上記リンクをご参考ください

## 考え方
・後入れ先出しを利用して、演算子の手前二つの数値を計算します

## pythonコード
“`python
from collections import deque

l = input().split()

st = deque()

元記事を表示

C – Typical Stairs/ ABC129

#問題
[C – Typical Stairs/ ABC129](https://atcoder.jp/contests/abc129/tasks/abc129_c)

#コード
“`python:solve.py
def solve():
mod = 10 ** 9 + 7
#input
N, M, *a = map(int, open(0).read().split())

dp = [0] * (N + 2)
dp[0] = 0 # don’t exist
dp[1] = 1

#not destroyed
ok = sorted(set(range(1, N + 1)) – set(a))

for i in ok:
dp[i + 1] += (dp[i] + dp[i – 1]) % mod
print(dp[-1]) # Output last element
solve()
“`
[code](https://github.com/raintre/AtCoder/tree/gitignore/ABC129)
#方針
足を踏み入れることができ

元記事を表示

Django2 View(ビュー)の構成パターン

# 前提
初心者向け。実践では大体こんな理解が良いかもという説明です。

# 環境
– Windows 10
– Python 3.7.x
– Django 2.2.x

# まずはView(ビュー)の初期構成を確認する
Djangoでは、はじめに次のコマンドでプロジェクトとアプリのひな形を作ります。

“`console:
> django-admin startproject some_project
> cd some_project
> python manage.py startapp some_app
“`

するとフォルダーの構成は以下になります。

“`console:
> tree /f some_project
C:\***\SOME_PROJECT
│ manage.py

├─some_app
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ views.py # <= 初期のView(ビュー)は1ファイル構成 │ │ __init__.py │ │ │ └─mi

元記事を表示

Bitcoin予測してみたら、簡単に85%の精度出た!

## 目次
1. 課題
2. 準備
1. データセットを準備
2. データセットを前処理
2. アルゴリズム選定
3. 検証
3. 改良
4. 結果
5. 展望

今回実装したソースコードは最後にあります。

## 課題
直後にBitcoinの価格がどう変化するかを予測すること。

## 準備
必要なライブラリをimport。

“`python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime as dt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
“`

### データセットを準備
以下サイトからCSVダウンロードができました。(`history_20191218.csv` というファ

元記事を表示

競プロで使える!Python標準ライブラリ

# はじめに
– 競技プログラミングで使えるPython標準ライブラリを紹介します。
– 実際にPython標準ライブラリを使って解いたAtCoderの問題とコードも載せています。
– AtCoderでのPython3のバージョンは3.4.3です。
– 問題解説はしません。

# 標準ライブラリ
## [bisect](https://docs.python.org/ja/3/library/bisect.html)
**配列二分法アルゴリズム**

[bisect_left(a, x, lo=0, hi=len(a))](https://docs.python.org/ja/3/library/bisect.html#bisect.bisect_left)

ソート済みのリスト$a$に対して、$x$を$a$に挿入できる位置を返します。$a$に$x$が含まれる場合、挿入箇所は既存のどの$x$の値よりも前(左)になります。

[bisect_right(a, x, lo=0, hi=len(a))](https://docs.python.org/ja/3/library/bisect.

元記事を表示

OTHERカテゴリの最新記事