- 1. はじめに
- 2. 最大部分配列問題(maximum subarray problem)とは?
- 3. 問題
- 3.1. doublet-solverのpython2から、python3への移植と改変。
- 3.2. AWS LambdaとServerless Frameworkで爆速で作るTwitterbot
- 3.3. 初めてのロジスティック回帰
- 3.4. ワイ「DjangoでJOINってできるんか?」
- 3.5. §1独自のフォーマットに基づいてQRコードを発行する
- 3.6. AGC041
- 3.7. ABC147
- 3.8. QRコードを使った入場システムを自作する。
- 3.9. AtCoder Grand Contest 041 参戦記
- 3.10. 企業研究者のためのMatplotlibまとめ
- 3.11. Djangoでbitflyerの収支管理アプリを作ってみる(設計編)
- 3.12. [Python3] FXチャートにサポートライン生成を試みる
- 3.13. M2Crypto を python3から使おうと「pip install M2Crypto」したらエラーが出た
- 3.14. Boost.Pythonを使ってC言語のラッパーを作る
- 3.15. Sin(x) テイラー展開の計算がうまくいかない
- 3.16. DockerでDjango+MySQLを構築
- 3.17. pythonのrange関数がいくつまでかを覚える方法
- 3.18. GCEでFlaskを動かす!
- 3.19. Psycopg2 がインストールできないとき
Pythonで最大部分配列問題(maximum subarray problem)を解く
はじめに
皆さん初めまして。ryuichi69と申します。
本日はアルゴリズムの勉強したもののアウトプットをここに書こうと思います。本日は最大部分配列問題(maximum subarray problem)というアルゴリズムを扱います。説明の分かりにくい部分、要件漏れ等がありましたらコメントにてご連絡下さい。
最大部分配列問題(maximum subarray problem)とは?
さて本題です。最大部分和問題とは、「各要素に整数が入った配列があり、そのうちいくつか選んだ時、その選んだものの合計の最大値を求めよ」と言う問題です。
問題
nを0以上の整数とします。このとき、n個の要素からなる数列(配列)a[k]が以下の条件をみたしています。
- a[0],a[1],…..a[n-1]は整数
- 数列aの各要素は降順に並んでいるものとします。1≦i≦(n-1)を満たすすべての自然数iに対し、a[i] > a[i+1]をみた
doublet-solverのpython2から、python3への移植と改変。
Git hub にある、Doublet-Solverのpython2から、python3への移植。紹介を兼ねて。
移植は、以下の3つで動きます。
①import urllib2 は、いらないので削除。
②xrange()をrange()にする。
③print に()を付ける。ここのコードでは、
①コマンドラインから引数を取れるように
②辞書に未定義の引数でも扱えるように
③歴史的方法に従って、変換ステップ数ではなく、<リンク数>で出力するように
④小文字で扱うように
と、4つの修正を加えてあります。doublet-solverはpythonでは、こんなにシンプルに書けるのですね。びっくりしました。
英語辞書’dic.txt’はこちらにあるので、どうぞ。
#CODE
“`doublet.py
#!/usr/bin/python3
import sys
from
AWS LambdaとServerless Frameworkで爆速で作るTwitterbot
## 0. はじめに
ここ1年はStackstormばかり扱っているのですが、年末だし他の技術も触るかー!と思いたち、色々自分の作業ディレクトリを漁っていたところ、Twitterbotなるものを発掘しました。`Stackstorm???`という方はこちらをご参照ください。(自演)
[Dockerで始めるStackstorm再入門1/3(環境構築からOrquestaで書いたWorkflowの結果をslackに通知するところまでのチュートリアル)](https://qiita.com/gkzz/items/4329f0846c873dbce9cf)話を戻します。
そのTwitterbotですが、私はvpsを使って運用していました。
ただ、そんなに頻繁に動かさないので、また勉強も兼ねて、このたび`AWS Lambda(以下、lambda)移行`にチャレンジした次第です。`lambdaってなに?`という方は、AWSがオフィシャルなハンズオンを公開しているので、そちらをご参照ください。
初めてのロジスティック回帰
ロジスティック回帰は仕事でもよく使うのですが、ちょっと気になることがある時になかなか欲しい情報にたどり着けないことが多いので、自分用のメモとしてロジスティック回帰についてまとめておこうと思います。
ロジスティック回帰は医療分野等でよく使われるらしいです。
もちろん他の分野でも解釈性の高さやモデルのシンプルさ、の割に高い精度を出してくれるなどの理由から頻繁に使われます。さて、入力ベクトル $x$ が2つのクラス $C_0, C_1$ のどちら割り当てられるかを予測する問題を考えます。
$y∈ \\{0,1\\}$ を目的変数(出力)、$x ∈ R^d$ を説明変数(入力)とします。
ここで、$C_0$ に割り当てられる時は $y = 0$、$C_1$ に割り当てられる時は $y = 1$ としています。##線形判別
人口的に生成した20個のデータを用意しました(私が適当に作っただけです)。
今回はPythonを使います。“`python:
import matplotlib.pyplot as pltx = [1.3, 2.5, 3.1, 4, 5.8,
ワイ「DjangoでJOINってできるんか?」
(注)この記事はワイ記法です。やめ太郎@Yametaro氏にリスペクトをこめて。
# ある日の我が家
ワイ「[趣味でDjangoアプリを作っている](https://note.com/shimayu22/n/n3a320a86a915)んやが」
ワイ「Modelを書くだけでテーブルも作れるし」
ワイ「管理画面も作ってくれるなんてDjangoは太っ腹やな!」# DBの正規化をした
ワイ「外部キーの設定も楽々や」
ワイ「例えば選手のデータと選手ごとの成績はテーブルを分けた方がええな[^1]」
[^1]: ここだけ見たら必要ないように見えるけど、他でも使ってるから・・・### Players
| id | year | name | position |
|:-:|:-:|:-:|:-:|
| 1 | 2019 | 田中 | 投手 |
| 2 | 2019 | 鈴木 | 一塁手 |
| 3 | 2020 | 高橋 | 外野手 |
| 4 | 2020 | 山田 | 二塁手 |### FielderTotalResults
| id | play
§1独自のフォーマットに基づいてQRコードを発行する
この記事は[QRコードを使った入場システムを自作する。](https://qiita.com/inchoXD/items/10e22dbde4a5d4724c44)シリーズの記事です。
#前回
[QRコードを使った入場システムを自作する。](https://qiita.com/inchoXD/items/10e22dbde4a5d4724c44)でなんとなく概要と経緯を説明しました。今回からは実践編です。
#QRコードを発行するには。
PythonでQRコードを生成できるモジュールがあったのでそれを使う。
###まずはインストール
`$ pip3 install qrcode`###実際に書いてみる。
“`QR1.py
import qrcode#QRコードのサイズを指定
qr = qrcode.QRCode(box_size=5)
#QRコードにする文字列
qr.add_data(‘Hello_World’)
#QRコードを作成
qr.make()
#QRコードを画像化
img = qr.make_image()#生成した画像を保存
img.save(‘test.pn
AGC041
AGC041に参加しました。
結果は0完で散々でしたが、学びがありました。
## A問題
https://atcoder.jp/contests/agc041/tasks/agc041_a方針としてはAとBの差が
偶数の時は、お互いに近づけばいいだけなので差分を2で割った商が答えで、
奇数の時はA,Bの近い方の端っこに行ってA,Bの差分を偶数に調整してからお互い近づけば良いので公式の解答にある通り
$$ min(A-1, N-b) + 1 + \frac{b-a-1}{2} $$
が答えになります。
ここまでわかった。が、通らなかった。
以下が通らなかったコード
“`python
n, a, b = (int(i) for i in input().split())x = b-a
if ((x % 2) == 0):
print(int(x/2))
exit()
else:
print(min(a-1, n-b) + int((x+1)/2))
exit()“`
何が悪かったか?`int(x/2)`が問題でした。
ABC147
[ABC147](https://atcoder.jp/contests/abc147)に参加しました。
自分が時間内に解けた問題プラス1問書きます。
## A問題
標準入出力と足し算とif使うだけ“`python
a1, a2, a3 = (int(i) for i in input().split())if(a1 + a2 + a3 > 21):
print(“bust”)
exit()
print(“win”)
“`## B問題
Pythonでは文字列の後ろからi番目を`s[-i]`とかで指定できることを知っていれば、あとは文字列の頭と尻尾から違う文字になっているものを数えて行くだけ。“`python
s = input()length = len(s)
ans = 0
for i in range(int(length/2)):
if(s[i] != s[-1*i-1]):
ans += 1
print(ans)
“`
時間内で解けたのはここまででした。
C問題はbit全探索をすればいいのはわかったが、判
QRコードを使った入場システムを自作する。
#経緯
家でディズニーリゾートで使われてそうな設備とかシステムとかを作りたいなあと思いつき一番簡単にシステムを妄想できた***”入場システムを作ろう!”***ってなり作ることにしました。(2020年1月現在未完成)
![UNADJUSTEDNONRAW_thumb_1b29.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509951/416a47ca-5b98-da3a-35d3-698c5693e9b1.jpeg)
※画像は工事中の東京ディズニーランドエントランス##思いついたシステム
発券機でQRコードを発行
↓
発行日と時間を生成した情報をQRコード(ID)と一緒に専用dbに登録
↓
読み取り時にdbへアクセス->発券機で発行されてdbに登録されてるQRコードかを照合
↓
True: 入場管理dbに読み取った時刻とQRコード(ID)を登録
False: エラー表示を出す。~~非常に安易である。~~
##前提
– 基本的には***Python***で開発する。
– 場合によって
AtCoder Grand Contest 041 参戦記
# AtCoder Grand Contest 041 参戦記
## A – Table Tennis Training
28分半で突破. WA5. 何だ簡単じゃんと思って提出したらやっぱり簡単ではなかったw
以下のうち一番早いものが解答
1. まっすぐ近寄る(ただし距離が偶数でないとすれ違うので偶数の場合のみ)
2. 1 で待ち合わせをする.
3. N で待ち合わせをする.
4. 2人で1に向かい、先に着くAにいた選手が1ターン1に留まり(これで距離が偶数になる)、折り返してBを迎えに行く
5. 2人でNに向かい、先に着くBにいた選手が1ターンNに留まり(これで距離が偶数になる)、折り返してAを迎えに行く“`python
N, A, B = map(int, input().split())t = float(‘inf’)
if abs(A – B) % 2 == 0:
t = min(abs(A – B) // 2, t)
t = min(B – 1, t)
t = min(N – A, t)
t = min((A – 1 + 1) + (B – A –
企業研究者のためのMatplotlibまとめ
# はじめに
ここでは、Python初心者向けに、Matplotlibについて解説します。
Python3系の使用を想定しています。# ライブラリの読み込み
他のライブラリと同様に、`import`で読み込みます。
`%matplotlib inlline`は、Jupyter Notebookにおいて、ノートブック上でグラフを描画するための記述です。“`python:matplotlib_1.py
%matplotlib inline
import matplotlib.pyplot as plt
“`# 折れ線グラフ
折れ線グラフは、基本的には以下のように描画することができます。
“`python:matplotlib_2.py
%matplotlib inline
import matplotlib.pyplot as pltx = [1, 2, 3]
y = [3, 1, 2]
plt.title(‘Line-chart’) # グラフタイトル
plt.xlabel(‘X-axis’) # x軸ラベル
plt.ylabel(‘Y-axis’) #
Djangoでbitflyerの収支管理アプリを作ってみる(設計編)
今年はあまりbotを稼働させられず、収支は微プラスで終了となりました。
来年からは、稼働とロットを上げて収益を伸ばして行きたいと考えているのですが、勝率や取引回数あたりの期待収支、積み重なった手数料などを一目できる画面を作りたいなぁ…と思い至りました。そこで、実務でも使ってるしDjangoで作ってみれば勉強にもなってちょうどいいんじゃね?という~~浅はかな~~考えで、年末年始を使って取り組んでみることにします。
必要な画面は6個。
“`1.ログイン画面。(login.html)
ID入力フィールド
メールアドレス前提だと、英数と記号は-_@ぐらいっすかね。パスワード入力フィールド
大文字小文字、数字、記号から「3種類以上組み合わせて8文字」とかそんな感じで。「ログイン」ボタンも必要っすね。
ログインボタンが押されたら、入力されたIDをキーにデータベースを検索。
ヒットしたら、パスワードをIDに紐づくパスワードと入力されたパスワードを比較。フィールドが空白の場合、文字数長を満たさない場合などは
ログインボタンが押されてもデータベースを見に行かず
バリデーションチェ
[Python3] FXチャートにサポートライン生成を試みる
# 概要
テクニカル分析を行うためには、サポート(レジスタンス)ラインは必須
でも意外と誰も作ってない….?
ように見えたので、オリジナルで生成する処理を書いてみました。# 前提データ
こんなデータが既にあるとして話を進めます。
(200行以上)“`python:python
> csv_path = ‘hoge.csv’
> pd.read_csv(csv_path, index_col=0)close high low open
time
2019-08-29 01:30:00 129.310 129.420 129.302 129.420
2019-08-29 01:40:00 129.258 129.324 129.254 129.312
2019-08-29 01:50:00 129.229 129.264 129.221 129.256
2019-08-29 02:00:00 129.260 129.262 129.184 129.232
2019-08-29 02:10:00 129.264 1
M2Crypto を python3から使おうと「pip install M2Crypto」したらエラーが出た
# 背景
– Ubuntu 18.04 に M2Cryptoを入れてpython3から使おうとしたら、必要なパッケージが入っていなくてエラーがでた。
– 環境
– Ubuntu 18.04.3 LTS
– Python 3.6.9
– (python2系は入っていない)# 結論: インストール方法
“`
$ sudo apt-get install build-essential python3-dev openssl libssl-dev swig
$ pip install M2Crypto
“`
のように、必要なパッケージをapt-getで入れておけば問題なし。# step by step で入れようとした時のエラー
– エラーメッセージでググってもドンピシャのページが見つからなかったので、メモを残しておく。—
– c++ (またはbuild-essential)が入っていない“`
error: [Errno 2] No such file or directory: ‘cpp’: ‘cpp’
“`
と出てインストールできなかったら、
$
Boost.Pythonを使ってC言語のラッパーを作る
PythonでCの関数を呼べたのでメモを書きます。
Cのラッパーを作るときはいくつかの方法がありますが、今回はBoost.Pythonを選びました。## インストール
[この記事](https://qiita.com/milmilk/items/f1d08cd2c3c72ebadb17)を参考しインストールしました。
自分的な手順は以下通りです。(Mac環境、Python3.7)
### 1. brewでBoost.Pythonをインストール
“`bash
brew install boost-python3
“`
### 2. シンボリックリンク
インストールしたら `/usr/local/Cellar/`にある Boost.PythonのdylibとPython自体を実行するディレクトリにリンクします。“`bash
ln -s /usr/local/Cellar/boost-python3/1.71.0_1/lib/libboost_python37.dylib /path/to/directory/libboost_python37.dylib
ln -s /us
Sin(x) テイラー展開の計算がうまくいかない
#わかる方いたら助けてください。
π/6(0.524)のときのテイラー展開してもなぜか計算結果があいません。
なぜ……。“`Python
from sympy import sin, cos, exp, plotting, pi
from math import factorial
from decimal import Decimal
%matplotlib inlinej = 1
x = 0.524
n = 6for i in range(n):
dum = x
if i % 2 == 0:
pass
elif i == 1:
print(i, dum)
elif i == j:
dum += x**i / factorial(i)
a = x**i / factorial(i)
print(i, Decimal(dum))
print(i, Decimal(a))
else:
dum -= x**i / facto
DockerでDjango+MySQLを構築
# 環境
– macOS Mojava version 10.14.6
– Docker version 19.03.5# 準備
ディレクトリを作成し、Dockerfile, docker-compose.yml, requirements.txtを作成します。
“`bash
$ mkdir sample
$ cd sample
$ touch {Dockerfile,docker-compose.yml,requirements.txt}
“`作成したそれぞれのファイルに以下を記述します。
## Dockerfile
“`:Dockerfile
FROM python:3
ENV PYTHONBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
“`## docker-compose.yml
“`:docker-compose.yml
version: ‘3’
ser
pythonのrange関数がいくつまでかを覚える方法
range(1, 5)の最初は1と分かるのだが
5までだったかな4までだったかな・・と
いつも不安になって無駄に調べていたので
覚える方法を開発した(大袈裟)未満(miman)
rangeは5文字なのでmimanの5文字と同じ
以下(ika)ではない。for i in range(1,5):
print(i)1
2
3
4以上です。
日本人限定かもしれませんが
もう間違えることは無いでしょう。では。
GCEでFlaskを動かす!
# はじめに
GCEで**とりあえずFlaskを使ってWebページを公開**する手順です。とりあえずなので、動けばいいといった感じです。# インスタンスの立ち上げ
とりあえず公開するので、最低スペックで行きます。下記の構成でインスタンスを作ります。
– 名前
– gce-flask
– リージョン
– asia-notheast1(東京)
– ゾーン
– asia-notheast1-b
– マシン構成
– N1, f1-micro
– ブートディスク
– 10GB, Ubuntu 18.07 LTS
– ファイアウォール
– HTTP トラフィックを許可する
– HTTPS トラフィックを許可する![スクリーンショット (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483911/d2b8f839-2908-25e6-46b0-9d7c655efe8d.png)
# IPアドレスの固定
とりあえず動けばいいからIPアドレ
Psycopg2 がインストールできないとき
“`pip install -U pip“`
“`pip install psycopg2-binary“`参考: https://stackoverflow.com/questions/16629081/cant-install-psycopg2