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

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

マイページからいいね(LGTM)順が消えたので Qiita API 使って取得する

# 初めに

いいね順が見れなくなったので、コードを書くことにしました。
消されたということは、需要がなかったんですかね…

# 動作環境
– Windows 10
– Python3.7.1(Anaconda)

# コード

USER_ID を変更すれば、別ユーザーの投稿一覧も取得できると思います。

“`python
import http.client
import json
import math

CONN = http.client.HTTPSConnection(‘qiita.com’, 443)
USER_ID = ‘riekure’
PER_PAGE = 100

class Api:
# リクエスト結果をJSON形式で返す
@staticmethod
def request(http, url) :
CONN.request(http, url)
res = CONN.getresponse()
data = res.read().decode(‘utf-8’)
return

元記事を表示

ゼロから始めるLeetCode Day43「5. Longest Palindromic Substring」

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

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

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

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

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

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

前回
[ゼロから始めるLeetCode Day42「2. Add Two Numbers」](https://qiita.com/KueharX/items/4c2734a5d0b5db87f1b3)

今はTop 100 Liked QuestionsのMediumを解いています。

元記事を表示

素因数分解の良問!ABC052/ABC067 Factor of Factorial を解いてみた!

こんばんは、Ruteです。
久々に良問を解いた気がします。
今回はABC052/ARC067 C – Factors of Factorialについて、私がどのようにACしたのかを解説したいと思います!(コードはPython3です)
# ABC052(ARC067) C問題
https://atcoder.jp/contests/abc052/tasks/arc067_a?lang=ja

### 問題概要:
整数$N$が与えられます。$N!$の正の約数を$10^9+7$で割ったあまりを求めて下さい。
制約:
$1≦N≦10^3$

### 解法:
$10^3!$は、計算すると$2568$桁程度の整数になります。これを愚直に素因数分解していっても良いのですが、間違いなく実行時間超過(TLE)になりそうです。

ここで、$N! = 1×2×3×… N$であることに着目すると、1からNまでのそれぞれを素因数分解した結果を合わせたリストを作成すれば、$N!$の

Discordで通話中のみのチャットが作りたい!

はじめまして。Qiita初投稿です。

Discordを使用してるとき、今通話中の人だけでチャットしたい事ってありませんか?
例えばゲームの招待コードとか、、
話してることに関連したリンクとか、、、
ボットのコマンドを打ちたいときとか、、、、

今回はそんなときに使える通話中のみ使用できるチャットルームを[discord.py](https://github.com/Rapptz/discord.py)を用いて作っていきます。

# 完成品
![chatbot.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347998/4da886fc-35bf-9c9d-8077-b06d54352fac.gif)

# 準備
まずは、ボットプログラムを作るための準備を行いましょう。

投稿時の環境
– Python 3.8.3
– discord.py 1.3.3

このボットにはチャンネルを閲覧できる権限、ロール管理の権限とチャンネル管理の権限が必要です。

こちらでは細かな説明を省きます、以下の記事を参考に

ラズパイ リレーモジュールの使い方 Python

#0.最初に
今回作るものがどういう感じで動くのか見てみたい方は、[こちら](https://youtu.be/QV2pnvX0O3I)(youtubeの動画)でどうぞ。

#1.ラズパイとリレーモジュールをつなげる
![Polish_20200601_154923646.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616944/1ac58f73-cdb8-1dc1-11f5-6c4eb2d2fa4c.jpeg)
さっそくこのリレーモジュールにワイヤーをつないでいきます。
![IMG_20200601_154117.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616944/3b946ee1-dd3e-fecc-f189-13d82c546818.jpeg)
GND(緑)
IN1(青)
IN2(赤)
IN3(灰)
IN4(白)
VCC(黒)
![IMG_20200601_155921.jpg](https://qii

django-allauthでログイン機能(ユーザ認証機能)を実装する

# 概要
– Djangoのログイン機能(ユーザ認証)の実装には、標準の`django.contrib.auth`がある。([公式ページ](https://docs.djangoproject.com/en/3.0/topics/auth/)
– `django-allauth`を使うと、簡単に実装できる
– TwitterアカウントやGitHubアカウントなどでもログインできる。[公式ページ](https://www.intenct.nl/projects/django-allauth/)、[ドキュメント](https://django-allauth.readthedocs.io/en/latest/index.html)を参照。個別に設定が必要なので、今回は割愛。
– 今回は、メルアドとパスワードでの認証にする

# 環境
– Python 3.6.9 (2019-07-02)
– Django 3.0.3 (2020-02-03)
– django-allauth 0.41.0 (2019-12-18)

# 準備
– django-adminの`startproje

