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

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

【可視化】Bokeh・plotlyを使ってみた!【備忘録】

## 初めに

– 今回はBokehとplotlyについて触ってみたので、備忘録も兼ねて記事に残しておきたいと思います。
– 本記事は色々な記事を参考にして自身の備忘録を兼ねて作っておりますので、その点はご了承ください。
– なお、本記事はあくまで私の理解したところの範囲内で記載しており、内容の正確性は保証いたしかねますので、その点も併せてご了承ください(間違えがあれば教えてください、宜しくです)。

## 1. Bokehとは?

“そもそも、_`ボケ(英:bokeh)`_とはレンズの焦点の範囲外に生み出されるぼやけた領域の美しさ、及びそれを意図的に利用する表現手法([from Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%9C%E3%82%B1_(%E5%86%99%E7%9C%9F)))”
だそうです(なんのこっちゃ?)。

さて、話はpythonで使える`可視化`ライブラリに話を戻したいと思います。
普段は_`matplotlib・seaborn`_あたりを使ってますが、もう少し動的な(_≒interactive_な)表現できる

元記事を表示

部分集合のリストに対応する元の集合リストのindexを取り出す。

ある二つのリスト(A, B)を用意する。ここで$B\subset A$である。
部分集合Bに対応するAのindexを取り出したい。

つまり

“`math
A = [1\sim 100の整数のリスト]\\
B = [1\sim 100の偶数のリスト]\\

\Longrightarrow index = [1, 3, 5, 7…, 99]
“`
このようなindexを取得する。

#実装

“`python
A = list(range(1, 101))

B = list(range(2, 102, 2))
“`

部分集合Bに対応するAの要素にTrueを返す関数がNumpyにある。

“`python
import numpy as np

isin = np.isin(A, B)
print(isin)
#array([False, True, False, True, False, True, False, True, False…
print(len(isin) == len(A))
#True
“`

また、Trueの要素のindexを返す関数

元記事を表示

pyenv installがBUILD FAILEDしたとき

# エラー
pyenv installしようとして以下のエラーが出た。

“`shell-session
$ pyenv install 3.8-dev

Downloading openssl-1.0.2k.tar.gz…
-> https://pyenv.github.io/pythons/6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0
Installing openssl-1.0.2k…
Installed openssl-1.0.2k to /Users/xxxx/.pyenv/versions/3.8-dev

python-build: use readline from homebrew
Cloning https://github.com/python/cpython…
Installing Python-3.8-dev…
python-build: use readline from homebrew
ERROR: invalid Python executable:

元記事を表示

【覚書】pythonのstring.Template.substituteでは日本語キーを使えない

# どういうこっちゃ
こういうこと。
Python 3.7.2で確認。

“`.py
import string

# ↓これだと ValueError: Invalid placeholder in string が発生する
# template = string.Template(‘eng_keyは${eng_key}です。日本語キーは${日本語キー}です’)

template = string.Template(‘eng_keyは${eng_key}です。日本語キーは${ja_key}です’)
data = {
‘eng_key’: ‘eng_hogehoge’,
‘日本語キー’: ‘ja_ほげほげ’,
‘ja_key’: ‘ja_hogehoge’
}

print(template.substitute(data))
# eng_keyはeng_hogehogeです。日本語キーはja_hogehogeです
“`

dict内に日本語のキーを持っている場合は注意しましょう。

元記事を表示

Pythonのselfはなぜ必要なのかを初学者なりに考察してみた

※5/24に、より良い記載方法を思いついたので追記しています。
# クラスメソッドの第一引数であるselfとは

クラスの勉強をする際に、初めのとてつもなく大きな壁になるのが**なんでメソッドの引数に”selfを使わなければいけないのか”**というところだと思う。

ルールだから入れましょうということで納得させる場合も多いと思うが、しっかりと構造を理解して先に進めたい初学者にとってはとうてい納得できるものではないと思う。

私自身もPythonの勉強を始めたばかりではあるが、seltの使い方でついに学習が止まってしまった。
「なぜ使うのかちゃんと教えてくれ!!」と思ってしまい、モヤモヤしたままで進めたくないからである。

恐らくは、ルールですということで先に進めてもそれほど苦労することは無い気がするが、やはりちゃんと理解してすすめたいので、学習内容をまとめてみた。
私も初学者のひとりなので、できる限り初学者の方が理解できるように記載内容を努力してみた。

今回の学習にあたり、[このサイト](https://codor.co.jp/python/reason-to-use-self)の説

元記事を表示

enumerate関数を利用してリストのindexを取得してみた

# indexが振られていない時に活用できるenumerate関数
enumerate関数を効果的に利用できる場面はどのようなときかを考えていたところ、ちょうど競技プログラミングで以下のような課題が出題されたので、まさに使いどころだと思った。

# 問題
学生のテストと欠席回数のデータが学籍番号順に与えられたとき、成績が合格点以上になっている学生の学籍番号を順に出力するプログラムを作成してください。学籍番号は 1 から順に与えられます。
学生の成績はテストの点数から 欠席回数 × 5 点 を引いた点数とする

# 入力値

> N M
a_1 b_1
a_2 b_2
a_3 b_3

N:学生の人数
M:合格最低点
a_n:テストの得点
b_n:欠席回数

# enumerate関数を利用してindexを取得する
もしかしたら他にも良い方法があるかもしれないが、enumerate関数を活用して回答を出力してみる。
enumerate関数を使うと、forループの中でリストの要素とインデックスが同時に取得できる。

“`python
# man:学生の人数、score:最低合格点
#

