- 1. Python 機械学習 #1
- 2. 日本のワクチン接種回数の表を作成
- 3. Ubuntu+Python3(任意のバージョン)の実行環境を構築するDockerfile
- 4. Pythonで月初、月末の平日の年月日を取得する
- 5. raspi3B+にnumba-0.53.1をインストールする
- 6. Python で Slack API や Webhook を扱うなら公式 SDK(slack-sdk/slack-bolt)を使おう
- 7. PythonでPDFから画像を抽出するもっとも簡単な方法
- 8. 東京都が公開しているAPIで毎日コロナ感染者数を取得するコードpart2
- 9. csvファイルを pandas で読み込んで MySQL 8.0.24 に書き込んでみる
- 10. CoinMarketCapのAPI完全解説(初心者向け) 前編
- 11. Python の `+=` は in-place だったりそうじゃなかったりする
- 12. Google Colaboratoryでmatplotlibの練習
- 13. 東京都が公開しているAPIで毎日コロナ感染者数を取得するコード
- 14. 【AOJ】Introduction to Programming I をPython3で解説(前編)
- 15. 【Tkinter】Tkinterで電光掲示板のように文字をスクロールする方法
- 16. [Tips] 連番と辞書順とパディング
- 17. EC2 インスタンスの特定の情報を収集する
- 18. ssm inventory を aws lambda / python3.8 でたたいてみた。
- 19. describe 等で取得した情報を Dynamo DB に保存する
- 20. aws lambda で「Task timed out after 3.00 seconds」エラー
Python 機械学習 #1
# 機械学習のジャンル
機械学習を一から始めてます。勉強で自分なりに解釈をしております。間違っているところがありましたらお伝えしてくださると幸いです。
##教師あり学習
入力と出力のペア群から学習するアルゴリズムである。なぜ教師となるかというと学習のために与えられる入出力ペア群がある意味先生となるからである。アルゴリズムは入力から望ましい出力を生成する方法を発見する。
封筒に書かれた手書きから郵便番号を読み取るのも入力から望ましい出力を生成する方法を見つけて照合する事によって可能になる。##教師なし学習
入力データだけが与えられていて出力データはアルゴリズムに与えられない。だからこれと言った答えが導かれないようなものである。
例えば顧客をグループに分けるときもジャンルはある程度決まっているものもあるが新しいユーザが来るたびにジャンルは更新していくというように正確な答えというものはあまりない。##まとめ
教師あり・なしに関わらず入力データを計算きが理解できる形で表現することが重要である。
データ(=テーブル)と考え、それぞれのデータポイント(個々のメール、個々の顧客)が行となり、
日本のワクチン接種回数の表を作成
Web で閲覧できる次の表を作成します。
![vaccine_may2201.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/f9d061e5-dbdb-2b5a-684b-aa9a7e336a87.png)データの取得
“`bash
wget https://www.kantei.go.jp/jp/content/IRYO-vaccination_data.xlsx
wget https://www.kantei.go.jp/jp/content/KOREI-vaccination_data.xlsx
“`エクセルを JSON に変換
“`bash
./xlsx_to_json_daily.py IRYO-vaccination_data.xlsx IRYO-vaccination_data.json
./xlsx_to_json_daily.py KOREI-vaccination_data.xlsx KOREI-vaccination_data.json
“``
Ubuntu+Python3(任意のバージョン)の実行環境を構築するDockerfile
# この記事は
他人と同じ実行環境を構築するために、Ubuntuイメージをベースとして、任意バージョンのPython3環境を構築したかったので、勉強も兼ねていろいろ試してみた。[前も同じようなこと](https://qiita.com/ntatsuya/items/d7354e27783c0f0ee61c)をやりましたが、こちらの内容の方が汎用性が高そうなのでまとめます。
同じような状況の方の参考になれば幸いです。もっと良い方法があればぜひ教えていただきたいです。
Python3の実行環境をDockerで立ち上げるだけなら、公式の[Pythonイメージ](https://hub.docker.com/_/python)を使用するのが簡単だと思います。# 実行環境
Docker version 20.10.5# Dokerfile
以下のDockerfileからイメージをbuildする。今回はUbuntu20.04のイメージを使用し、Python3.9.5をインストールする。このあたりは、適宜自分の構築したい環境にあわせて変更してください。“`Dockerfile:Dock
Pythonで月初、月末の平日の年月日を取得する
## 概要
月初、月末の平日の年月日を取得するサンプルコード。つまり土日、祝日でない月初日、月末日を取得する。
日本の祝日判定には、[jpholiday](https://pypi.org/project/jpholiday/)を使う。
slackなどでの月初、月末の社内通知などにどうぞ。## 環境
– Python 3.7
– jpholiday==0.1.5
– pytz==2021.1## サンプルコード
“`python
import jpholiday
import datetime
import pytz
import calendar# 今日の%Y-%m-%d
def fetch_today() -> datetime:
return datetime.datetime.now(pytz.timezone(‘Asia/Tokyo’)).date()# 土日、祝日かどうか
def is_holiday(day: datetime) -> bool:
# day.weekday() => 0=月曜日…5=土曜日、6=日曜日
r
raspi3B+にnumba-0.53.1をインストールする
## バージョン情報
* kernel: `Linux 5.4.51-v7+`
* os: `Raspbian GNU/Linux 10 (buster)`
* python 3.7.3
* apt 1.8.2.2 (armhf)
* Cython 0.29.23
* numpy 1.20.2
* setuptools 40.8.0## 方法
numbaのインストールにはllvmliteが必要。
llvmliteはllvm-9かllvm-10を求めてくる。
llvm-10がaptで見つからなかったので9をインストール“`
$ sudo apt install llvm-9
$ cd /usr/bin
$ ln -s llvm-config-9 llvm-config # llvm-configのシンボリックリンクを貼る
$ pip3 install numba
“`
Python で Slack API や Webhook を扱うなら公式 SDK(slack-sdk/slack-bolt)を使おう
こんにちは、Slack で公式 SDK の開発に従事している @seratch と申します。
これから Slack の Python SDK について日本語のチュートリアルを書いていく予定で、この記事はそれらのエントリーページにしようと思っています。ご興味あれば、ぜひこの記事をストックしておいてください :wave: (良いと思ったら LGTM もぜひ)
## え! Slack に Python 公式 SDK なんてあったの?
・・と思った方も多いかもしれません。Python で Slack の Incoming Webhooks や Web API を使うとき、`requests` のような HTTP クライアントやコミュニティで開発された PyPI パッケージを使っている例をよく見かけます。Slack API は簡単に扱えることを重視して提供されていますので、もちろんそのようなやり方でも全く問題ありません!
しかし、公式 SDK を使えば、新しい API や機能への対応が容易になったり、パラメーターが非推奨になったときにいち早くワーニングログが出たり、細かい落とし穴にハマら
PythonでPDFから画像を抽出するもっとも簡単な方法
PDFに含まれるすべての画像を抽出する方法です。Python3.6+。Windowsで動かしましたがLinux等でも可能だと思います。
# 01. 環境
pyMuPDFというライブラリを以下のコマンドで入れます:“`sh
pip install pymupdf
“`pyMuPDF は `import fitz` でインポートできるライブラリです。PDFだけでなくEPUBなども読めます。[公式ドキュメントはここ](https://pymupdf.readthedocs.io/en/latest/index.html) で [PyPIの統計情報] (https://pypi.org/project/PyMuPDF/) を見ると2021/May が最新更新でGithubでは900を超えるスターが付いてます。Python3.6+で動作します。私はWindows上で動かしています。
# 02. 基本となる考え方
いくつか知っておくべき項目を列挙します。– **PDFに入っている画像形式は不定です**。どの形式の画像を入れるかはPDF作成者が決められます。jpgやpngが多いで
東京都が公開しているAPIで毎日コロナ感染者数を取得するコードpart2
前回公開した東京都が公開しているAPIで毎日コロナ感染数を取得するコードにてうまく1000件以上の件数が取れなかったためその対応を行なった。
コードは以下の通り“`python3:tokyo_corona.py
import requests
import datetime
import pandas as pd
import jsontoday = datetime.date.today().strftime(‘%Y-%m-%d’)
url = “https://api.data.metro.tokyo.lg.jp/v1/Covid19Patient”def corona_infection(start_date=today, end_date=today):
payload ={
‘from’: start_date,
‘till’: end_date,
‘limit’: 1000
}res = requests.get(url, params=payload)
data =
csvファイルを pandas で読み込んで MySQL 8.0.24 に書き込んでみる
#目的
・Windows 10に MySQL Community Server 8.0.24 をインストール済
・pandas でcsvファイルを読み込む
・python + mysql-connector-python を使ったサンプルコードを書いてみる
・対象データは[郵便番号検索](http://www.post.japanpost.jp/zipcode/)の17ISHIKA.CSV
※単にpandas.read_csvを使ったコードを書いてみたかっただけともいう
※pandasでKEN_ALL.CSVを取り込むだけだと11秒位だったので、そのままSQLに流したらどうかを試したかったという
※KEN_ALL.CSVは12万行超えだけど、トータルそう変わらなかった気も##書き込み用テーブルのSQL
“`sql
SET character_set_client = utf8mb4;
CREATE TABLE zipcode(
seq nchar(8) not null,
prefcode nchar(3) null,
kubuncode nchar(8) nul
CoinMarketCapのAPI完全解説(初心者向け) 前編
#はじめに
はじめまして!プログラマを目指して日々奮闘する高専生Ikkoです!
プログラマになるときにブログを書いてるといいらしいという話を聞いて始めてみました。
で、早速なんですが最近仮想通貨ブームが来ていて、ぼくも自分でマイニングマシンを組んで毎日頑張ってもらっているんです。
ほったコインを運用してて思ったのが、自動取引とかできたらすごい楽だなって思って。
というわけでデータ集めに使えるAPIを探していたらCoinMarketCapにたどり着きました。
ちゃんとやろうとすると結構お金かかりますけど、ある程度までなら無料で使えるしデータもたくさんあるし、個人的にはすごくおすすめです。
でも、調べたことある人ならわかると思うんですけど日本語の資料がものすごく少ないんですよね(見方を変えるとこれはすごくチャンスなのではと思う)。
というわけで、さらにクリプトに興味を持ってくれる人が増えて僕が儲かるためにできるだけわかりやすく使い方を説明させていただきます笑。
**レッツゴー!!**
Python の `+=` は in-place だったりそうじゃなかったりする# これは何?
https://qiita.com/cielavenir/items/579997ca2005ae329a16
を読んで面白かったので色々試した。
# 前提
[前述の記事からリンクされている文書](https://docs.python.org/ja/3/library/operator.html#in-place-operators) にある通り、
> 文字列、数、タプルのようなイミュータブルなターゲットでは、更新された値が計算されますが、入力変数に代入し返されはしません。
> 【略】
> リストや辞書のようなミュータブルなターゲットでは、インプレースメソッドは更新を行うので、その後に代入をする必要はありません。となっている。なので前述の記事のとおり、mutable なオブジェクトの場合
“`python:Python3
b=a;a+=x;print(b)
“`“`python:Python3
b=a;a=a+x;print(b)
“`では異なる結果が得られる。`a+=x` って `a=a+x` と同じだよね、と思い込んでいる人はこの仕
Google Colaboratoryでmatplotlibの練習
https://corona.go.jp/dashboard/
でデータが提供されているので、matplotlibでグラフにしてみた。
#データ
[都道府県別累積の陽性者](https://data.corona.go.jp/converted-json/covid19japan-all.json)
JSON形式だけど、listの中に入っているので、いったん取り出さないとdictにならない。
#データのダウンロードからグラフ化
“`python:data_dl_and_graph.ipynb
%matplotlib inlineimport pandas as pd
import requestsimport matplotlib.pyplot as plt
from matplotlib import rcParams
!pip install -q japanize-matplotlibimport japanize_matplotlib
# 「IPA」フォントをインストール
!apt-get -y install fonts-ipafont-gothic
東京都が公開しているAPIで毎日コロナ感染者数を取得するコード
東京都がこんな感じでいけてるAPIを公開しているので、勉強がてらに毎日の感染数を取得するアプリを作成してみた
##コードはわずか18行程度
“`python:tokyo_corona.py
import requests
import datetime
import pandas as pdtoday = datetime.datetime.now().strftime(‘%Y-%m-%d’)
payload = {‘from’: today, ‘till’: today, ‘limit’: 1000}res = requests.get(
“https://api.data.metro.tokyo.lg.jp/v1/Covid19Patient”, params=payload)
data = res.json()infect_data = data[0]
endCursor = data[1]df = pd.DataFrame(infect_dat
【AOJ】Introduction to Programming I をPython3で解説(前編)
AOJ(Aizu Online Judge)、Introduction to Programming Iの解答例。
https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/1
今回は、前編(1_A – 5_D)までの解答例。
## 1_A:Hello World
“`python
print(‘Hello World’)
“`## 1_B:X Cubic
“`python
x = int(input())
print(x**3)
“`## 1_C:Rectangle
“`python
A,B = map(int, input().split())
print(A*B, 2*(A+B))
“`– [map()](https://note.nkmk.me/python-map-usage/)
– [split()](https://note.nkmk.me/python-split-rsplit-splitlines-re/)## 1_D:Watch
“`python
S = int(input()
【Tkinter】Tkinterで電光掲示板のように文字をスクロールする方法
以前、ニコニコ動画のように文字をスクロールするコードを個人用に執筆したが、そのコードを失念してしまったため、自分用の備忘録を兼ねて以下にコードを記載する。
各コードの意味は#でコメントアウトした。
“`Python:scroll.py
import tkinter as tk #tkinterのインポート
root = tk.Tk()
root.geometry(“1920×80”) #geometryだと表示サイズがminsizeより細かく調節できる
canvas = tk.Canvas(bg = “black”, width=1920, height=80) #背景を設定
canvas.place(x=0, y=0) #背景を配置default_x = 1900 #初期x座標
default_y = 5 #初期y座標
x=0 #リストカウント数
text_list=[“表示テストをしてみます。今朝はよく晴れています。”,”今朝の気温は15度です。”,”今日の最高気温は20度となる見込みです。”] #文言リスト
text_st = tk.StringVar() #文字更新用
[Tips] 連番と辞書順とパディング
# 課題のありか
`abc_1.jpg`, `abc_10.jpg`, `abc_2.jpg` という順序にソートされますが、自然な感覚では `abc_1.jpg`, `abc_2.jpg`, `abc_10.jpg` となってほしいところです。例えば、Windowsのエクスプローラーは「自然な」順序で並べてくれます。細かく配慮してます。
このあたりのTipsをまとめます。参考になれば幸いです。また、こんなのもあるよという意見があればコメントください。
言語はPython3を使います。
# Tips1: パディングして生成
自分で連番をつくってよいなら、最初からゼロパディングして作ってしまえばいいので簡単です。つまり `abc_001.jpg`, `abc_002.jpg`, `abc_010.jpg` という風につくるわけですね:
“`py
names = [f”abc_{i:03}.jpg” for i in range(10)]
“`何桁パディングするかを事前に抑えておく必要はあります。そこは要注意です。
# Tips2: 自然なソートキー関数
連番が
EC2 インスタンスの特定の情報を収集する
素人が自分のノートとして書いてますが、改善点あれば是非コメントください
###リージョン指定
ec2クライアント定義時に、region_name = ‘us-west-2’ 。“`python:lambda-python38
import json
import boto3def lambda_handler(event, context):
#ec2 client を定義、引数の region_name = ‘xxx’ でリージョン指定。
ec2client = boto3.client(‘ec2’, region_name = ‘us-west-2’)#describe した値を response に入力
response = ec2client.describe_instances()#response を出力
print(response)
“`### Describeで出力される順番を使った特定のインスタンスを指定。
response[‘Reservati
ssm inventory を aws lambda / python3.8 でたたいてみた。
素人が自分のノートとして書いてますが、改善点あれば是非コメントください
###まず AWS CLI でコマンドを確認
InstanceID と インベントリタイプの指定が必要。“`awscli:aws-cli
aws ssm list-inventory-entries –instance-id i-xxxxxxxxxxxx –type-name AWS:Application
“`
今回リストしたかったのは PV Driver。確認出来た。“`awscli出力:awscli出力(一部抽出)
{
“TypeName”: “AWS:Application”,
“InstanceId”: “i-xxxxxxxxxxxxxxx”,
“SchemaVersion”: “1.1”,
“CaptureTime”: “2021-05-17T10:44:06Z”,
“Entries”: [
{
“Architecture”: “x86_64”,
“Ins
describe 等で取得した情報を Dynamo DB に保存する
素人が自分のノートとして書いてますが、改善点あれば是非コメントください
DynamoDBテーブルに入力する値を渡された関数だけをピックアップ。
“`python:aws-lambda-python3_8
import json
import boto3def lambda_handler():
#DynamoDBテーブルはあらかじめ作ってある前提。本来なら、テーブルが無ければ作るみたいな感じにすべき。
table_name = ‘test’#DynamoDBテーブルに行として追加する情報を item として定義
item = {
“db-instance-id”: ‘i-xxxxxxxxxxxx’,
“db-instance-version”: ‘1.23.3’
}#DynamoDBクライアントを定義
dynamodb_client = boto3.resource(‘dynamodb’)#テーブルにItemを入力
d
aws lambda で「Task timed out after 3.00 seconds」エラー
【Task timed out】
timeout だよ。lambda 関数の実行時間はデフォルト3秒に制限されているので、処理終了が3秒以上かかるときは変更が必要です!“`json:エラー
{
“errorMessage”: “2021-05-18T04:20:10.454Z 95510f9b-1d66-48f6-bad0-xxxxxxxxx Task timed out after 3.00 seconds”
}
“`設定 → 一般設定 → タイムアウト で、デフォルト3秒を変更。