JetsonNanoにOpenCVをインストールする方法 Python

#0.最初に
今回はYoutubeに上がっていた[こちら](https://youtu.be/tFGZjVUR_Ck)の動画を参考にしてインストールします。
#1. OpenCVのインストール
まず、github上のレポジトリをクローンします。
“`git clone https://github.com/JetsonHacksNano/buildOpenCV
“`
![opencv1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616944/66a10eac-79a8-3884-e285-a588b113084f.png)
それが終わったら他のディレクトリに移動します。
“`cd buildOpenCV “`
![opencv2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616944/65f7cfe9-99d1-8ac0-8355-caca858ab3cd.png)
そして、インストールを開始します。
!

セルカウント健忘録

ど素人は忘れ易いのでメモ書き

環境
windous10 home(64bit)
anacondanavigator
Jupiternotebook
python3(3.7.7)
opencv(3.4.2)

やりたい事としてはNAS等級確認時の粒(粒子)の数を数えるプログラムを作成したい。
ちなみに初学者。
周囲に教えてくれる人はいないので独学。
おかしい箇所は多々あります。

参考文献

粒をカウントする (粒子解析)


C++用なのでpythonに合わせるのに苦労しました。

使用画像としては上記参考文献に倣い種画像を使用。
![seed.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607764/8b9f4ecb-8d33-9a5c-27a8-631ab44dc4c5.jpeg)

## 使用ライブラリ
“`python:cell_count.ipynb
import cv2
import sys
import os
import numpy as np
import pand

Goで開発していたが、途中でPythonに切り替えた件を振り返る。

# イントロダクション
目下、開発中のプロダクトなので詳しいことは書けないのですが、いろいろと気付きの多い出来事だったので、
少し自分自信の振り返りも兼ねて、投稿してみたいと思います。

これは、決してGoよりPythonのほうが優れているとかそういった話ではないです。
今回、自分は開発者というよりプロジェクトマネージャー(以降、PM)という立場になります。

# Goの採用
パネイルのコア技術はPythonなのですが、今回、開発にあたってGoを採用していました。
主な採用理由としては、「プロトコルとしてgRPCを採用するにあたって、gRPCとの組み合わせ事例が多い」からでした。

gRPCの採用理由は、「同時に企画されていた別プロダクト(Python)との連携が想定されており、異なるプログラミング言語間でも型を維持したままデータ交換が可能」なことからでした。

当初は、プロダクトのリリース時期も未定でプロトタイプ的に実装されていたので、この時点では、社内的に実績のない新規技術を採用しても、特に問題がない状態でした。
問題がなかったかどうか検証するために、そもそも技術選定がどうあるべき

Win10 + Python3 + selenium + chromedriver で headless chrome を試してみる

#目的
Windows10 + Python3 + selenium + chromedriver で headless chrome を試してみる
#モジュールのインストール
##seleniumのインストール

pip3 install selenium

##chromedriver-binaryのインストール

pip3 install chromedriver-binary 

を実行すると、最新版のモジュールがインストールされる

Successfully installed chromedriver-binary-84.0.4147.30.0

サンプルを実行すると以下のエラーメッセージが発生する(かもしれない)

selenium.common.exceptions.SessionNotCreatedException: Message:
session not created: This version of ChromeDriver only supports Chrome versio

Cloud Pak for DataのNotebookでmatplotlibのグラフ日本語文字化けを解消する

matplotlibやseabornでグラフを書いた時に、グラフの日本語が文字化けして以下のように豆腐(□□□)になることがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397277/98f0f714-5e1e-7739-d794-c13f8e8c6735.png)

これは環境に日本語フォントが入っていなかったり、適切に設定されていないことが原因で、matplotlib/seaborn固有の問題です。解決策は[他の記事](https://qiita.com/katuemon/items/5c4db01997ad9dc343e0)でも解説されていますが、これをCloud Pak for Data (以下CP4D)上で解決する方法です。

環境: CP4D v2.5, v3.0LA

CP4Dでは、Notebookで起動するPython環境は予め用意されており、かつランタイムを起動するたびに初期状態で起動するため、一度Python環境に設定すれば未来永劫OKというわけには行きま

PythonのCelery、RabbitMQ(Docker)を動くところまで

メッセージブローカーとしてDockerで起動RabbitMQを使用し、Celeryを使った単純なプログラムが動作するところまでを書く。

内容はほぼ公式ドキュメントの通りだが、DockerのRabbitMQを使うように変えている。

## RabbitMQ

```shell
# 起動
docker run --rm -d --hostname my-rabbit --name rabbitmq -p 5672:5672 -p 8080:15672 rabbitmq:3-management

# 停止
docker stop rabbitmq
```

5672が使用するポート。8080(15672)ポートはブラウザから見れる管理画面。(今回はなくてもいい)

## ライブラリのインストール

```shell
pip install celery
```

バージョン4.4.2がインストールされた。

## プログラムの用意

```python:tasks.py
from celery import Celery

app = Celery('tasks', backend

Pythonの開発環境をPoetryとDockerで作成してmatplotlibのグラフを描く

随時更新していくつもりです。

## 目的
pythonの開発環境をPoetryとDockerで構築し、データの可視化をmatplotlibで行えることを目指します。
1. Dockerfileを作る
2. Docker image をビルドする
3. コンテナを起動する
4. 動作を確認する

## 1.Dockerfileを作る
```Docker:Dockerfile
FROM python:3.8.3-buster

ENV DISPLAY=host.docker.internal:0.0
ENV PATH $PATH:/root/.poetry/bin

RUN mkdir -p /workspace

RUN apt-get update \
&& apt-get install -y git \
curl \
&& curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

WORKDIR /workspace

CM

Cloud Pak for Dataの分析プロジェクトのJobを環境変数付きでAPI実行する

Cloud Pak for Data (以下CP4D)の分析プロジェクトでは、NotebookやData Refinery FlowをJob化してバッチ実行することができます。今回やりたいことは、以下の2点です。

* Jobに引数を与えて実行時に挙動を変えられるようにしたい
* JobをCP4D外部からAPIで実行したい

厳密に言うとJobは「実行時に引数を渡す」と言うよりは「環境変数をセットして起動」という表現のほうが正確のようです。おそらく内部的にはOpenShiftのPodとして起動するため、環境変数をOpenShiftのConfigMapとして扱っているのだと推測します。

JobをAPIで起動し、その際に環境変数を与えて処理ロジックに渡す、ということを実際にやってみます。

# Notebookを作成
Notebookを作成し、それをJob化します。
今回扱う環境変数として「MYENV1」「MYENV2」「MYENV3」を想定し、値をpandasのデータフレームに加工して、CSVとして分析プロジェクトのデータ資産に出力します。
これらの環境変数はもちろんデフォルトでは定義

numpy Loadtxtについて

numpyのLoadtxtを利用する際に、海外OS(Spanish)のせいか文字変換のエラーが発生

ValueError: could not convert string to float: '235.00 ;591.00 '

元のコード train = np.loadtxt("XXXXXXXXXX", delimiter=',', skiprows=1)

色々と調べたところ、file Pathの前にrの追加とdelimiterを;に変更することで解決

修正後のコード train = np.loadtxt(r'XXXXXXXXX', delimiter=';', skiprows=1)

海外OSでは、地味にcsvファイルを扱う際に色々と気を付けないといけないことを実感しました

Anaconda環境でGraphvizを使う

#概要
`Graphviz`をAnaconda環境下で使用する分には、condaプロンプトでインストールするだけで良さそうだったので、手順をまとめました。

※その他の環境で使用したい場合は、以下を参照してください。
[【Windows10】Graphvizのインストール](https://qiita.com/BARANCE_TW/items/c3f7816d38cc9e746bbd)

#パッケージのインストール

```
conda install python-graphviz
```
#環境変数をセットする
binまでのパスを環境変数にセットします。

```
...\Anaconda3\pkgs\graphviz-2.38-hfd603c8_2\Library\bin
```
※環境変数の追加の仕方がわからない場合は、[こちら](https://qiita.com/BARANCE_TW/items/c3f7816d38cc9e746bbd)を参照してください。

注:[OK]を押して環境変数の画面をちゃんと閉じること。パスが通らず1時間くらい悩んだ:confounded:

Django REST Frameworkで複雑な形式のSerializerを実装する

自分用忘備録
逐次追加します

基本的に`to_representation()`と`to_internal_value()`オーバーライドすれば何とかなる。

## 環境
* Python 3.8
* django 3.0.6
* djangorestframework 3.11.0

## 特定のフィールドでグループ化(group by)してネスト
[^groupby]
[^groupby]: (~~あまり参考にならない~~)参考:https://stackoverflow.com/questions/31071702/django-restframework-group-by

### やりたいこと
次のような`model`があったとき

```python
class Message(models.Model):
user = models.ForeignKey('User', related_name="messages", on_delete=models.CASCADE)
messsage = models.TextField()
```
デフォルトの`

ゼロから始めるLeetCode Day42「2. Add Two Numbers」

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

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

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

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

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

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

前回
[ゼロから始めるLeetCode Day41「394. Decode String」](https://qiita.com/KueharX/items/4228d2a815922b1631be)

今はTop 100 Liked QuestionsのMediumを解いています。

ABC169 A,B,C問題解説(Python)

#ABC169 A,B,C問題解説

どうもs_y1127です。
本日行われたABC169のPythonによる解説を行いたいと思います。

(20/6/1 11:55追記)
乗算の表記を^で統一しました。

##A.Multiplication 1
###問題文
A×Bを求めてください。

###制約
1≤A≤100
1≤B≤100
入力は全て整数である。

###コード
```python:Main.py
A,B = map(int,input().split())

print(A*B)
```

簡単ですね。
入力したものを掛けるだけ。

##B.Multiplication 2
案外誤答が多かったB問題

###問題文
N個の整数
A1,...,AN
が与えられます。

A1×...×AN
を求めてください。

ただし、結果が
10^18
を超える場合は、代わりに -1 を出力してください。

###制約
2≤N≤10^5
0≤Ai≤10^18
入力は全て整数
である。

###コード
```python:Main.py
N = int(input())
A = list

Python3.9の新機能(2) - Pythonで有向非巡回グラフのソートをする

##はじめに

2020年10月にリリースが予定されているPython3.9で新たに加わる変更を[Python3.9の新機能 (まとめ)](https://qiita.com/ksato9700/items/d5df9d36147796c86c77)という記事でまとめています。少し分量のありそうな話題を別記事にしていますが、これはその第二弾で、有向非巡回グラフのソートについてです。

##有向非巡回グラフとトポロジカルソート

まず、ここでいうグラフは折れ線グラフとか棒グラフとかデータを視覚的に表す図表のことではなく、グラフ理論のグラフです。グラフはデータ構造の一種で、ノード(頂点)とそれらを繋ぐエッジ(枝)で構成されています。ノードやエッジに何かしらの意味をもたせることによって、関連性を持つ情報を表すことができます。

グラフにもいくつか種類があり、その最初の分かれ道がエッジに方向があるかないか。方向があるものを有向グラフ(左側)、無いものを無向グラフ(右側)といいます。
![スクリーンショット 2020-05-31 13.11.10.JPG](https://qiita-image