元記事を表示

Pythonでソートをする。ついでにアルゴリズムを考えてみる。

#メソッド、組み込み関数でのソート
まずは以下のリストについてソートすることを考えてみる。

“`python
data = [5, 3, 2, 4, 1, 6]
“`

Pythonでリスト型を昇順または降順にソートするにはsort()とsorted()の二種類が存在する。
– リスト型のメソッドであるsort():そのリスト自体をソート
– 組み込み関数sorted():ソートされたリストを新しく戻り値として返す
##リスト型のメソッドsort()
もとのリスト自体を書き換える。

“`python
data.sort()
print(data)
# [1, 2, 3, 4, 5, 6]
“`

デフォルトでは昇順のソートになっている。降順にソートするためには引数reverseをTrueにする。

“`python
data.sort(reverse = True)
print(data)
# [6, 5, 4, 3, 2, 1]
“`

注意が必要なことはsort()では戻り値はNoneである。

“`python
x = data.sort()
print(x

元記事を表示

Sample Adaptive MCMC

#1. Overview
 ”Sample Adaptive MCMC$^{[1]}$”という新しいMCMCをNIPS2019のProseedingで見つけたので実験してみた。Numpyroには既に実装済み。興味を持たれた方は是非論文を見てください。
 MCMC法では提案分布の調整が重要だが、本手法はサンプル値に基づいてパラメトリック提案分布(正規分布等)のパラメータ(平均、共分散行列)を適応的に調整する手法である。また、有効サンプルサイズを稼ぎやすい手法である。
 [1] Michael Zhu, Sample Adaptive MCMC (https://papers.nips.cc/paper/9107-sample-adaptive-mcmc)
#2. Algorithm
 アルゴリズムの概要は、$N$個のサンプル値から平均$μ$と共分散行列$Σ$を計算し、この平均$μ$と共分散行列$Σ$をパラメータとするパラメトリック提案分布から新たなサンプル値$θ_{N+1}$をサンプリングする。これらの$N+1$個のサンプル値から確率的にどれか一つを破棄し、新たに構成された$N$個のサン

元記事を表示

Ruby Python Java 大文字小文字を区別しないソート

# はじめに
ソートと言えば、数値順・辞書順ですが、それ以外のソートについて調べてみました。
# 嵌った話
@jag_507 さんの*[AtCoderでRuby学習10【第一回アルゴリズム実技検定 DoubleCamelCase Sort】](https://qiita.com/jag_507/items/5cc3e09121679ef48f51)*を読んで、*[AtCoder 第一回アルゴリズム実技検定 F – DoubleCamelCase Sort](https://atcoder.jp/contests/past201912-open/tasks/past201912_f)*をやってみましたが、ソートがうまくいかないです。

“`sort.rb
a = [“FisH”, “DoG”, “CaT”, “AA”, “AaA”, “AbC”, “AC”]
a.sort
# => [“AA”, “AC”, “AaA”, “AbC”, “CaT”, “DoG”, “FisH”] # 実際の返り値
[“AA”, “AaA”, “AbC”, “AC”, “CaT”, “DoG

元記事を表示

Django 初心者が簡単なアプリをつくる4

## はじめに
Django 初心者が簡単なアプリをつくる3の続き。前回はCRUDのC、つまりCreate部分をClass-based-viewで作成した。今回はClass-based-viewからFunction-view(関数ビュー)に書き換えて、2つを比較しながらどうやってDjangoは動いているのかを追いかけてみたい。

### 初心者が簡単なアプリをつくるシリーズ
– [Django 初心者が簡単なアプリをつくる1](https://qiita.com/soh506/items/4035650d2ea19e82d8fd)
– 準備・Djangoの全体像・models.pyの作成
– [Django 初心者が簡単なアプリをつくる2](https://qiita.com/soh506/items/98239c6b1c6fbf737429)
– Read部分の実装(urls.py・views.py・templateファイルの作成)
– [Django 初心者が簡単なアプリをつくる3](https://qiita.com/soh506/items/34cef1d386

元記事を表示

Qt for Python OS間のフォントの差異を調整する

備忘録かつ添削をお願いしたく。
Widgetの大きさはどのOSでもほぼ同様に再現されるのですが、フォントの大きさがそろわない。DPIの違いと関係あるのだろうと当たりを付けてOS間のフォントの大きさを調整するコードを書いてみました。

“`python
from PySide2.QtCore import QOperatingSystemVersion
from PySide2 import QtWidgets,QtGui

currentOsType = QOperatingSystemVersion.currentType()

if currentOsType == QOperatingSystemVersion.OSType.MacOS:
font.setPointSize(20)
return(font)

if currentOsType == QOperatingSystemVersion.OSType.Windows:
font.setPointSize(20/1.33333)
else:

元記事を表示

Wikipediaのダンプからページを取り出す

Wikipedia は全ページのダンプを提供しています。巨大なデータですが圧縮したまま扱えるようにインデックスが用意されています。実際にデータを取り出してみます。

# 準備

ダンプデータについての説明は以下にあります。

* [Wikipedia:データベースダウンロード – Wikipedia](https://ja.wikipedia.org/wiki/Wikipedia:%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89)

> ファイルサイズが巨大なため、解凍したXMLを通常のエディタやブラウザで開かないようにご注意ください。

日本語版 Wikipedia のデータは以下にあります。

* https://dumps.wikimedia.org/jawiki/

記事執筆時点で入手可能な2020年5月1日版より、以下の2つのファイルを使用します。

1. jawiki-20200501-pages-artic

元記事を表示

BigQueryにPythonで接続

# 内容
BigQueryのクライアントライブラリをPythonで使用して、BigQuery上のデータを取得してみます。

## クライアントライブラリをインストールします
“`
pip install –upgrade google-cloud-bigquery
“`

## サービスアカウントを作成します
クライアントライブラリを有効にするためには、サービスアカウントを作成し、認証を設定する必要があります。設定しなければ、DefaultCredentialsErrorが発生します。

「IAMと管理」 → 「サービスアカウント」 → 「サービスアカウント作成」 

でサービスアカウントを作成した後、「キーを作成」でキーが入ったJSONファイルがダウンロードされます。

## BigQueryに接続してみる
BigQueryに以下のデータセットを作成しておきました。

スクリーンショット 2020-05-25 4.39.18.pngdataclassを利用したシリアライズフレームワークpyserdeを紹介する

pyserdeというdataclassを利用したシリアライズフレームワークを開発している。読み方はパイセルデ。

## TL;DR

普通に定義したdataclassに`@serialize`, `@deserialize`デコレータを付ける

“`python
@deserialize
@serialize
@dataclass
class Foo:
i: int
s: str
f: float
b: bool
“`

すると、`to_json`でJSONへシリアライズ。

“`python
>> h = Foo(i=10, s=’foo’, f=100.0, b=True)
>> p

元記事を表示

vuetify+vue/cliによるフロントエンドと、pythonのresponder+sqlite3によるAPIで、SPA(single-page application)のウェブサイトを実装してみたり

# はじめに

この前[responder](https://responder.kennethreitz.org)と[SQLite](https://docs.python.org/3/library/sqlite3.html)との組み合わせで簡単なウェブサイトを作る例をしました。
-> https://qiita.com/phyblas/items/0f5a7413e6ad4b1685a0

今回はresponderとSQLに加えて、SQLデータベースと接続してデータの閲覧や追加や更新や削除したりできる[SPA(single-page application)](https://ja.wikipedia.org/wiki/シングルページアプリケーション)のウェブサイトにします。

フロントエンドは最近とても人気のjavascriptフレームワークである[vuetify](https://vuetifyjs.com/ja/)を使います。

vuetifyのコンポーネントは特に設定しなくてもレスポンシブデザインになっているというところは便利です。

pythonの方で使うモジュールは主

元記事を表示

Twitter Streaming API用の完璧で汎用的なモジュールを作ってみる

こんにちは!すずともです!
今回は、TwitterのStreaming APIについて。

#(1)Twitter Streaming APIとは
TweetDeckみたいに、ツイートをリアルタイムで取得できるAPIのことです。

といっても、ユーザのTLをリアルタイムで取得できる「User Streams API」は2年ほど前に廃止されました。

現在利用できるStreaming APIは「Filter realtime Tweets」というものです。
これは、検索条件を指定して、その条件にマッチしているツイートをリアルタイムできるAPIです。

これには、2種類のAPIが用意されています。

– statuses/filter API
– PowerTrack API

この2つの違いは、無料版か有料版かの違いで様々な制限の違いがあります。
詳しくは、[OverView](https://developer.twitter.com/en/docs/tweets/filter-realtime/overview)のページを見てください。

僕はそんなにお金持ちじゃないので、今回は無料

元記事を表示

【Python】pyautogui(PyMsgBox)インストールエラーに対する暫定対策

##概要
昨日(2020/05/24)、pipで外部ライブラリのpyautoguiをインストールしようとしたら、エラーが出てインストールができなかった。半月ほど前は同じPCで問題なくインストールできていたので、おかしいな、と思いアレコレ試してみた。根本的な原因はまだ分かっていないが、ひとまず暫定的に対応できたので記しておく。

##結論
pyautoguiと一緒にインストールされる外部ライブラリ「PyMsgBox」で異常が発生していると予想。
pyautoguiインストール前に**PyMsgBoxの最新ver.の一つ前のver.1.0.7を個別にインストールしておき、
その後、pyautoguiをインストールする**ことでエラーを回避してインストールすることができた。
pipで最新verでないライブラリをインストールするには、以下のようにver.を指定してインストールを行なう。
`pip install PyMsgBox==1.0.7`

##エラー内容

“`
Preparing wheel metadata … error
ERROR: Command errore

元記事を表示

Python: 株価予測その②

# 日経平均株価の時系列データの取得

## 時系列データの取得その1

日経平均株価の過去のcsvデータを取ってきて保存します。

“`python
# csvを読み込む時のコード
import pandas as pd
from io import StringIO
import urllib

def read_csv(url):
res = urllib.request.urlopen(url)
res=res.read().decode(‘shift_jis’)
df = pd.read_csv(StringIO( res) )
return df
“`

“`python
# 日経平均株価の時系列データの取得
import pandas as pd
from io import StringIO
import urllib

# 上記の関数を使い日経平均株価の時系列データを取得
url = “https://indexes.nikkei.co.jp/nkave/historical/nikkei_stock_average_dail

元記事を表示

【学習記録】PyhtonのTkinterで不思議なダンジョンゲーム作成

pythonで動くものを作りたい!と思い、『Pythonでつくるゲーム開発入門講座』(実践編含む)で勉強中です。

なぜpythonのtkinterなのか→私の最終目的はゲーム開発ではなく、スクレイピングなどのデータ収集や、データ分析、業務効率化など。よって、ゲーム開発に適したC++やUnity?でなく、pythonでゲーム作成。pygameライブラリを使わないのも同じ理由。

スクレイピングやデータ分析、機械学習をピンポイントで勉強しても、今のところ応用方法が思いつかないので、遠回りになるけれど、ゲームを作成しながら、プログラミングを覚えようという魂胆。NCPを動かすのに、機械学習とかディープラーニングを組み込んでそのあたりの実践経験も積めたらなぁとか欲張ってます。

ある程度学習出来たので、

元記事を表示

Python数理最適化パッケージPuLPの計算エンジンを速いものにする(Windows版お手軽編) & 計算時間を指定する

# はじめに
数理最適化問題(数理計画問題)の中で、線型最適化問題(線型計画問題)や整数最適化問題(整数計画問題)(※ただし数式がすべて線型のもの)を解いてくれるPythonパッケージとして、**PuLP**があります。

– 参考Qiita記事: [Python+PuLPによるタダで仕事に使える数理最適化](https://qiita.com/samuelladoco/items/703bf78ea66e8369c455)

PuLPは、解きたい対象をPython上で数式として記述できるモデリングインターフェース部分と、**数理最適化ソルバー**と呼ばれる、式として記述したものを解いてくれる計算エンジン部分とが、きれいに分かれています。PuLPには、数理最適化ソルバーとして、 無償で商用利用可能な COIN-CBC( [公式サイト(GitHub)](https://github.com/coin-or/Cbc) )の、とあるバージョンが同こんされているほか、自分で入手したほかの数理最適化ソルバーを呼び出すこともできます。ということは、COIN-CBCより高性能な数理最適化ソルバーを用

元記事を表示

OTHERカテゴリの最新記事