Python3関連のことを調べてみた2019年11月30日

Python3関連のことを調べてみた2019年11月30日

pythonのライブラリ図鑑

pythonではほとんどなんでもできると言っても過言ではないほど万能なのですが

それぞれどのライブラリを使えばできるのか把握するために簡単にまとめておきます

自分が現時点で知ってるもののみなので随時更新していきます

## ファイル処理

– os
– csv

## 計算系

– math
– numpy
– spicy

## グラフの描画

– matplotlib

## データ処理

– pandas

## web・通信系

– Django
– Flask
– socket

## スクレイピング

– beautifulsoup4
– requests

## 画像処理

– opencv
– pillow
– skimage

## 日本語の音声認識

– SpeechRecognition
– julius

## 日本語の自然言語処理

– mecab
– janome

## 英語の音声認識

– pocketsphinx

## 英語の自然言語処理

– nltk
– polyglot
– treetager
– word2vec
– Doc

元記事を表示

Pythonの制御文

# はじめに

ここでは、Python初心者向けに「制御文」について解説していきます。
Python3系の使用を想定しています。

# 条件分岐

条件によって処理を分けたい場合に使います。

## if文

`if`に続く条件式が`True`なら、処理が実行されます。
`if 条件式:`と書いた次の行は、半角スペース4つ分インデントして書き始めます。

“`python:if_1.py
x = 2
y = 2

if x == y:
print(‘xとyは等しい。’)
“`

この例では、`x == y`は`True`となるので、`xとyは等しい。`と出力されます。

また、`else`を入れると、`if`に続く条件式の判定が`True`でなかった場合の処理を記述できます。

“`python:if_2.py
x = 2
y = 3

if x == y:
print(‘xとyは等しい。’)
else:
print(‘xとyは等しくない。’)
“`

さらに、`elif`を入れると、それより上の条件式の判定が全て`False`で、`elif`に続く

元記事を表示

【OpenAI Gym】CartPole問題の解答例

## 要約

OpenAI Gymの「CartPole」のQ学習での解答例を共有します。強化学習について学ぶ際の理解の一助になれたらと思っています。ある程度のpythonの知識を有している方を対象としています。

コードだけを見たい場合は、こちらをご参照ください。

## 経緯・動機

### 強化学習に辿り着くまで

業務においてAIについて学ぶ必要性があるなかで、教師あり機械学習や教師なし機械学習について、インターネット上の情報やソースコードを元に手元でコーディングをして機械学習を試しても、なかなかきっちり「推定できている」、「分類できている」など実感が湧きませんでした。

私の学習不足も要因として多々あるかと思いますが、なかなか機械学習に関する技術が身につかず色々とどうするかを考えていた時に、AIに関する “とある記事” を見つけました。

それは「負けられないオセロAIが発表され話題になっている」という内容のものでした。そのオセロを試した際に、プレイヤーとして負けようと挑むよりも「どうやって作ったのか」ということに興味が湧きました。

合わ

元記事を表示

スクレイピングによるProduce 101 Japan練習生順位の可視化

