- 1. 【AtCoder】ABC227をPython3で解説(ABCD)
- 2. Python初心者がノンプロ研でPython学んでみた vol.1
- 3. NVDのAPIを叩いて脆弱性情報を自動収集してみる
- 4. 初心者がPythonでSlackbotを作ってみた!3 〜Slackbot機能編〜
- 5. DockerでMosquittoを起動
- 6. [Python] 相関係数を計算したい
- 7. 数字のお遊びもほどほどに。
- 8. 公開!週末研究ノート04 ー テキストクラス分類結果の可視化
- 9. 重回帰分析-総論
- 10. Flask Paginateでページネーション情報を日本語化する
- 11. pythonで単方向リストを実装
- 12. Python で Qiitaの投稿記事に対するView数を取得してみました
- 13. Atcoder ABC227-D Project Planningの図による考え方
- 14. 困ったことと解決したことメモ_20211115
- 15. Pythonでのアンパックの実践例(pillow)
- 16. 植物健康診断システムを作ってみた
- 17. 初心者がPythonでSlackbotを作ってみた!2 〜Slackbot起動編〜
- 18. 初心者がPythonでSlackbotを作ってみた!1 〜Slack初期設定編〜
- 19. pdfのdecrypt
- 20. ターゲットエンコーディング
【AtCoder】ABC227をPython3で解説(ABCD)
ABC227のA-D問題の解説。
https://atcoder.jp/contests/abc227
## 目次
[A – Last Card](#a—last-card)
[B – KEYENCE building](#b—keyence-building)
[C – ABC conjecture](#c—abc-conjecture)
[D – Project Planning](#d—project-planning)## A – Last Card
https://atcoder.jp/contests/abc227/tasks/abc227_a
### 解説
`A`番目の人から`N`人に`K`枚のカードを配るとき、最後のカードは誰に配れるかという問題。
回答としては、`A`番目と`K`枚のカードの和から1を引いた値を`N`で割ったあまりを出力すれば良い。このとき、あまりが0になったとき、これはカードを配りきれたということなので、`N`を出力させるようにする。
![IMG_0847.jpeg](https://qiita-image-stor
Python初心者がノンプロ研でPython学んでみた vol.1
# はじめに
こんにちは、な~です。
ここのところずっとGASをしていた私ですが、この度、Pythonを学んでみることにしました。
Pythonの本は以前買ってずっと積ん読してあったのですが、全く手がでず、ノンプロ研の講座で学んで見ることにしました。今回はこの講座の1回目で学んだことについてまとめてみます。# ノンプロ研とは
まずは、ノンプロ研とは、正式名称「[ノンプログラマーのためのスキルアップ研究会](https://tonari-it.com/community-nonpro-semi-2/)」と言います。ノンプログラマーがVBA・GAS・Pythonなどのプログラミングスキルを身につけるためにコミュニティです。
私は2021年の2月末に入会し、GASを中心に学んでいました。講座以外にも数多くのもくもく会や勉強会などが開催されており私は、多くの刺激をもらっているコミュニティです。# 目次
## はじめてのPythonこの講座では、Jupyter Notebookを使って学んでいきます。Jupyter Notebookとはプログラムの実行&記録ツールです。
![im
NVDのAPIを叩いて脆弱性情報を自動収集してみる
# 背景
私の勤めている会社では脆弱性の情報収集はメーリングリストベースのサービスを利用しているが、提供される形がテキストベースであり、自動化には即していない形となっていて効率化が難しい状態。脆弱性情報の収集自動化のための試みとして、NVDのAPIを叩いてCVE情報を自動取得する。
(もうやられている方いるのは知っていますが勉強のため自分でやる)# NVDのAPI
NVDのデータを自動取得するための手段は[NVD Data Feeds](https://nvd.nist.gov/vuln/data-feeds)に記載されている。その中でAPIの情報は[こちら](https://nvd.nist.gov/vuln/data-feeds#APIS)にある。APIは主にCVEとCPEの2つが用意されている。共通プラットフォーム一覧CPE(Common Platform Enumeration)は脆弱性をさすものではないので、今回はCVEのAPIを利用する。
# CVEのAPICVEのAPIはhttps://nvd.nist.gov/developers/vulnerabil
初心者がPythonでSlackbotを作ってみた!3 〜Slackbot機能編〜
:::note warn
この記事はプログラミングを始めて5ヶ月の初心者が書いています。間違い等あるかもしれません:bow_tone1:
:::
#目的
Slackで動くBotを作成する:robot::zap:
前回の記事は[こちら](https://qiita.com/hayahaya2/items/d952455ff5fb20808262)。
前々回の記事は[こちら](https://qiita.com/hayahaya2/items/0787225d9fa66dbcdf4f)
#対象読者
とりあえずSlackで動くBotを作ってみたい人!#完成イメージ
さて、ようやくですがBotに機能を実装させていきましょう!
今回作るBotは次のものです:fireworks:
![bot_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/2ab40a38-0fe2-206e-b3f3-559cac563ff6.png)###機能①
「こんにちは!」とメッセージを送ると、メンショ
DockerでMosquittoを起動
# はじめに
MQTTブローカーのmosquittoをDockerで起動しようとしたらちょっとだけ躓いたのでメモ。
# 躓いたやり方
デフォルトで起動したMQTTブローカーが欲しかっただけなので[ここ](https://hub.docker.com/_/eclipse-mosquitto)を参考に、
“`bash
$ docker run -it -d -p 1883:1883 -p 9001:9001 eclipse-mosquitto
“`でmosquittoを起動し、paho-mqttを使って書いた以下のようなpublisher, subscriberを起動しましたがうまくつながりませんでした。
“`python:publisher.py
from paho.mqtt import client as mqtt_client
import timeCLIENT_ID = ‘publisher’
BROKER = ‘localhost’
PORT = 1883
TOPIC = ‘pyjackal/mqtt’def on_connect(client,
[Python] 相関係数を計算したい
# はじめに
Pythonを使ってデータの相関係数を計算する方法を何通りか示します。
## 使用データ
方法を示すだけなので適当なデータ
“`text:data.csv
sqrt2,pi
1,3
4,1
1,4
4,1
2,5
1,9
3,2
5,6
6,5“`
を使用します。# 計算方法例
## Pandas
一番簡単なやりかたですね
“`python
import pandas as pd
df = pd.read_csv(‘./data.csv’)
print(df.corr())
“`
↓“`
sqrt2 pi
sqrt2 1.000000 -0.205738
pi -0.205738 1.000000
“`## NumPy
“`python
import numpy as np
import pandas as pddf = pd.read_csv(‘./data.csv’)
col1 = df[‘sqrt2’].tolist()
col2 = df[‘pi’].tolist()
数字のお遊びもほどほどに。
一部のサイトにおいては,予測式をいかに上手く作るかを競っている。
たとえば,サンプルサイズが 1000 だとして,一つのサンプルを正解にする(正解率を 0.001 上げる)ために,どれだけの特徴量(まあ,独立変数にすぎないのだが)をひねり出していることか。Titanic の元データがなんだか知らないが,乗客の名前から特徴量を紡ぎ出すというようなことも行われているようだが(そもそも,大元の Titanic のデータにそんなものがあるのかどうなのかしらないのではっきりとはいえないのだが),どうかなあ?と思う。
まあ,せめてもの防波堤は,どんな特徴量を紡ぎ出そうが,それは train data でのことで test data ではそのような特徴量が機能するかどうかは保証できない。
しかし,恐るべきことに,test data に含まれない特徴量を train data に含まれる特徴量で,推定?して test data でも有効な予測式を作り上げようという試みまで出てきたのか?
ここまで来ると,もう,ゲームだよね…
所詮,train data と test data という閉じた
公開!週末研究ノート04 ー テキストクラス分類結果の可視化
# はじめに ー 週末研究ノートとは?
個人的に研究的な活動をやるにあたり、オープンにしてみたら面白いかもと思い、自分が興味を持っている ざっくりテーマについて、これから、ゆるい週末研究を公開していこうと思います。(有識者の方のアドバイスも、ちょっとというかかなり期待してます!笑)
どこかの権威的な学会やジャーナルなどで発表する予定はないため、万が一、私の記事を利用する際には自己責任でお願いします。そんな人はいないと思いますが、念のため。
# 今回のサマリ (TL; DR)
– PR 曲線で可視化
– LIME を使った可視化
– デフォルトでは、日本語には対応していないのでちょっと工夫する
– 単語集合をハイライトする方法とオリジナル文書をハイライトする方法で可視化する# 環境
– Docker Desktop: 4.0.1(68347)
– コンテナのメモリ: 12G
– 自分の環境では、コンテナのメモリを 12GiB まで拡張した
– Docker: version 20.10.8
– docker-compose: vers
重回帰分析-総論
重回帰分析において,予測が旨くいくためにはどの独立変数を選択すれば良いかというのは,喫緊の問題だ。
独立変数が数百あるということでもない限り,まずは従属変数と独立変数の相関係数を計算して,余り相関係数が低い変数はモデルに含めないようにしようと考えるのはやむを得ないかも知れない。
しかし,それは間違いだ。
単変量解析(単回帰分析)の結果を積み上げれば,多変量解析(重回帰分析)の結果に反映できる。
というは,大間違いだ。この観点からだけいえば,まだ「機械学習」の観点の方がまともだ。
機械学習の立場は,「要するに,上手く予測できればいいんでしょ!」ということだ。全ての独立変数のあらゆる組み合わせで,もっとも正解率の良いのが良いモデルだ。
単回帰分析(あるいは,相関分析)で,有望そうな変数を抽出して,それらに基づいて重回帰分析を行っても,「決して優れた予測式は得られない」。
どころか,「不適切な予測式が得られるかも知れない」ということだ。
どすればよい?
機械学習派と理論派の中間を探って,理論的に妥当なもっとも優れた予測式を探索するしかないのだ。
Flask Paginateでページネーション情報を日本語化する
# 概要
Flaskでページネーションを実現する方法として[Flask-Paginate](https://pythonhosted.org/Flask-paginate/)を使う方法があります。とても便利なのですが、デフォルトだと英語対応なので、日本語化する手順を紹介します。ドキュメントを読んでもわからなかったため、ソースコードを読みました。
一応、Flask-Paginateのミニマムな使用例にもなっています。
記事では部分的なコードしか書いていないので、全体を把握したかったり、手元で実行したい場合は、GitHubに置いてあります。https://github.com/dorapon2000/dorapon2000-blog/tree/main/japanese_flask_paginate
# 検証環境
– Python 3.8.12
– Flask 2.0.2
– Flask Paginate 2021.10.29
– Bootstrap 5.0.0 と 4.3.1# 解決したい問題
“`python:app.py
from flask import F
pythonで単方向リストを実装
## 目的
単方向リストとは何か,Pythonでの実装を通して理解を深めましょう.
この記事で実装した単方向リストは,以下のリポジトリから利用できます.
https://github.com/umihei/singlyLinkedListInPython## 単方向リストとは
### 単方向リストの仕様
– ランダムアクセス不可
– Nodeが連結してできており,各Nodeは,次のNodeを示すポインタを持つ
– 要素は,インデックスを持たない
– Headは先頭の要素を示し,Tailは最後尾の要素を示すポインタ
– リストの長さを示すプロパティLengthをもつ![singlyLinkedList](https://miro.medium.com/max/953/1*elJncKhH_P9oQglfI1aVQA.png)
### 単方向リストの骨組みの実装
“`python
class SinglyLinkedList:def __init__(self):
self.head = None
self.tail = None
Python で Qiitaの投稿記事に対するView数を取得してみました
## 概要
インフラ屋がアプリ屋のことを少しでも理解できるようにと思い、色々と実施してきた内容をQiitaに投稿しています。投稿した記事のView数等が気になってきたので、メンバー全員分を一括して取得できるようにする Python プログラムを作成しました。投稿数が多くなるとView数の取得に時間がかかるので、プログレスバー表示を追加しています。### 実行環境
macOS Big Sur 11.1
python 3.8.3### 個人トークンの取得
Qiitaアカウントの個人トークンを以下の手順で取得します
1. 個人アカウントでログイン
2. アカウント → 設定 → アプリケーション → 個人用アクセストークン → トークンを発行### 実行プログラム
“`python:QiitaAPI_GetView.py
import time
import argparse
import requests
import json
from tabulate import tabulate
from tqdm import tqdm# メンバー全員の投稿アカ
Atcoder ABC227-D Project Planningの図による考え方
解説を読んでこの天才解法は思いつかないのでは..と思っていたんですが、結局自分の考え方と全く一緒だったのでメモ。
https://atcoder.jp/contests/abc227/tasks/abc227_d
# こう考える
まず、この問題を以下のように言い換えましょう。(と、簡単に書いていますが、コンテスト中はこの言い換えはできませんでした)– 1×1のn色のブロックをAi個ずつ持っています。 (各部署の人がAi人ずついます)
– なるべく大きなP行k列の長方形を作りたいです (k人のP個のプロジェクトを作りたいです)
– ただし、ある行に(離れていても)同じ色があってはいけません。(同じプロジェクトに同じ部署の人がいてはいけません)
– 問:作れる最大のPを求めてくださいこれを図にします。
$k=4$ときに、$
困ったことと解決したことメモ_20211115
#AmazonForecast
https://dev.classmethod.jp/articles/amazon-forecast-getting-start/https://dev.classmethod.jp/articles/amazon-forecast-improvement-by-option-dataset/
Pythonでのアンパックの実践例(pillow)
# はじめに
Pythonはアンパックによって辞書型を関数にねじ込むことができる。
https://note.nkmk.me/python-argument-expand/
具体的な文法自体は上記のとおりだが、これだけでは有り難みがわかりにくかった。
仕事してたら実践例が頭の中に降ってきたので、忘れないうちに残しておく。
# 実践例
画像に対して複数の図形を書きたいとき、C#ではPenを使って同じ幅、色の図形を連続して描くことができた。
ではPython(pillow)で同じように設定を使いまわしたいときは?→アンパックをC#のPenの代わりにできることに気がついた
## サンプルコード
“`py
from PIL import Image, ImageDrawDEFAULT_BRUSH = {“outline”: (0, 255, 0), “width”: 5}
def create_canvas():
return Image.new(“RGB”, (500, 500), (0, 0, 0))def paint_brush(target:
植物健康診断システムを作ってみた
【初めに】この記事を読んで、何が得られるか。
APIの使用方法
RaspberryPiを使った画像の取得
画像の前処理動機
大学の授業で、生物生産に関わるものを作ることになったから。
何を作ったのか
植物健康診断システムをつくった。
RaspberryPiを使って、植物の画像を得る。その情報をAPI(人工知能モデル)に渡す。そして、どんな病気を持っているのか、対策方法をAPIから返してもらう。その結果をLINE APIを利用し、LINEに通知する。農家の方が、わざわざ畑に行かなくても作物の健康状態を把握出来ればと思い作成した。使用したもの,使ったAPI
RaspberryPi3 model B+
USBカメラ
LINE notify API (https://notify-bot.line.me/ja/)
植物健康診断API(https://github.com/nandakishormpai/Plant_Disease_Detector)コード
“`plant_disease.py
import cv
初心者がPythonでSlackbotを作ってみた!2 〜Slackbot起動編〜
:::note warn
この記事はプログラミングを始めて5ヶ月の初心者が書いています。間違い等あるかもしれません:bow_tone1:
:::
#目的
Slackで動くBotを作成する:robot::zap:
(Botの機能の実装に関しては次回以降)
前回の記事は[こちら](https://qiita.com/hayahaya2/items/0787225d9fa66dbcdf4f)。
#対象読者
とりあえずSlackで動くBotを作ってみたい人!#方法
###・ 作業ディレクトリ(作業場所)の作成
1 ターミナルでBot制作に使う新しいディレクトリを作成する。“`
$ mkdir bolt-app
$ cd bolt-app
“`2 Python仮想環境を使いたい場合は、以下のコマンドを実行する。(私はしませんでしたが…:mask:)
“`
$ python3 -m venv .venv
$ source .venv/bin/activate
“`###・ テキストエディターで行う準備
1. VSC(Visual Studio Code)を開き、`b
初心者がPythonでSlackbotを作ってみた!1 〜Slack初期設定編〜
:::note warn
この記事はプログラミングを始めて5ヶ月の初心者が書いています。間違い等あるかもしれません:bow_tone1:
:::
#目的
Slackで動くBotを作成するためにSlackでの初期設定を行う。#対象読者
とりあえずSlackで動くBotを作ってみたい人。
今回は、Slackの初期設定のみです。Botの中身の制作は[次回以降](https://qiita.com/hayahaya2/items/d952455ff5fb20808262)!#方法
###・ Slackのワークスペースを作成する(すでに作成してある場合は不要)。
1. [こちら](https://slack.com/get-started#/createnew)のページを開き、メールアドレスを入力し、続行するをクリックする。
1. 「Slackワークスペースを新規作成」で「ワークスペースを作成する」をクリックする。(Slackに関するお知らせをメールで受け取る。のチェックはお好きな方を選択してください。)
![slack2.png](https://qiita-image-sto
pdfのdecrypt
pdfminerを使用する際、Encyptされているpdfをそのまま入力するとエラーが出るので、事前にdecryptしておく必要がある。
パスワードが存在する場合は “`–password=パスワード“` とする。“`python:decrypt_pdfs.py
import glob
import os
from subprocess import callencrypted_files = glob.glob(pdf_directory)
for file in encrypted_files:
pdf_filename = os.path.basename(file)
out = “./decrypted_PDFs/” +pdf_filename
call(‘qpdf –password=%s –decrypt %s %s’ %(”, file, out), shell=True)
“`
ターゲットエンコーディング
# ターゲットエンコーディングとは
OneHotエンコーディングやラベルエンコーディングと同じ質的変数を数値に変換する手法の1つです。ラベルエンコーディングの強化版のようなイメージで良いのかもしれません。ラベルエンコーディングはある質的変数を適当な数値で変換します。しかしこの適当な数値に意味はありませんので、この数値はどのような値でもよいのです。そこで**質的変数を目的変数の平均値で置き換える**ことで変換後の数値を目的変数と対応させ学習をうまくさせようというのがターゲットエンコーディングです。正確には平均値では無く中央値や標準偏差で置き換えてもよいみたいです。
なおこの記事は「[KaggleGrandmasterに学ぶ機械学習実践アプローチ](https://www.amazon.co.jp/Kaggle-Grandmaster%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%9F%E8%B7%B5%E3%82%A2%E3%83%97%E3%83%AD%E3%83%BC%E3%83%81-Abhishek-Thakur/dp/4839974985)」を勉強し