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

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

JupyterLabをローカルとリモートで使い始める方法。git拡張もできる。

##始めに

JupyterLabを導入した時の個人的なメモ。環境構築は忘れやすいので。

####参考資料

* Installation — JupyterLab 2.2.6 documentation
https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html

* JupyterLabのすゝめ – Qiita
https://qiita.com/kirikei/items/a1639954ce5ccaf7ac3c

####実行環境

Anacondaユーザーはpipと競合するので、この記事の対象外です。

* macOS Catalina 10.15.6
* pip 20.2.2
* python 3.8.5

##インストール

“`
$ pip install jupyterlab
“`
これだけです。ただし、Jupyter Notebook 4.3以上が必要なので

“`
$ jupyter notebook –version
“`
で確認しておきます。この時は6.

元記事を表示

GitHub Actionsを利用してpytestする

# はじめに

本記事では、GitHub Actionsを利用して、Pythonのテスト実行とカバレッジ計測をするGitHub Actionsを作成したいと思います。

[GitHub Actions](https://github.co.jp/features/actions)とは、GitHubが提供するCI/CDのサービスです。

今までCircleCIを利用していましたが、いつの間にかGitHub Actionsが利用できるようになっており、試しに使ってみたら便利だったので記事にしました。

CircleCIと比べてGitHub Actionsが良いな思ったのは以下の3点です。(GitHub ActionsとCircleCIを両方ガッツリ使っているわけでは無いので、間違った内容を言っていたらすいません。)

1. CircleCIでCIを実行するためには、CircleCI上で初期設定を行わなければならず、GitHubとは異なるサイトで設定を行うのが煩雑
1. GitHubにpackage(pythonの登録は現時点ではできないですが、将来的に来そう)やrelease(tag)を登

元記事を表示

【Python】動的にimportできるライブラリを自作しました

こんにちは!ぬこすけです!
pythonにはimportlibというモジュールを動的にimportしてくれる組み込みライブラリがあるのですが、それをもっと使いやすくするようなライブラリを自作しました!

* github:https://github.com/hiroki0525/autoload_module

## このライブラリでスバリ何ができる?
パッケージ名を指定することで、**配下のモジュールを動的にimportした上で、モジュールで定義されているクラスオブジェクトを取得することができます!**
具体的には次のようなPythonコードを書くことができます!

* ディレクトリ構成

“`
project/
├ example.py
└ validator/
├ validator_a.py
├ validator_b.py
└ validator_c.py
“`

* validator_a.py

“`python
class ValidatorA:
# bとcも同様
def valildate(self, input):

元記事を表示

Pandasでwarningが発生した箇所の見つけ方

## 背景
pandasでwarningが発生したけど、どこで発生したかわからないことがたまにあります。そのようなときはpandasのオプションをセットして、warningではなくerrorをraiseするように設定すれば、warningの発生箇所を素早く特定できます。

“`python
pd.options.mode.chained_assignment = ‘raise’
“`

## 例
“`python
import pandas as pd
pd.options.mode.chained_assignment = ‘raise’

df = pd.DataFrame({‘a’: [1, 2, 3], ‘b’: [4, 5, 6]})
df2 = df[df[‘a’] == 2]
df2[df2[‘b’] == 5] = 1
“`

## 出力

“`
Traceback (most recent call last):
File “/Users/hogehoge/python/lib/python3.7/site-packages/IPython/core/i

元記事を表示

AtCoder Beginner Contest 176 C問題「Step」解説(Python3,C++,Java)

皆さんこんにちは!Ruteです!
この記事は、AtCoder Beginner Contest 176の問題のC問題の解説になります!!
A問題・B問題の解説を見ていない方は、以下の表で示したリンクよりご確認下さい。
##各問題・解説へのリンク

|A|B|C|
|—|—|—|
|[ABC176 A](https://qiita.com/rute_not_route/items/4c3497ca95e0fd75a629)|[ABC176 B](https://qiita.com/rute_not_route/items/d22bafa86bdf1140b217)|この記事です!!|

それでは、C問題の解説を始めます。

#問題概要
$N$人が1列に並んでいて、前から$i$番目の人の身長は$A_i$である。
それぞれの人の足元に、高さ$0$以上の踏み台を設置し、全ての人が以下の条件を満たすようにしたい。

条件:
(自分の身長と)踏み台を込めて身長を比較したとき、自分より前に、自分より背の高い人が存在しない

この条件を満たす

RとPythonのDocker作業環境の構築

# 前提
* WSL2でdocker環境を構築していること
(構築方法は以下で紹介)
* コマンドプロンプトを管理者権限で開いて、WSL上で操作していること

[WSLでdockerの環境構築](https://qiita.com/SeijMura/items/a61f3d8d693d7c9f4efb)

# Dockerfile

以下のコードを、ローカルの作業ディレクトリ内に”Dockerfile”という名前で配置してください。

~~~docker
FROM ubuntu:18.04

# set timezone
RUN apt-get update \
&& apt-get install tzdata \
&& ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN date

# install packages
RUN [“/bin/bash”, “-c”, “\
apt-get update \
&& apt-get install -y \
vim \
buil

簡単にRESTful APIのラッパーを開発するライブラリ「apywrapper」

## TL;DR

– 「[apywrapper](https://github.com/sh1ma/apywrapper)」というライブラリを開発した

– 爆速でAPIラッパーが開発できる
– RESTfulなAPI__のみ__をサポート
– https://github.com/sh1ma/apywrapper

APIのラッパーを作るときに考えることはリクエスト処理やレスポンスデータのシリアライズなど様々あると思いますが、真にデータを欲しているとき、それらについて考え、悩むのは時間の無駄と言えるでしょう。

_サーバにパラメータを投げると、レスポンスにオブジェクトが返ってくる_

実際、やりたいのはこれだけのことです。

それを`apywrapper`で実現するコードを紹介します

## 例

“`python
from dataclasses import dataclass
from apywrapper import Apy

api = Apy(host=”https://example.com/api”, headers={“api_token”

RaspberryPiでメモリリークに対応した話

メモリリークなんて考えたことなかった。

[以前書いたコード](https://qiita.com/shin1007/items/4d7eb0ef1eee5b551215)をラズパイでは知らせてたらメモリエラーが出てきてだめになりました。ガーベージコレクション`gc.collect()`じゃ対応しきれていなかったので、OSに標準搭載の定時実行機能を利用したよ、という話。
全体としては、「毎7分に起動して、色々読み込んでもらって、毎0分に指定のことを実行してもらう」みたいな処理にした。

# 対策1:OS標準搭載の定時実行機能の利用
“`sh
crontab -e
# nano editorの選択
1
# 以下のものを追記
# 分 時 日 月 曜日 コマンド
7,17,27,37,47,57 * * * * python /home/pi/Desktop/abcdefg.py
# 保存
Ctrl + O
# 決定
Enter
# 終了
Ctrl + X
# 確認
crontab -l
“`

# 対策2:実行したら抜けるためのコードを追加
別に`import sys`しなくてもエラ

RSSのデータをZabbixへ格納する(外部チェック編)

 RSS のアップデートを Zabbix で監視する仕組みを簡単に作ってみました。Zabbix 単体の機能では実装できないため。Zabbix の外部チェックを使用し実装してみました。
 RSS をテキストに出力し、前回との差分を取得するという形でも良かったのですが、Zabbix サーバに障害が発生し、別のサーバで稼働させるとなったときに、チェック用のファイルをわざわざ移すのは面倒だし、絶対に忘れると思い、外部チェックを選択しました。

## 環境
– CentOS 8.0 (インターネットへアクセスできること)
– Python 3.6
– Zabbix 5.0

## 実現したこと
– Python を使って RSS を取得する
– 前回からのアップデート分を取得し、Zabbix のアイテムへ格納する

## ここではお話しないこと
– Python の初期設定方法
– Zabbix のインストール方法
– Zabbix の一般的な機能説明

## Pythonで実現したこと
 Python では、RSS をインターネット経由で取得し、タイトル、更新日を取得し、1行に書き出すという処

LDH所属アーティストの転移学習による分類

#1 導入
LDHファン歴10年、Aidemy研修生のSchwimmerです。EXILEをはじめとするLDH事務所に所属するアーティストは、10年前と比較して、メディアへの露出がとても多くなったと思います。しかし、私の身の回りでも「みんな同じに見える、、」とか「誰がどのグループに所属しているかわからない~」といったことを耳にします。
そこで、今回はLDHを代表するグループ、EXILE、EXILE THE SECOND、三代目JSOUL BROTHERS、GENERATIONSに所属する総勢24名をCNNおよび転移学習によって顔分類し、どこのグループに所属するかも併せて出力したいと思います。

ここで、LDHによく精通されてない方に、グループ構成を紹介したいと思います。
**EXILE**(15)
ATSUSHI, TAKAHIRO, AKIRA, SHOKICHI, NESMITH, TETSUYA, 黒木啓司, 橘ケンチ, NAOTO, 小林直己, 岩田剛典, 白濱亜嵐, 関口メンディー, 佐藤大樹, 世界

**EXILE THE SECOND**(6)
AKIRA, SHOKIC

AtCoder Beginner Contest 176 B問題「Multiple of 9」解説(Python3,C++,Java)

Ruteです。
この記事は先ほどのA問題の解説の続きになります!

##各問題・解説へのリンク

|A|B|C|
|—|—|—|
|[ABC176 A](https://qiita.com/rute_not_route/items/4c3497ca95e0fd75a629)|この記事です!!|[ABC176 C](https://qiita.com/rute_not_route/items/5f9c1f899cc4b10c23ce)|

それでは、B問題の解説を行います。

#問題概要
$N$が$9$の倍数であるかを判定して下さい。

##制約
・$0 \leq N \leq 10^{200000}$
・$N$は整数

今回は、Python3とC++,Javaで解法が異なりますのでご了承下さい。

#解説
##解法1(Python3の場合)
*後で説明する解法2でも解けます。
Python3の場合は、`int`型で表せる整数に限度がないので、以下のような条件分岐を書くことでACすることが出来ます!
「ゼロから作るDeep Learning」自習メモ(その6の3)

「ゼロから作るDeep Learning」(斎藤 康毅 著 オライリー・ジャパン刊)を読んでいる時に、参照したサイト等をメモしていきます。 [その6の2](https://qiita.com/slow_learner/items/95603dcbe8784036fadb)← → [その7](https://qiita.com/slow_learner/items/efbe24999562c3630c93)

いまだに2層のニューラルネットであれこれやってます。

#1桁の数字を2つ1組にして、その和が9未満か9以上かを、2層ニューラルネットに判定させます

こんなのは、計算させたほうが早そうですが、

>P86
ニューラルネットワークの利点は、すべての問題を同じ流れで解くことができる点にあります。たとえば、解くべき問題が「5」を認識する問題なのか、「犬」を認識する問題なのか、それとも、「人の顔」を認識する問題なのかといった詳細とは関係なしに、ニューラルネットワークは与えられたデータをただひたすら学習し、与えられた問題のパターンを発見しようと試みます。

ということなので、あえてやってみ

nteractのインストール

# nteractとは?
– Netflixなどで利用されてるjupyter環境
– デスクトップ版と通常のjupyterのようなweb版がある
– ビジュアライズ機能に特化してる
– csv取り込んでDataFrameにするだけで色々なグラフを描画してくれる
– jupyter環境なのでpythonを使える

# web版のインストール
“`
pip install nteract_on_jupyter
“`
anaconda環境があればこれで基本は入るはず

# 起動
“`
jupyter nteract
“`
consoleでこれを叩けば起動する

# 起動画面
![スクリーンショット 2020-08-27 16.06.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315596/934a318b-5d8e-574c-8995-c147c37f4c05.png)

こんな感じのがブラウザに立ち上がる
pythonのマークをクリックするとファイルが作成される

#
“`python:

AWS LambdaのqueryStringParametersとmultiValueQueryStringParametersの違いについて

##環境
Python3.7
プロキシ統合あり

##queryStringParametersを使う
API GatewayからLambdaに渡されたペイロードからパラメータを取得できます。

リクエスト
https://XXXX/XXXX/XXXX?id=1&value=foo

“`python

response = event.get(‘queryStringParameters’)

return {
‘statusCode’: 200,
‘body’: json.dumps(response)
}
“`

結果

“`json
{
“id”: “1”
“value”: “foo”
}
“`

パラメータ名で値を取得できます。

リクエスト
https://XXXX/XXXX/XXXX?id=1&value=foo

“`python

response = event.get(‘queryStringParameters’).get(‘value’)

return {
‘statusCode’: 200,

個人メモ] pipenvで環境構築 2020年

pipenvのドキュメントから毎回見つけるのが結構手間なのでメモ.

“`shell

# プロジェクト直下にvenvを作る
export PIPENV_VENV_IN_PROJECT=1

# 環境を作成
pipenv install –python 3.6

# Pipfileから環境構築
pipenv install

# Pipfile.lockから環境構築
pipenv sync

# requirements.txtからパッケージをインストール
$ pipenv install -r path/to/requirements.txt

# Pipfile.lock を作成
$ pipenv lock

# requirements.txtを作る
$ pipenv lock -r

# requirements.txt devを作る
$ pipenv lock -r –dev

“`

ドキュメント
– [Pipenv: 人間のためのPython開発ワークフロー — pipenv 2018.11.27.dev0 ドキュメント](https://pipenv-

WSL 2 + Python + VSCode で環境を整える [ 機械音痴 ( 自称 ) 後輩の挑戦!! ]

しろいのです。
記事執筆時現在、フリーター。
かつてはどこかの会社でインフラエンジニアの端くれをしていました。

バイト先の後輩にプログラミングを教えることになってしまったため、
開発環境を整え競技プログラミングに挑戦するためのチュートリアルを書きます。

今回は、**環境構築編**です。

Windows 10 上で不自由なく、Linux と Python を使った開発ができる環境を構築します。

正直、機械音痴を自認する方には超ハードコアな内容かと存じますが、気持ちを強く持っていきましょう。

## 経緯、そしてなぜ競技プログラミングなのか?
**あんまり大事じゃないので読み飛ばしてもOK**

* 後輩氏、大学の教職課程で情報教育論を受けた際、プログラミング学習の大切さを悟る
* だが、特に作りたいアプリのアイデアはなく、とりあえずアプリが動く仕組みを学びたい
* ~~筆者にパッケージとして成立したアプリを制作するスキルがないため、趣味で少々嗜む競プロでお茶を濁したい~~
* ~~筆者が AtCoder 茶色だけに!ガハハ~~

## 誰が為の記事か
* ( メイン )

unittest覚書

# unittestとは
> 単体テスト(ユニットテストと呼ばれることもあります)は、プログラムを構成する比較的小さな単位(ユニット)が個々の機能を正しく果たしているかどうかを検証するテストです。
通常、関数やメソッドが単体テストの単位(ユニット)となります

[単体テスト(ユニットテスト)とは | ソフトウェアの検証の種類 | テクマトリックス株式会社](http://www.techmatrix.co.jp/t/quality/unittest.html)

要するに関数とかがちゃんと動いているかチェックするテストである。
先に関数の振る舞いを決めてテストを書いてから関数の実物を書くのがテスト駆動開発-**TDD**(あっているか自信なし)

## どんな風に書くん?

“`python
import unittest
import <テストしたい関数とか>

class Test<テストしたい(ry>(unittest.TestCase): # 名前は重要ではないけどunittest.TestCaseを引き継ぐのは必須
def test_<テストする関数>(self)

登山の新しいお供?やまみちあんしんボタン。

#概要
SORACOM Button を使って山登りがちょっと安全になる?デバイスつくりました。

###機能
– ボタンを押した位置を地図上に表示する
– 緊急時に特的の連絡先にメッセージを送る

###言い訳
今回は SORACOM Button のメリットを生かすため、極力スマホに頼らない構成にしました。

と、言うのは半分言い訳で正直なとこ今回の機能はスマホのアプリで出来ちゃいます…
( [YAMAP](https://yamap.com/) さんめっちゃ便利だからみんなも使おう!僕もいつもお世話になってます!)

でもスマホってバッテリーの持ちが悪かったり、モバイルバッテリーは重たかったりしますよね?

SORACOM Button なら…

**電池式だから予備電源の確保は簡単!**
**持ち運びも便利な軽量設計!**

なんて山登りに最適なんだ!
と言うことで、宜しくお願いします。

#インデックス
– [なぜ SORACOM LTE-M Button なのか](#なぜ-soracom-lte-m-button-なのか)
– [構成](#構成)
– [今回の詰まり

geopandasとarcpyを使って基盤地図情報を編集して東京都の市区町村ごとに仕分けた後、建物の面積がどれくらいあるのかを集計してみる

主にgeopandas、そして一部でのみarcpyを使い、基盤地図情報で公開されているデータを加工して東京都の各市区町村ごとの建物面積がどれくらいあるのかを計算してみたいと思います。

手順には多くの無駄が含まれているかもしれませんが、記録としてそのまま残しています。

**使用したGISソフト**
QGIS…ダウンロードした基盤地図情報ファイルである建物ポリゴン(GML形式)をシェープファイルへ変換する
ArcGIS Pro…建物ポリゴンの自己交差の修復

コードの実行はjupyter notebookで行いました。

**手順の概要**
①建物を表すポリゴンデータを東京都全域分入手
②ポリゴンデータをシェープファイルに変換し、編集ができる状態にする
 ②’ポリゴンデータの自己交差を修復
③位置に基づいたメッシュごとに分かれたシェープファイルを統合し、一つの大きなシェープファイルにする
④東京都の行政界ポリゴンデータを使い、ひとかたまりのシェープファイルにクリッピングを行い市区町村ごとに分ける
⑤建物ポリゴンの座標系を地理座標から平面直角座標系に変更し、面積の計算を行えるようにする(

Twitter Streaming API を使ってリアルタイム自動返信Botを作る

# はじめに

[こちらの記事](https://qiita.com/YiwaiY/items/ce790838725aba54c035)でやったことのTwitter API部分について詳しく書いていきます。

Twitter自動返信Botの開発を進めていく中で、2020年版の「ツイート(リプライ)をリアルタイムで取得する」といった内容の参考記事をなかなか見つけられなかったので、今回いろいろ自分で調べたことについてまとめたいと思います。

こちらが今回作ったBotの仕様です。

– リアルタイムでタイムラインを監視し、特定のワードを含んだ自分あてのツイートを見つけると、自動で返信する

– 1アカウントにつき自動返信は1日1回まで

– フォロワー以外のツイートには反応しない

– リツイートには反応しない

– 非公開アカウントのツイートには反応しない(できない)

– 自分のツイートにも反応できるようにする

# Twitter API

## Twitter APIキーの取得

2020年8月現在では、APIキーの取得方法は若干異なりますが、利用申請の方法などこちらの記事を参考に