# Produce 101 Japanとは
[PRODUCE 101 JAPAN OFFICIAL SITE](https://produce101.jp)
韓国から輸入されたオーディション番組の日本版で、歌手デビューしてほしい練習生への投票結果が週ごとに発表される番組です。
週が進むと、60位、35位と足切りが進んで脱落者が出てしまいます。

今回は公式サイトからランキング結果をスクレイピングによって抽出し、
最新順位(2019/11/29時点で9週目)までに生き残っている練習生の順位変動を可視化してみました。

### 出来上がりの完成図
練習生の名前は一部伏せております。
![Unknown.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225066/ab35a870-1730-1838-583b-5ab845c67e23.png)

# 主な流れ
1. スクレイピング
2. データ整形
3. ランキングを可視化

### 1. スクレイピングによりランキングを取得する
週ごとの順位を個別に収

元記事を表示

DataFrameにtimezone情報を含むdatetime64型カラムが存在すると線形補完できない問題への対処 

## はじめに
分析エンジニアがよく利用するpythonのpandasライブラリ。
分析業務を行わないソフトウェアエンジニアでも、システムを結合する際にどうしても利用しなければならない場面があります。

でも前に使ったの半年前なんですよねー。。。なんで言うこと聞いてくれないのですかDataFrameさん。

ということで今回は、とあるDataFrameに対して線形補完を行うと以下のエラーが発生しました。

1時間毎の時系列データを30分毎のデータに変換し、線形補間しようとしています。

“`python
>>> df.asfreq(’30min’)
forecasted_at temperature tcdc hcdc mcdc lcdc dsrf
target_datetime

元記事を表示

tkinterでスクロールを表示するサンプル

## 動作環境
Windows10
PyCharm
python3

## コード
・コピペして使えます。

“` python3
import tkinter as tk

def main():
root = tk.Tk()
root.geometry(“400×300″) # 横400x縦300

# Canvasを生成
canvas = tk.Canvas(root, bg=”white”)
canvas.place(x=0, y=0, width=200, height=300) # 処理位置的にここが良さそう

# Scrollbarを生成してCanvasに配置処理
bar_y = tk.Scrollbar(canvas, orient=tk.VERTICAL)
bar_x = tk.Scrollbar(canvas, orient=tk.HORIZONTAL)
bar_y.pack(side=tk.RIGHT, fill=tk.Y)
bar_x.pack(side=tk.BOTTOM,

元記事を表示

備忘録:Python3でMySQLに接続する in CORESERVER

#前書き
レンタルサーバーを使ったことがない上、ロクに使えるプログラムも書いていない人間が、CORESERVERでMySQLサーバーを借りた時の備忘録。MySQLに接続するPython3のプログラムを記載するとともに、詰まりがちであった箇所を載せている。
先に言い訳をすると、サーバーに入れたファイルが文字化けするやら、最初から使える外部ライブラリがわからないやら、改行コードの置換に手間取るやらで問題がごちゃまぜになっていた。
だからここにあるのは「とりあえずこうすればうごくよ」という初心者の感想でしかない。ご注意を。

#やりかた
順番は好きなように。ただしSSH接続は、現在のIPアドレスに対して許可が必要。
##MySQLにデータベースを作る
コントロールパネル「データベース」→「MySQL」からデータベースの新規作成。
この「DB名」と「パスワード」は、プログラムからデータベースに接続するのに必要。

##ファイルをサーバーにアップロードする
コントロールパネル「サイト設定」→「FTP/SFTP接続情報」からファイルマネージャーを開いてアップロード。とりあえず/public_htm

元記事を表示

Python3 M2Cryptoライブラリを使用してSSL証明書の更新期限チェックをする

## 背景
Let’s Encryptで証明書の自動更新をしているドメインで、マニュアルどおりにやっていれば、デフォルト設定で30日を切ったタイミングでSSL証明書の更新が行われるはずですが、更新が実施されているかチェックする必要性があったためスクリプトで実装しました。
実際には下記をチェック対象ドメインリストのコンフィグファイルを食わせるなどして運用しますが、実装に利用したM2Cryptoライブラリの説明があまりなかったので、実際に操作した記録を含めて書き起こしておきます。
本当は使い慣れてるurllibとかで実装できればよかったんですが、SSL証明書の検証ができる方法がよくわからなかったのでM2Cryptoライブラリを利用しました。

## 環境
* Amazon Linux
* Python3

## 利用するライブラリ
* datetime
* ssl
* M2Crypto

## Python実行環境
こんな感じでPyenvを利用してpython3環境を作成済み。

~~~
# pwd
/root/python3

# pyenv versions
system
* 3.

元記事を表示

Python3 に scikit-learn をインストールする

“`
$ pip3 install Cython
$ pip3 install scikit-learn
Successfully built scikit-learn
Installing collected packages: scikit-learn
Successfully installed scikit-learn-0.21.3
“`

元記事を表示

Pythonのlambda式で複数行を実行させたいので実験した

# 結論から先に書くと
print(“”)を2回実行させたいような場合を除いて、lambda式で複数行を実行させようと考えるのではなく、コールバック関数を使って実装した方がバグを発生させずにコーディングできると思いました。以下その考察過程です。

## コールバック関数を使った場合
・コールバック関数なので、コールバック関数内で複数行を実行するのは問題ない。

“`python
# コールバック関数
def call_back():
print(“aaaa”)
print(“bbbb”)

# 高階関数
def higher_order(func):
return func()

higher_order(call_back)
# 実行結果
# aaaa
# bbbb
“`

## 上のコードをlambda式を使って書き換えた場合
・配列にすると上手くいきました。lambda式は「文ではなくて式」なので、複数行は基本的にはできませんが、返り値を配列にすると、複数行の実行が可能になるようです。但し、難しい処理はしないで、print(“”)のように簡単な処理

元記事を表示

PyWebViewを使ったプロジェクトをPyInstallerでexeにできない

現在(PyWebView 3.1時点)、PyWebViewを使ったアプリをそのままPyInstallerでexeにしようとすると、`Pyinstaller hook can’t find WebBrowserInterop.x64.dll`というエラーメッセージでコンパイルが中断する問題が発生しているようです。

* [Pyinstaller hook can’t find WebBrowserInterop\.x64\.dll · Issue \#346 · r0x0r/pywebview](https://github.com/r0x0r/pywebview/issues/346)

大まかには上記Issueの通りなのですが、PyInstaller用のWebhookが正しいパスを指していないようで、エラーになってしまうとのこと。

上記を見た感じ最新版では修正は済んでいるものの、公開モジュールへの反映はまだ という感じのようです。

で、直るまで手作業でwebhookを直して回るのは面倒くさいので、PowerShellスクリプトを書きました。

うちでは、PyInstallerでの

元記事を表示

【SQLAlchemy】Flask+PythonでのDB連携にはSQLAlchemyがめっちゃ便利だった【Flask】

#結論

インストールするもの

“`
pip install flask SQLAlchemy flask-sqlalchemy PyMySQL
“`

次にPythonコード

“`python:dbcreate.py
# coding:utf-8
from flask import Flask, request, abort
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

#データベースの設定
sql_type, username, password, host, dbname = “”, “”, “”, “”, “”#ここは各自で埋めてください。
url = sql_type+”://”+username+”:”+password+”@”+host+”/”+dbname
app.config[“SQLALCHEMY_DATABASE_URI”] = url
db = SQLAlchemy(app)

class user(db.Model):#一般ユーザー用データベース
__tabl

元記事を表示

Python -辞書包括表記を元の形に戻してみた-

現在、内包表記の一つの辞書包括表記を勉強中です。
その途中で、辞書包括表記を元の長めのコードに戻してみたら成功したので、記事に残しておこうと思いました。

##内包表記とは
そもそも内包表記とは、一つ以上のイテレータからPythonデータ構造をコンパクトに作れるものです。(引用:Bill Lubanovic著 斎藤 康毅 監訳 長尾 高弘 訳  『入門Python3』 P.104
出版社:オライリー・ジャパン ISBN 978-4-87311-738-6)

辞書包括表記は内包表記の一つで、キーとバリューを用いた辞書の形式で内包表記をしていくものです。

##辞書包括表記を書いてみる

まずは、辞書包括表記を書いていきます。
文字列「python」の一文字ずつをキーとして、それぞれの文字のインデックスをバリューとします。

“`Python:辞書包括表記
word = “python”
letter_count = {letter:word.index(letter) for letter in word}
print(letter_count)

>> {“p”: 0, “y”:

元記事を表示

virtualenvを使ったDjango開発仮想環境構築〜新規プロジェクト・新規アプリ作成と初期設定までの手順

# はじめに

まっさらな状態から仮想環境構築〜新規プロジェクト・新規アプリ作成・初期設定までの手順を忘れることがあるので残しておきたいと思います。

**Python3系と仮想環境構築ツールであるvirtualenvがインストール済みであることを前提条件とします。**

著者の環境は以下となります。

– MacOS Mojave 10.14.6
– Python 3.7.5
– Django 2.2

**予め、Djangoの各バージョンで対応しているPythonのバージョンを確認してください。**
https://docs.djangoproject.com/ja/2.2/faq/install/#faq-python-version-support

# virtualenvを使って仮想環境構築

まず任意の場所(デスクトップ)でこれから作成するプロジェクトを入れるフォルダを`mkdir`コマンドで作成。(今回例として名前をsampleprojectとする)
`cd`コマンドで作成したフォルダ内に入る。

“`
$ mkdir sampleproject
$ cd sampl

元記事を表示

文字列から読み込む

#背景
競技プログラミングとかは

“`
3 4 5
“`

とか

“`
3
4
5
“`

みたいなタイプの入力形式が多いので、どうしてもそっちに慣れてしまう。
入力で手間取るとモチベが下がるので、一応記録しておく。

#積を返す
“`python
def product(first):
ans = 1
second = first.replace(‘,’, ”)
List = list(map(int, second.split()))
for i in range(len(List)):
ans *= List[i]
print(ans)

product(‘3, 4, 5’)
# -> 60
“`
#文字列をカウントする
“`python
def frequency(first):
second = first.split()
third = list(set(second))
for element in third:
print(element, second.count(element), sep = ‘:’)

freq

元記事を表示

QuizKnockで取り上げられたLook-and-say Sequence (見て言って数列) をPythonで生成する

先日投稿されたQuizKnockさんの動画 [【東大】Google本社でGoogle入社試験に挑戦!](https://www.youtube.com/watch?v=7KaiPOou1As) で、 **Look-and-say Sequence(見て言って数列)** が取り上げられていました。
これは以下のように、初項を1として「前の項を読み上げた数字を並べたものが次の項になる」という規則で変化する数列です。

“`
1 = 1が1個 (One 1) → 1 1
1 1 = 1が2個 (Two 1s) → 2 1
2 1 = 2が1個,1が1個(One 2, One 1) → 1 2 1 1
1 2 1 1 = 1が1個,2が1個,1が2個…
“`

今回の動画で初めてこの数列の存在を知り、面白いと思ったので
この数列を生成するプログラムをPythonで作成してみました。

“`python
def lookAndSay(initialValues, maxIteration=None):
x = initialValues
yield x

元記事を表示

pyenvを使って、python3.xを構築しよう

## pyenvとは
複数のPythonバージョンを簡単に切り替えられるツール

## 環境構築の手順
1. Homebrewをインストール
2. pyenvインストール
3. pyenvのパスを通す
3. python3.6をインストール
4. python3.6を適用

## 1. Homebrewをインストール
HomebrewとはmacOS用パッケージマネージャーで、pyenvのインストールをするために必要なのでインストールします。Homebrewを使えば、pyenv以外にも、phpやmysqlなどを入れることができます。
Homebrew公式ページ: https://brew.sh/index_ja

“`
/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
“`

## 2. pyenvインストール
pyenvはpythonのバージョン管理ツールです。

“`
brew install pyenv
“`

## 3. py

元記事を表示

pythonで背景が透明な文字や画像をウィンドウ枠なしで表示させる

## やりたいこと
・ソフトウェアを起動させるときに画像を表示させたい。
・画像を表示させるときは、ウィンドウの枠を表示させたくない。
・画像を表示させるときは、画像の背景は透明にしたい。
・起動時に画像を表示させ、裏でアプリ本体をロードさせ、その後に起動時の画像を消したい。

## 動作環境
Windows10
PyCharm
python3

## それをスプラッシュスクリーンといいます
[スプラッシュスクリーン](https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%97%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3)とは、ソフトウェアを起動させるときに表示される画像のことを言います。

## 困ったところ
・tkinterで作ったウィジェットのmainloopが抜けられなくて困りました。結局、destroy()ではなくて quit()を使えば上手く行きました。

## コード
スプラッシュスクリーンで文字を表示させる場合の例で

元記事を表示

AWS Lambda のタイムアウト発生時に別の Lambda 関数を起動し、元の Lambda 関数の処理内容を取得する

#はじめに
こんにちは。はじめまして。
最近、AWS で本番稼働する時のことをかんがえるようになりました。
Lambda の負荷テストをしていると、タイムアウトが発生して「コマッタ…」となった時のことを書いてみます。

#Lambda タイムアウト 15分問題

Lambda ってタイムアウト時間設定しなくちゃいけなくて、最大 15分しか設定できないんですよね。
(参考)
https://aws.amazon.com/jp/blogs/news/aws-lambda-timeout-15min/

で、15分以上処理しちゃうと、CloudWatch にタイムアウトのログを出すだけ… と。

まあ、Lambda に重たい処理をさせるな!ということでしょうけど、
もう作ってしまったし… なんとかできないものか…
せめて、ユーザに処理できなかったことを伝えられないものか…

#対策

ちょっと調べてみると、色々と対策はある模様。

– [タイムアウトでエラーとなってしまったLambdaのリカバリを行うLambdaを作成してみました](https://dev.classmethod.jp/se

元記事を表示

【pandas】dataframe同士の結合時の注意

# 謎
類似記事を取得する関数を作っていたときに、なぜか結果が2回出力される。

“`Python:実行プログラム
for index, row in df3.iterrows():
result = model.docvecs.most_similar([model.infer_vector([texts[490]])], topn=5)
print(result)
“`

“`Python:結果
[(61986, 0.4148428440093994), (93717, 0.40714001655578613), (67228, 0.39675790071487427), (18714, 0.39518919587135315), (71296, 0.39392682909965515)]
[(61986, 0.4148428440093994), (93717, 0.40714001655578613), (67228, 0.39675790071487427), (18714, 0.39518919587135315), (71296, 0.3939268

元記事を表示

OTHERカテゴリの最新記事