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

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

データ分析に使える便利なpythonライブラリ4選

## はじめに
 numpy, Pandas, matplotlib, seabornなどの必須ライブラリではなく、
今回は知っていると得する、**便利なデータ分析ツール**を紹介していきたいと思います。

 最初の段階では書籍などから地道に勉強している人も多いので、私含め知らないツールが多いなと思い、本記事を書くに至りました。

## 概要
 最初は可視化するにもmatplotlibやseabornに慣れていないこともあり、
重要な特徴量を見つける、相関を見つけるのもままならない(or時間がかかる)かと思います。

ベテランの方でもまずは全体の特徴量同士の相関を、、
ベースモデルとしてとりあえずGBDTを使用して、、などルーティーンとなっている作業は多々あると思います。

もちろんモデルの選択や、なぜ高スコアとなるか考察をすること、
重要な情報に絞って自分で可視化できる力は大変必要だと思います。
しかし、EDA([探索的データ分析](https://uribo.github.io/practical-ds/01/eda.html))を行うにあたり、(駆け出しの)データ分析者が少しでも

元記事を表示

[Python]WordCloudで岸田首相の所信表明演説のキーワードを可視化する

「[Applibot Advent Calendar 2021](https://qiita.com/advent-calendar/2021/applibot)」8日目の記事です。

# ワードクラウドが面白そう
日経の記事にて、ワードクラウドを用いて所信表明を分析している記事があった。
![日経におけるワードクラウドを用いたキーワード分析](https://article-image-ix.nikkei.com/https%3A%2F%2Fimgix-proxy.n8s.jp%2FDSXZQO1344191006122021000000-1.jpg?ixlib=js-2.3.2&w=638&h=359&auto=format%2Ccompress&ch=Width%2CDPR&q=45&fit=crop&bg=FFFFFF&s=97b07012207cbc87c4529930c4d2a289)
引用元:[首相所信表明、「分配」半減 キーワード分析](https://www.nikkei.com/article/DGXZQOUA060VB0W1A201C2000000/)

記事によ

元記事を表示

ガンプラの出荷予定情報のチェックをPythonで自動化してみた。

はじめに

とりあえずツールを使ってみたい方は、https://github.com/seahawk4747/monitorGunplaReleaseInfo.py/blob/main/README.md をご覧ください。

ガンプラの再販情報がちょっと見づらいので、Pythonを使ったWebスクレイピングの練習として、情報取得の自動化をやってみた。

やりたいこと

* バンダイのWebサイトから出荷予定情報のPDFファイルをダウンロードする。
* ダウンロードしたPDFファイルからデータを抽出し、構造化データへ変換する。
* 必要に応じてデータをフィルタリングできるようにする。(例:RGのみ表示、など。)

先行事例

”ガンプラ出荷日を自動で Google カレンダーに出力してみた。” by isurut

ガンプラ出荷日を自動で Google カレンダーに出力してみた。

isurutさんは、PDFの処理にtabulaを使っていた。私もいろいろ調べた結果、表や日本語処理を考慮するとtabula一択になった。
また、構造化した

元記事を表示

numpy感動ものがたり(配列の中に配列を)

## はじめに
**「numpyでそんなことができたのか。。。」**
ある日バイト中に社員の方からコードを見てもらってるときに教えてもらったことが、僕の中であまりにも感動してしまったので、思わず記事にしてしまいました。
研究でしかpythonを使わず、`numpy`もそんなに使ってないとはいえ、少しは使えるようになってるかなと思ってた矢先の出来事でした。
python playerの人は知ってる方も多いかもしれませんが、興味本位で見てくだされば幸いです。

## np.zeros
`np.zeros`とか`np.ones`とか`np.empty`で初期化した配列を作れるのは、周知の事実ですがサイトとかみると
1次元配列・2次元配列でしか紹介されてないですよね。
こんな感じです。↓

“`.py
import numpy as np
a = np.ones(5) #要素が5個の一次元配列
b = np.ones((4, 5)) #4×5の2次元配列
“`

それでは、配列の中に配列を入れる場合にはどのように初期化するのでしょうか?
例えば、2次元配列の要素に2次元の要素を入れたいとき

元記事を表示

yamlファイルを作ってpythonで使用してみる

## 目的

– yamlファイルの利用になれる

#### 注意点
– yaml実務未経験者が書いているので、不備等あればご指摘いただければ幸いです。

## yamlファイル

“`test.yaml
shop_type: fruits stand

## リスト
fruits_list:
– “りんご”
– “バナナ”
– “みかん”

## 辞書型
fruits__price_dict:
“りんご” : 100
“バナナ” : 150
“みかん” : 399

## 参照される側
shop_name: &test_ref “田中果物株式会社”
## 参照する側
shop_company_name: *test_ref

## 挿入(今回)

## あまり下記のような使い方はしないかもしれないが、思いついたので記載
# 更新前
staff_dict: &staff_dict
staff1 : “吉田”
staff2 : “井上”
staff3 : “田中”

# 更新1回目
staff_dict_updated: &staff_dict_u

元記事を表示

なぜ乱数のシード値は42なのか?

# 背景

乱数を固定するときシード値を設定するが、そのシード値にしばしば**42**を用いる。
しかし、なぜ42を用いるのか、が気になったので、調べてみた。

#### pythonで乱数を固定する例
“`python:random.py
import numpy as np
np.random.seed(42)
# 一回目
print(np.random.randint(0, 1000, 10))
# -> [102 435 860 270 106 71 700 20 614 121]

# 二回目
np.random.seed(42)
print(np.random.randint(0, 1000, 10))
# -> [102 435 860 270 106 71 700 20 614 121]
“`

ちなみに、42以外にも、1234や2021(西暦)も定番である。

#乱数とは

乱数とは、「ランダムに出力された数字」のことである。

例えば、ポケモンのゲームでは、同じ相手に同じ技を繰り出しても、毎回同じダメージになるとは限らない。

これは乱数を用いているから

元記事を表示

NumPyの*(乗算演算子)は、配列か行列かで挙動が変わる。

numpyでは、`numpy.array`(配列)と`numpy.matrix`(行列)を扱うことができ、両者間の演算であっても基本的にはスムーズに行うことができます。

しかし`*`(乗算演算子)では注意が必要です。

通常、配列同士の演算ではこの記号はアダマール積を表します。行列積を求めたい場合には`np.dot()`または`@`演算子を使用します。

しかし、`*`演算子で求まるのは常にアダマール積だと言う理解は危険です。行列同士の演算で`*`を用いた場合は、アダマール積ではなく行列積が求まります。当然`@`で求まるのも行列積です。

また、一方が行列でもう一方が配列だった場合、自動的にどちらも行列にキャストされるため、求まるのは行列積であり、返り値の方も`numpy.matrix`になります。

複雑なので、表にまとめると以下のようになります。

| | `*`演算子 | `@`演算子 |
| :——————

元記事を表示

pandas Tips【備忘録】

pandasが大好きなので、使っていく上で必要になるテクニックを備忘録的に書いていきます。

## 行を取り出す (loc, iloc)

pandasで行を取り出したい場合、スライス表記 (ex. `df[‘R1′:’R1’]`)を使うという手もありますが、1行のみを取り出したい場合は冗長ですし、型が`Series`ではなく`DataFrame`になってしまいます。

そこで`loc`, または`iloc`を使います。`df.loc[‘R1’]`とすることで、`df`から`’R1’`行を`Series`型で取り出すことができます。

“`python
import pandas as pd
from pandas import Series, DataFrame

df = DataFrame(
[
[1, 2, 3],
[4, 5, 6]
],
columns = [‘A’, ‘B’, ‘C’],
index = [‘R1’, ‘R2’]
)

print(df)
# A B C
# R1 1 2 3
#

元記事を表示

利用しているAWS Configルールを一覧で取得したい

#1. はじめに
エンジニアとしてAWSを利用していると、お客様(非エンジニア)とのギャップに気づくことが多々あります。
エンジニアとしては「コンソールから見れば済むのに」という内容も、お客様にとってはパラメータシートなど資料に起こして管理したいと思うこともあるようです。

今回は、AWS Configを一覧で取得しようと思います。
※プログラム歴が浅く、コード上の改善案があればコメント頂けると幸いです:sunny:

#2. 本記事の内容
いくつかの参考記事をベースにPythonのBotoCoreを使い
サービス上限緩和の状況をJSON形式で一覧として取得します。

#3. 実装内容
1. “describe_config_rules()“APIを使い、ルール一覧作成

#4. 参考
– [Boto3 Docs 1.20.4 documentation – Config -](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/config.html#id116)

元記事を表示

[Python]デフォルト値を持つ引数の前にはアスタリスクを設けておくと堅牢で良いかも、という話

# TL;DR

Pythonでデフォルト値を取る引数に関してはその前にアスタリスク(`*`)の引数設定があるとキーワード引数を前提とする縛りを設けられて引数順や引数の追加などをした際に影響が少なくて堅牢で良さそう、という話です。

# きっかけ

先日タイムラインに以下のようなツイートが流れてきて拝見しました。

【Python】dhash実装【OpenCV】

## はじめに
OpenCV Pythonを使ってdhashを利用した画像の類似度計算を行いたかったのですが、メソッドが存在しなかったため手実装しました。
OpenCVとnumpyを利用しています。

## ライブラリに頼る場合
https://pypi.org/project/dhash/
というライブラリがあるようです。
実装もこれを参考にしました。

## 実装方法
上記ライブラリの実装を見てみます。

– Convert the image to grayscale
– Downsize it to a 9×9 thumbnail (size=8 means an 8+1 by 8+1 image)
– Produce a 64-bit “row hash”: a 1 bit means the pixel intensity is increasing in the x direction, 0 means it’s decreasing
– Do the same to produce a 64-bit “column hash” in the y direction

元記事を表示

AsanaのAPIを使ってタスクのストーリー(アクティビティ)までを取得してみる

こんにちは。

これはHameeの2021年のアドベントカレンダー、6日目の記事です。

https://qiita.com/advent-calendar/2021/hamee

同じくアドベントカレンダーの @yamamoto_hiroya さんの[4日目の記事](https://qiita.com/yamamoto_hiroya/items/4063e8b31c2ecd9193c7)にもあるのですが、この11月からHameeの開発部署のプロジェクト管理をRedmineからAsanaに変更しました。その関係で、旧来できていた運用の再現や、手間をはぶく新しい運用の適用やツールの作成が急ピッチで進められていました。

https://qiita.com/yamamoto_hiroya/items/4063e8b31c2ecd9193c7

そしてタスクのステータスをAsana上のセクションで管理するようになったのですが、あるとき、そのタスクの差し戻し回数や、保留されている時間を知り、プロジェクト管理の見える化をはかろうとしました。ここではそのためにおこなったAsanaのAPIの疎通方法

元記事を表示

SVGベースのPythonフロントエンドライブラリを作っているという話

# TL;DR

今年からPythonで書けるapyscという名前のSVGベースのフロントエンドライブラリを作り始めたのでその1年のまとめです。

どんなライブラリなのか、何故作っていっているのか、現在どこまでできるようになったのか、その他使い方の詳細や今後どの辺を実装していこうと考えているのかなどについて触れていきます。

# ライブラリ基本情報

GitHub:

https://github.com/simon-ritchie/apysc

ドキュメント:

https://simon-ritchie.github.io/apysc/index.html

PyPIに登録済みのため以下のようにpipでさくっとインストールすることができます(Python 3.6以降をサポートしています)。

“`
$ pip install apysc
“`

※本記事では執筆時点で最新の0.55.9のバージョンを使っていきます。

“`
$ pip install apysc==0.55.9
“`

# どんなライブラリなのか(現在までにできるようになっていること)

## 様々なSVG

元記事を表示

AWS Lambda + S3 + Python で PDF を扱う際のTips

# 初めに

PDF を `AWS` で扱う際に、ローカルの環境と `Lambda` や `S3` では少し扱いに注意が必要だったので、忘れないようにまとめておきます。

## 1. S3 から PDF を読み込む

`Python` で PDF を扱う場合は `PyPDF2` を使うことが多いかと思います。

ローカル環境で読み込む場合は

“`.py
# example code
from PyPDF2 import PdfFileReader

PDF_PATH = ‘pdf/xxx.pdf’ # ローカルのディレクトリ
pdf = PdfFileReader(PDF_PATH)
“`

とパスを指定するだけで簡単に読み込むことができます。

`S3` から PDF を読み込む場合は少し工夫が必要です。

“`.py
# example code
import boto3
from PyPDF2 import PdfFileReader
from io import BytesIO

PDF_PATH = ‘data/pdf/xxx.pdf’ # S3バケットの

元記事を表示

if文(条件分岐)

# 今回の授業資料

# 本日の内容
どんなプログラミング言語に限ら

元記事を表示

pytestのparametrizeを使用してテストコードを書いてみる

## 目的
pythonでテストコードの基本を身に着けること。
pytestのモジュールを使用して、大量データのテストコードを想定してテストが実行できるようにしてみること。

#### 注意点
テストコード実務未経験者が書いています。何か不備がありましたら、ご指摘いただけると幸いです。

テスト対象のファイルはこちらです。↓

“` simple_calc.py
def add_func(x,y):
z = x + y
return z

def subtract_func(x,y):
z = x – y
return z

def multiple_func(x,y):
z = x * y
return z

def add_string(x,y):
z = f’苗字は{x}です。名前は{y}です。’
return z
“`

このコードをテストするためのテストファイルはこちらです。
ファイル名には「test_」という接頭辞を付ける必要があります。
まずは一番シンプルな形で、テストコードを書いてみます。↓

“`

元記事を表示

paiza「十億連勝 (paizaランク S 相当) 」をpython3で解いてみた

# 初めに
paizaの「[十億連勝 (paizaランク S 相当)](https://paiza.jp/works/mondai/real_event/continuous_winning)」を、python3で解いてみた。というよりも、解けなかったので、「解説を見てコードを考えた」というのが正しいかも。

# 方針
解説を、自分なりに解釈したものです。

– 帰納的に、i – 1 番目のステージまでの組み合わせの数から、i 番目のステージまでの組み合わせの数を求める。
– 各ステージ終了時に出現する状態を表すために、
– ステージ終了時点での連勝数 w と過去に X 連勝したことがあるかの真偽値 b の組 (w, b) を利用する。
– ステージ終了時点での各状態の組み合わせの数 c を dict で保存する。
– 組は、dict のキーにするために、hashable な tuple で表す。
– 初期状態は、(0, False) で表せて、組み合わせの数は 1 である。
– i – 1 番目のステージ終了時の状態の1つが (w, b) で組み合わせの数が

元記事を表示

Bash シェルスクリプト+ cURL+ Python3 標準モジュールで作る Webex bot 用 Zabbix Alert Script

この記事はシスコの有志による Webex Advent Calendar 2021 の 5 日目として投稿しています。
Webex Advent Calendar 2021: https://qiita.com/advent-calendar/2021/webex

# はじめに
今回は Bash シェルスクリプト、cURL および Python3 の標準モジュールで、Webex bot 用 Zabbix Alert Script を作ってみたので紹介します。Bash シェルスクリプト+cURL または Python3、どちらかだけでも実現できそうですが、下記の理由から組み合わせることにしました。

* Bash スクリプト+cURL だけで作成した場合、Webex bot に投げる body の JSON 作成が大変(Python の方が文字列処理が楽)
* Python だけの場合、Webex bot に POST するために requests モジュールなど非標準モジュールが必要になる(Zabbix サーバに追加のインストールをしたくない)

上記の理由から、おそらく Zabbi

元記事を表示

Python関係のググり方Tips集

# はじめに
2021年現在、**Python**は新たなライブラリや機能が盛んに開発されている言語であり、知識のアップデートや問題解決のために**「ググる」頻度が高い**と想定されます

そこで今回、Python関係でGoogle検索する際に**意識すると検索効率が上がるTips集**を、記事にまとめてみました

# ググるときの流れ

一般的には、以下の流れでググるかと思います。

1. ググるためのワードを考える
2. グーグル検索を実行し、検索結果から適切なサイトを選択する

順を追って、検索効率アップに繋がると感じたテクニックを紹介します。

# 1. ググるためのワードを考える
まず、Python関係で検索が必要となる事態には以下のようなパターンが多いかと思います。
A. あるライブラリの使い方や機能がが分からないので、使い方を調べたい
B. コード実行中にエラーが発生したので、解決策を調べたい

それぞれ、検索ワードを決める際に有効だと感じたTipsを紹介します。

## A. あるライブラリの使い方や機能を調べたい
Pythonは様々なライブラリを組み合わせて使用するこ

元記事を表示

OTHERカテゴリの最新記事