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

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

線形計画法 + pulp のハンズオン

# 線形計画法の概要
* 線型計画法(せんけいけいかくほう LP; linear programming )は、数理計画法において、いくつかの1次不等式および1次等式を満たす変数の値の中で、ある1次式を最大化または最小化する値を求める方法である。線形計画法の対象となる最適化問題を線型計画問題という。
[出典:[Wikipedia]](https://ja.wikipedia.org/wiki/%E7%B7%9A%E5%9E%8B%E8%A8%88%E7%94%BB%E6%B3%95)

* 目的の変数に対して、複数の1次不等式や1次等式で制約を設けて最も大きい(小さい)目的変数を求めるやり方

# ハンズオン
## 問題
### example1
* 下記の制約条件をもとに、利益を最大化するにはどうすればよいか  
* 工程1は1日7時間まで
* 工程2は1日14時間まで

|table|物品A|物品B|
|——|:——|——:|
|工程1|2時間|2時間|
|工程2|3時間|5時間|
|利益|4千円|5千円|

## ソースコード
* pulp

元記事を表示

tkでシリアル通信確認するだけ

“`python
# -*- coding: utf-8 -*-
import tkinter as tk
import serial as sl
import time
import datetime as dt

class App(tk.Frame):
finFlag = True
serial = None
def __init__(self, master=None):
super().__init__(master)
self.master.protocol(‘WM_DELETE_WINDOW’, self.On_Close)
# ここはシリアル通信設定を任意で決定すること
self.serial = sl.Serial(‘COM7’, 19200, timeout=0)
while( self.serial.is_open is False):
time.sleep(100)

self.create

元記事を表示

Pyinstaller でバイナリ化したものを実行する時に動的リンクでつまづく、(Linux)

## 概要
**Pyinstaller** https://github.com/pyinstaller/pyinstaller は、pythonで作ったプログラムを実行ファイルに変形してくれるありがたいライブラリのことです。

これを用いて、pythonコードをoneバイナリファイルもしくはoneフォルダにまとめた時、
別の環境にそのバイナリファイルを持ってきて実行しようとすると、動的リンク関連で怒られ、いろいろはまりました。

## 使った環境&コマンド

環境:
– ubuntu18.04
– python3.6.3 (pyenv環境を用いていた)

“`
pyinstaller -D –clean –onefile –additional-hooks-dir ./ main.py
“`
このコマンドを用いて、“`main.py“`をonefile (バイナリファイル)にして、
他の環境でも使いたかった。(実際はこのバイナリファイルをdocker image の中に置き、dockerをもちいて実行しようとしていた)

## 出たエラー

“`bash

| [7

元記事を表示

TypeScript / Python 比較表 【随時更新】

仕事で Python も書かなきゃいけなくなったので、普段書いている TypeScript との比較表。TypeScript は JavaScript や ES6 なども含みます。随時更新します。編集リクエスト大歓迎。

[TypeScript / Swift 比較表(随時更新) – Qiita](https://qiita.com/ogaoga/items/293095b558e4bea9e6e5)

### 定数・変数

“`typescript:TypeScript
let numOfPages = 0;
const pi = 3.14
“`

“`python:Python
num_of_pages = 0;
PI = 3.14
“`

– Python には定数の概念がなく、大文字で表現する運用らしい。
– Python はスネークケースが慣例のよう。

### 基本的な型

| TypeScript | Python | Note |
| — | — | — |
| `number` | `1` (int) | |
| `number` | `1234

元記事を表示

ゼロから始めるLeetCode Day19 「121. Best Time to Buy and Sell Stock」

#概要
海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。

その対策としてLeetCodeなるサイトで対策を行うようだ。

早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイト。

せっかくだし人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。

[Leetcode](https://leetcode.com/)

[ゼロから始めるLeetCode 目次](https://qiita.com/KueharX/items/6ee2502c3b620c795b70)

前回
[ゼロから始めるLeetCode Day18 「53. Maximum Subarray」](https://qiita.com/KueharX/items/837a2bab7e2f6d94d449)

基本的にeasyのacceptanceが高い順から解いていこうかと思います。

元記事を表示

金融予測におけるラベリングとは

参考文献[ファイナンス機械学習](https://www.amazon.co.jp/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%8A%E3%83%B3%E3%82%B9%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E2%80%95%E9%87%91%E8%9E%8D%E5%B8%82%E5%A0%B4%E5%88%86%E6%9E%90%E3%82%92%E5%A4%89%E3%81%88%E3%82%8B%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E5%AE%9F%E8%B7%B5-%E3%83%9E%E3%83%AB%E3%82%B3%E3%82%B9%E3%83%BB%E3%83%AD%E3%83%9A%E3%82%B9%E3%83%BB%E3%83%87%E3%83%BB%E3%83%97%E3%83%A9%E3%83%

元記事を表示

[OCI]Cloud ShellでコンピュートインスタンスのIPアドレスを取得するPythonスクリプト

この記事は、[Writing Python scripts to run from the OCI Console Cloud Shell](https://medium.com/oracledevs/writing-python-scripts-to-run-from-the-oci-console-cloud-shell-a0be1091384c) の内容を実行したものです。

# OCI Cloud Shell
OCI Cloud Shellは、OCI WebコンソールからアクセスできるWebブラウザベースのShellターミナルです。
Cloud Shellには次の機能があります。

– 事前認証されたOCI CLI
– Cloud ShellでCLIの使用を開始するための設定は不要
– Oracle Cloud Infrastructureサービスと相互作用するための主要な開発者ツールとプリインストールされた言語ランタイムを備えた完全なLinuxシェル
– 各言語のOCI SDKやOracle Instant Client
– ホームディレクトリ用に5 GBのス

元記事を表示

【Python/Tkinter】スクロール可能なFrameを作成するクラス

## はじめに
Tkinterは,PythonでGUIを作成する際の最も手軽な選択肢となります。ただし,その内容には若干の不満もあります。Frameのスクロールができないというのもその一つです。以下で,スクロール可能なFrameを作成するためのクラスを紹介します。

なお,下記で紹介するクラスは以下のサイトに掲載されいているクラスの一部を変更したものです。大変助かりました:
・Scrollable Frames in Tkinter | The Teclado Blog, https://blog.tecladocode.com/tkinter-scrollable-frames/

##コード全文
TkinterではFrameにScrollbarをつけることができないので,スクロール可能なWidgetであるCanvasをまず生成し,その中にFrameを入れています。そして,Canvasのスクロール可能な範囲にFrameの幅を含めるようにしています。これにより,Canvasがスクロールされた際に内部のFrameも同時にスクロールして見せることができます。

“`py
import t

元記事を表示

DBの情報をlistに格納したい

“`python
import psycopg2
connection = psycopg2.connect(“********”)
cur = connection.cursor()
list = []#ちなみにこれは作れない
cur.execute(“SELECT ID FROM DB;”)
list = cur
print(list)
“`

直接入れると無理みたい
“`cur“`で取得できるのは「“`[(1),(2),(3)]“`」でlistの中にtupleが入っているので扱いづらい。ので、listの中にstringで追加した変数を作りたい

“`python
import psycopg2
connection = psycopg2.connect(“********”)
cur = connection.cursor()
list = []
cur.execute(“SELECT ID FROM DB;”)
for i in cur:
list.append(str(i[0]))
print(list)
“`
これなら“`[1,2,3]“`のように

元記事を表示

Airflowをdocker-composeで実装した時に気をつけたこと

個人的な勉強でAirflowを実装したので、その時に気づいたことを書きます[^1]。
同じような問題ではまった人が減れば幸いです。

# 前提
– LocalExecutorを使う
– MySQLコンテナーとAirflowコンテナー
– AirflowからRedshiftにアクセス

# Dockerイメージ
## python:3.7.7ベースでairflow==1.10.10をインストール
– Dockerfileを自分で書いてみるため
– ついでに`entrypoint.sh`も
– 学習目的なので、[puckel/docker-airflow](https://github.com/puckel/docker-airflow)は遠慮したい
– めちゃくちゃ参考にはする
– 公式Dockerイメージのmasterやlatestはバージョンが2.0で開発版[^2]

## AIRFLOW_EXTRAS
airflowを拡張するためのプラグインで、MySQLなどのDB系からGCPへのアクセスなどがある。
公式のDockerfileでは以下の通り、

“`Docker

元記事を表示

pythonで文字列を1文字ずつのリスト形式に変換する

#文字列の場合
“`python
#やりたいこと
#’hello’ ⇒ [‘h’,’e’,’l’,’l’,’o’]

a = ‘hello’
print(list(a))
“`
実行結果は以下のようになる

“`python
[‘h’, ‘e’, ‘l’, ‘l’, ‘o’]
“`

#数値の場合
“`python
b = 123456789
print(list(str(b)))
“`
実行結果は以下のようになる

“`python
[‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’]
“`

元記事を表示

stanで離散時間ロジスティック回帰モデルを実装する

# TL;DR
共変量が時変の生存時間分析を行いたい場合、離散時間ロジスティック回帰という手法を使うことが出来ます。
離散時間ロジスティック回帰の紹介と、stanによる実装を行います。

# 始めに
大学の成績の推移から、留年せずに卒業するための要因を推定したい、といった状況を考えます。
生徒$i$,学年$t$の成績を$X_{i,t}$、学年tで無事進級出来たかを$Y_{i,t}$と置きます。
進級に成功し続ける状態を「生存」と捉えると、これは生存時間分析の枠組みで捉えられます。

$X_{i,t}$が進級に与える要因の大きさは、学年によって大きく異なることが想定されます。例えば、1~2年生は単位が多少取れなくても後から挽回可能なので留年しづらく、3~4年生の成績は卒業要件を満たさなければならないため留年につながりやすい、といった状況が考えられます。

留年せずに卒業出来るか、という枠組みを考えるときにまず思い浮かぶのは、薬学などで用いられる比例ハザードモデルなどがあります。
しかし、比例ハザードモデルは共変量が時によって変化しないと仮定しているため、$X_{i,t}$が時と共に変化

元記事を表示

#Python DeepLearning基礎 (数学1/4)

#1.シグマ
シグマ($\Sigma$): 複数の数値の総和

$$\sum_{k=1}^n a_k = a_1 + a_2 + \cdots + a_n$$

$$\sum_{k} a_k = a_1 + a_2 + \cdots + a_n$$

“`python
import numpy as np

a = np.array([1, 2, 3, 4, 5])
print(np.sum(a))
“`

“`:実行結果
15
“`
#2.ネイピア数

ネイピア数$e$

$$e = 2.71828 18284 59045 23536 02874 71352 …$$

(式 1)
$$ y=e^x=\exp(x) $$

この式は、微分しても式が変わらないという大変便利な特徴を持っています。

“`python
import numpy as np

def get_exp(x):
return np.exp(x)

print(get_exp(1))
“`

“`:実行結果
2.718281828459045
“`
### グラフ表示

↓グ

元記事を表示

Pythonでソートする時のテクニック

## はじめに

Python3で競プロをしているときにソートの方法をド忘れすることがあるのでメモ

以下、インタプリタモードで実行しているため、行の最初に `>>>>` がついているものは入力だと思って見てほしい。

## list.sort() と sorted(list) の違い

`list.sort()` は元のリストをソートする。返り値は `None`

“`python
>>>> list = [2, 3, 5, 1, 4]
>>>> list.sort()
>>>> list
[1, 2, 3, 4, 5]
“`

`sorted(list)` は元のリストは変更せずにソートした結果を返す

“`python
>>>> list = [2, 3, 5, 1, 4]
>>>> sorted(list)
[1, 2, 3, 4, 5]
>>>> list
[2, 3, 5, 1, 4]
“`

## 逆順にソートしたい時

以下、 `list.sort()` でも `sorted(list)` でも同じオプションを使うので `sorted(list)` のみ扱う

元記事を表示

【初心者】ざっくりわかるGoogle Colaboratoryを使ったPythonのWebスクレイピング

以下の方の説明がわかりやすかったです。
参考:[Pythonによるスクレイピング①入門編|スクレイピング を用いて、データを自動抽出してみよう](https://code.dividable.net/tutorials/python-scraping-blog/)

ざっくりWebスクレイピングするときの流れがわかりました。
次は複数サイトから情報取得出来るようコードを改変したいと思います。

# サイトのHTML取得
“` python
import requests
from bs4 import BeautifulSoup
html_doc = requests.get(“https://www.yahoo.co.jp/”).text # yahooサイトのHTML取得
soup = BeautifulSoup(html_doc, ‘html.parser’) # BeautifulSoupの初期化
print(soup.prettify()) # HTMLをインデントして見やすくする。
“`

# 取得したHTMLの加工
“` python
# Titleの取得
pr

元記事を表示

円と直線の交点を求める(sympyの行列)

(参考)円と直線の交点を求める
https://qiita.com/tydesign/items/36b42465b3f5086bd0c5
(参考)sympyで円と直線の交点
https://qiita.com/mrrclb48z/items/2d5bd66507166913573b

1行で、できそうな気もします。

#最初から値を代入
“`
# 【例】中心(3,2) 半径 5 の円と、直線 3x+2y-16=0 の交点を求める

元記事を表示

機械学習 線形回帰

○この記事の要点
線形回帰を学習したのでメモ

線形回帰:
・回帰問題の予測を行うアルゴリズム
・y = b + axの直線で表現する
・各データと予測で出す直線の誤差(損失)を最小にするパラメータを求める。
・誤差の測定には、平均二乗誤差を利用(直線と各データの距離の2乗の平均)
・説明変数が大きくなるに連れて、目的変数も大きく(小さく)なる関係性をモデル化できる。
・教師あり学習

#○ソースコード(Python)
“`ruby:線形回帰モデル
# 線形回帰
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
%matplotlib inline

# 学習データ
X = [[10.0], [8.0], [13.0], [9.0], [11.0], [14.0], [6.0], [4.0], [12.0], [7.0], [5.0]]
y = [8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.

元記事を表示

【自動化】WEBサイトの変更を検知してLINEに通知する

# はじめに
高校生になりました。
このコロナの影響で学校にいけなくなり、学校側が用意したWEBサイトを定期的に見てそのサイトに書いてある指示に従って自宅で学習するように言われましたが、そのWEBサイトが重く、また毎日更新を確認するのは面倒です。しかしできるだけ情報は早く入手したいです。そこでWEBサイトの更新を検知してLINEに通知するPythonのプログラムを書くことにしました。

# 全体の流れ
1. Pythonの標準ライブラリであるurllibを使ってWEBサイトのHTMLを取得します。
2. それをBeautifulSoupというライブラリを使って分析し、必要な部分だけ抽出します。
3. (2ループ目以降)今回抽出したものと前回抽出してファイルに保存したものを比較します。
3. 新しく抽出したものをCSV形式でファイルに保存します。
4. 3で比較した結果をLINENotifyで通知します。

これを繰り返します。
実行するたびに前回実行したときに取得したものと比較します。(このプログラム自体は毎回起動しては終了する)
このプログラム自体に定期的に実行する機能はなく、こ

元記事を表示

Seabornでhueを引数に持たないメソッドでも色分けをする方法

#はじめに
データを綺麗なグラフで可視化できるライブラリseaborn。なかでもいくつかのメソッドではhueという引数にカテゴリを指定すると、そのカテゴリごとに色分けをしてグラフを描いてくれます。ところが、一部のメソッドはこのhueを引数にとらないものもあります。そんな場合でもカテゴリごとに色分けをする方法を紹介します。

#環境
python: 3.7.4 seaborn: 0.9.0

#hue
まずはcountplotメソッドでhueを使ってみましょう。データはtitanicです。

“`python
import pandas as pd
import seaborn as sns

data=pd.read_csv(“train.csv”)

sns.countplot(x=’Embarked’, data=data, hue=’Survived’)
“`
![countplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632285/77e9eee5-ce91-d41b-0ca4-a

元記事を表示

言語処理100本ノック 2020【00~69 解答】

この記事は[言語処理100本ノック 2020【00~59 解答】](https://qiita.com/drafts/e4fdb7c94de7600557f8/)の続きです。

この記事では、第6章(50-59)の機械学習について扱います。

## リンク

この記事にはコードのみを載せました。問題文や解き方の補足は下記のリンクを参考にしてください。

[言語処理100本ノック2020 60-69](https://kakedashi-engineer.appspot.com/2020/05/06/nlp100-60-69/)

# 第7章: 単語ベクトル

## 60. 単語ベクトルの読み込みと表示

“`python
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format(‘GoogleNews-vectors-negative300.bin’, binary=True)
model[‘United_States’]
“`

## 61. 単語の類似度

“`python
model

元記事を表示

OTHERカテゴリの最新記事