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

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

pyclustering.xmeansでKeyErrorが出る

# コード

“`python
from pyclustering.cluster.xmeans import (
xmeans, kmeans_plusplus_initializer
)
from pyclustering.utils import draw_clusters

initial_centers = kmeans_plusplus_initializer(df, 2).initialize()

instances = xmeans(df, initial_centers, ccore=True)
instances.process()
“`

# エラー
“`
KeyError: 0

During handling of the above exception, another exception occurred:

KeyError Traceback (most recent call last)
in
6
7 instances

元記事を表示

doctest

“`py
class Cal(object):
def add_num_and_double(self, x, y):
“””Add and double

>>> c = Cal()
>>> c.add_num_and_double(1,1)
4

>>> c.add_num_and_double(‘1’, ‘1’)
Traceback (most recent call last):

ValueError
“””

if type(x) is not int or type(y) is not int:
raise ValueError
result = x + y
result *= 2
return result

if __name__ == ‘__main__’:
import doctest
doctest.

元記事を表示

ニューラルネットワークにおける学習機能を数学的に丁寧に理解しようとした(前半)。

#はじめに

 ニューラルネットワーク(深層学習)における機能に学習があります。より予測モデルの予測率を上げるために行われているモデル内の計算を一から理解することを試みました。

 今回も、オライリーのディープラーニング教科書を参考にさせて頂きました。非常にわかりやすく理解できます。
https://www.oreilly.co.jp/books/9784873117584/

 概要は以下です。

+ **ニューラルネットワークにおける学習とは何か(前半:今回)**
+ **損失関数とは何か(前半:今回)**
+ **関数の微分を実装する(前半:今回)
+ 勾配降下法について(後半)
+ ニューラルネットワークにおける勾配(後半)
+ 学習アルゴリズムを実装してみる(後半)

# ニューラルネットワークにおける学習とは何か

 モデルにおける学習とは予測した値を正解に近づける、あるいは正解率を上げることです。
 画像認識を例にとって考えます。有名な数字認識であるMNISTでは、手書き数字を見分けることを行います。
![image.png](https://qiita-im

元記事を表示

【Kaggle】LightGBMを使ってアンサンブル学習をしてみた

# 0. はじめに

今回は学習モデルの手法の一つである、**LightGBM** について調べてみました。
LightGBM はアンサンブル学習のひとつとして Kaggle でもよく利用されます。
伴って、その周辺のプロセス(ROC曲線のプロットなど)も必要になるので、ついでにまとめておきました。

参考にした記事はこちらです。

– [LightGBMの解説](http://data-analysis-stats.jp/2019/11/13/lightgbm%E3%81%AE%E8%A7%A3%E8%AA%AC/)
– [Python: LightGBM を使ってみる](https://blog.amedama.jp/entry/2018/05/01/081842#%E4%BA%8C%E5%80%A4%E5%88%86%E9%A1%9E%E5%95%8F%E9%A1%8C-Breast-Cancer-%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88)
– [lightgbmで二値分類の一連の流れをしたメモ](https:

元記事を表示

BeautifulSoup

“`py
#pip install bs4
from bs4 import BeautifulSoup
import requests

html = requests.get(‘https://www.python.org’)

soup = BeautifulSoup(html.text, ‘lxml’)

titles = soup.find_all(‘title’)
print(titles[0].text)

intro = soup.find_all(‘div’, {‘class’: ‘introduction’})
print(intro[0].text)
“`

“`text
Welcome to Python.org

Python is a programming language that lets you work quickly and integrate systems more effectively. Learn More
“`

元記事を表示

flask

“`flask.py
import _sqlite3

from flask import Flask
from flask import g
from flask import render_template
from flask import request
from flask import Response

app = Flask(__name__)

def get_db():
db = getattr(g, ‘_database’, None)
if db is None:
db = g._database = _sqlite3.connect(‘test_sqlite.db’)
return db

@app.teardown_appcontext
def close_connection(exception):
db = getattr(g, ‘_database’, None)
if db is not None:
db.close()

@app.route(‘/employee’,

元記事を表示

【Python】4変数以上の可視化ってどうするの?

#この記事の目的
データ分析において, 沢山の変数の関係性を一度に確認したい場合はどうすればいいのでしょうか?
“`pairplot“`が代表的だとおもいますが, もっとパッ!とまとめられないかと思っていたら最近, **Sankey Diagram**というものを知ったので描いてみました.

# Plotly Sankey Diagram の使い方

“`Plotly“` を使えばかけるそうなので, まずは[公式サイト](https://plot.ly/python/sankey-diagram/)のサンプルコードを丸写しして, 動くか確認してみます.

“`python
import plotly.graph_objects as go

fig = go.Figure(data=[go.Sankey(
node = dict(
pad = 15,
thickness = 20,
line = dict(color = “black”, width = 0.5),
label = [“A1”, “A2”, “B1”

元記事を表示

PythonでのDB接続管理の良さそうな方法の紹介

# はじめに
とあるOSSのコードを眺めてて、良さそうなのがあったのでそれの紹介をば。

# コード
とあるOSSというのは、[Apache Airflow](https://github.com/apache/airflow)。
この中で、[airflow/utils/session.py](https://github.com/apache/airflow/blob/master/airflow/utils/session.py) がいい感じでした。

## 簡単な説明

まずは、 `session.py` から。

“`python
import contextlib
from functools import wraps

from airflow import settings

# contextlib.contextmanager を指定すると with を使って close を自動でやってくれる
@contextlib.contextmanager
def create_session():
“””
Contextmanager that will c

元記事を表示

【鬼滅の刃で学ぶDjango】順参照・逆参照のクエリセット取得方法

# Django使ってる?
PythonのWebフレームワークでお馴染みのDjango。『いつ、どのサイトにどんなツールが導入されたかが分かるSimilarTech』によれば、シェアでは殆どの国でRuby On Railsに劣るものの、トレンドはDjangoが右肩上がりの模様。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286189/db203405-770d-4477-7529-640873782b69.png)
> [Django VS Ruby On Rails](https://www.similartech.com/compare/django-vs-ruby-on-rails)

さて、本記事の対象者はDjangoをある程度使った事がある人、MTV(あるいはMVC)モデルが多少なりとも分かる人向けの内容となっております。まだ触ったことないよって人は、[公式サイト](https://docs.djangoproject.com/ja/3.0/intro/)のチュートリアルか

元記事を表示

pythonドキュメント読み ソケットプログラミング HOWTO

https://docs.python.org/ja/3/howto/sockets.html
こちらを読んだ際のメモです。
読んでいるときの脳内をダンプしたものなので、単純に内容を知りたい方は直接ドキュメントを読むことをおすすめします。
python3.8.2

# なぜドキュメントを読んでいるか
– ここらでドキュメントを読んで、知らないだけで実は使うと便利な機能を知っておきたい
– pythonを使い始めてかれこれ8年ほどになるが、雰囲気でやっているので未だに知らない機能がある
– flask・djangoやzmqなどたまに使っているが、内部のソケットプログラミングからは目をそらしながら生きてきた
– 詳しいことはともかくざっくりとソケットって何やってんだろうと知っておきたい

# 概要
– 一般的なソケットプログラミング、なかでもINETのSTREAM(すなわちIPv4のTCP)について、pythonで書くことを通して簡単に説明するとのこと
– 現時点では何を言っているのか全くわからない
– ソケットプログラミングについても、pythonでの書き方につい

元記事を表示

【解答例(python3)】atcoderのABS(AtCoder Beginners Selection)

# はじめに
最近、競技プログラミングをやっていなかったので、
頭の体操程度に簡単な問題を解こうと思いました。

以前から[AtCoder](https://atcoder.jp/)のABC(AtCoder Beginner Contest)は解いていましたが、
そういえば[ABS](https://atcoder.jp/contests/abs)(AtCoder Beginners Selection)というAtCoder入門者向けの問題集をやっていなかったので、これを機に全10問解いてみました。

※言語は全てpython3系です。

## PracticeA: Welcome to AtCoder
問題文の通りに解答すれば良し!簡単な入出力処理が出来れば問題ありません。

“`python
a = int(input())
b,c = map(int, input().split())
s = str(input())

print(a+b+c, s)
“`

## ABC086A: Product
こちらも同様、問題文通りに解答します。

“`python
a,b =

元記事を表示

マハラノビス距離(とりあえず動くからヨシ!!)

# はじめに
今、pythonチョトワカルにならなければならずに必死こいて勉強しとるのですが
「距離はユークリッド距離じゃなくてマハラノビス距離でよろ!!」といわれ
なんやそのマハラジャみたいなのは、石油王ちゃうぞ!となりつつ
頑張って調べてみたら「フローサイトメトリーじゃん!!」となりました。
(参考、ベックマン・コールターの技術ページ:https://www.bc-cytometry.com/FCM/fcmprinciple_8-1.html)

# ユークリッド距離とマハラノビス距離
ざっくりいうと、ユークリッド距離は1=1なんだけど
マハラノビス距離は縮尺が伸び縮みするんですわい。
そのために偏差ベクトルやら共分散行列の逆行列やらを使うんですが
numpyやらscipyあたりを使うと関数でサクッと出てくる、と。
(でもいうほどサクッとじゃないよ…)

いくつか技術記事をググって実装してみたのですが
Qiitaの記事の写経をしたらなんかこのコードCOLUMNとROW時々間違ってない?
などなどありましたので、写経元を明記しつつ実際動かしたコード貼っておきます。
備忘録なのであまり

元記事を表示

Progate無料版をやってみる【Python I】

[前回](https://qiita.com/GodPhwng/items/985bb26d2157ae6f0872)に引き続きProgate無料レッスンをやっていこうと思います。

今回はPythonになります。

未経験です。
インタープリタ言語。
JavaScriptみたいなノリでやればいいのかな?w

#Python I
[公式レッスン](https://prog-8.com/python/study/1/1#/0)

###環境構築
Progateにインストール手順がありました。
→ https://prog-8.com/docs/python-env-win

インストール後はVSCodeで書いて、実行していきたいと思います。
参考にさせていただきました。
→[VS CodeでPython環境を整える](https://qiita.com/ayuchiy/items/82d6d2dfcf1acc3bec00)

レッスンに戻ります。

###文字列
・お決まりの文字列出力
 Pythonでは

“`
print
“`
を使用するらしい。

“`py
print(

元記事を表示

pyparsingを使って日本語で日本語のパーサを書いてみた。

##概要
 Pythonのライブラリpyparsingを使うと、階層的な定義の箇条書きで、読み易く変更し易い文法を定義できる。if文など使わず記述出来る点に目を付け、pyparsingのクラスやメソッド、変数名に日本語を使って文法を書いてみた。同じ内容の英文記述に較べて、日本語によるコードは一目見た時に把握し易いと感じた。クラスやメソッドまで日本語にしたのはやりすぎかもしれないが、Pythonで日本語を使ってここまでできるとは思っていなかった。
Python3.7, pyparsing 2.4.6を使用。(Anacondaディストリビューション)

##記述と実行例
 組織の3種類のメンバ名簿を想定して、それを読み込むパーサの文法を日本語で定義してみた。 Pythonの予約語以外の変数名(文法名、式名)、関数名、importしたクラス名や関数名、パース対象とも漢字を使っている。
 コードは、上から下に向かって文をボトムアップに積み上げた記述になる。最後に記述された以下の文の右辺式がトップレベルの文法で、組織のメンバに3種類あることがわかる。

“`
 協会員 = 賛助会員 | 学生会

元記事を表示

大量データで散布図を描いた時のオーバーラップをなんとかする(Matplotlib, Pandas, Datashader)

大量のデータ点で散布図を描くと、あまりに密集してしまって、ある領域にどの程度のデータが存在するのかよくわからなくなる。

例として、手書き数字画像データセット(MNIST)をUMAPで二次元に圧縮した次のようなデータを考える。

“`python
import pandas as pd

df = pd.read_csv(‘./mnist_embedding.csv’, index_col=0)
display(df)
“`

PySpark DataFrameのgroupByでAUCを算出する(pandas_udfで集計関数を定義する)

# はじめに

PySparkでAUCを算出する際、`BinaryClassificationEvaluator`クラスを利用すれば簡単に求めることが出来る。
ただし、そのままではモデル間の違いを把握するために、テストデータ全体ではなく、セグメントごとにAUCを算出したいというニーズに対応することが出来ない。

この対処法として、`pandas_udf`を使ってAUCを算出する集計関数を定義し、`agg`メソッドで算出することを行った。

# 実装例

サンプルは以下の通り。

事前に正解ラベル(`true`)と予測スコア(`pred`)を算出の上、それを参照してAUCを算出する集計関数を定義している。

`agg`メソッドの中で、`pandas_udf`で定義した集計関数は、sparkで用意された集計関数と併用することはできないので注意。
(併用しようとすると、`Cannot use a mixture of aggregate function and group aggregate pandas UDF`というエラーが出る)

“`python:UDF定義
from skle

【Python】QRコードをインメモリに生成

QRコードを生成しAPI等で返したり、メール送信する場合、
一度ファイルにセーブし、それを読み出ししたりする処理が入ります。
この処理の場合、I/Oでの速度的問題や、並列処理時に問題が生じます。

`BytesIO`モジュールを使えば、一度ファイルに吐き出すことなく、インメモリに画像を生成出来ます。

## 環境

– Python 3.7.4
– qrcode 6.1
– Pillow 7.0.0

qrcodeおよびPillowライブラリが必要です。

“`sh
pip install qrcode pillow
“`

## 生成

“`python
from io import BytesIO
import base64
import qrcode

class QRImage():

@staticmethod
def to_bytes(text: str) -> bytes:
stream = BytesIO()
img = qrcode.make(text)
img.save(fp, “PNG”

LINE BOT(オウム返し)を作る

#LINEBOTで単純なオウム返しを、Heroku、Flask、line-bot-sdkで作成した。丸2日かかり詰まった点も多いのでメモも含めて共有。

・Mac
・Python

#(1)環境整備、ディレクトリ構成
デスクトップに、ディレクトリtest_linebotを作成。
ディレクトリ内に仮想環境を構築して起動。

“`
python3 -m venv .
source bin/activate
“`

最終的なディレクトリ構成は以下の通り

“`
test_linebot
├main.py
├runtime.txt
├Procfile
└requirements.txt
“`

#(2)必要なフレームワークをインストール

“`
pip install flask
pip install gunicorn
pip install line-bot-sdk
“`

#(3)main.pyを作成

“`.py:main.py

from flask import Flask, request, abort
from linebot import (
LineB

ラズパイ4B+BU-353S4でGPSトラッキング(Python)

# ラズパイ4 + BU-353S4 + PythonでGPSトラッキング
ラズパイを用いて、GPS情報を取得する
Raspberry Pi 4Bを使いますが、別に3とかでも同じだと思います。

### 用意するもの
– GLOBALSAT BU-353S4 => USB接続のGPSセンサー
– Raspberry Pi 4

# 手順

必要なパッケージをインストール

“`shell
sudo apt-get upgrade
sudo apt-get install gpsd gpsd-clients python-gps cu
“`

USBにBU-353S4を差込み、以下のコマンドで接続を確認

“`shell
lsusb
# Prolific Technology, Inc. PL2303 Serial Portがあればok
ls /dev/ttyUSB*
# => /dev/ttyUSB0
# 使用されているポートを確認(あとで使います)
“`

USBの接続が確認できたら、以下のコマンドでgpsd設定ファイルを作成(既存の場合は下に追加)

“`bash
vi

AWSマネジメントコンソールにフェデレーテッドログインしてみた。

#はじめに

皆さん、業務でAWSは使われているでしょうか。
AWS、インフラの構築から運用までいろいろサポートしてくれていて、とても便利ですよね。
それこそインフラ担当だけじゃなくて、CloudWatchやセッションマネージャーのような環境に接続するすべての関係者にとってメリットがある機能なんかもよくリリースされています。

#ところで (問題提起)
これらの素晴らしいAWSの機能って、インフラ担当ばっかりメリットを享受していて、コンサルタントや製品開発者にはあまり届いてこないことが多いです。
何故かというと、「マネジメントコンソール」を使える人間が限られているからです。
AWSはどんどんいい機能を出してくれるのに、それを使える人間が限られているのはとてももったいないですよね。
かといって、それらをいろんな人が使えるようにインターフェースを実装するのは大変ですし、AWSが機能拡張するたびに対応する必要があるのも格好が悪いです。

#だったら (解決案)
AWSのあらゆる機能にアクセスできる最強のインターフェース、「マネジメントコンソール」を「AWSユーザーが割り当てられていない人」に