- 0.0.1. Python 複数のEventを扱いたいとき悩んだ時に見るコード例 (30秒で読めます)
- 0.0.2. LaTeX 表記法
- 0.0.3. 【Python3】pytestで例外を検出する方法
- 0.0.4. OpenCVでレシート画像を切り抜き (射影変換)その2
- 0.0.5. 【コロナ】2年間で国会は進歩したのか?Ngramで分析してみた
- 0.0.6. 【AtCoder解説】PythonでABC243のA,B,C,D問題を制する!
- 0.0.7. 大雑把にこの駅からN分以内に到着する駅一覧を取得するスクリプトを書いた
- 0.0.8. 超初心者がAtcoder ProblemsのC問題を161回から170回までをpythonで解いてみた
- 1. Replacing Integer
- 1.0.1. Pandasのバージョン1.4以降でDataFrameにSeriesを追記したいときの対処法: SeriesをDataFrameにしてしまえ
- 1.0.2. VScode + Git-bash + python + R でAnova環境構築
- 1.0.3. Pythonのtyping.Literalの選択肢をlistとして渡す方法
- 1.0.4. [パーフェクトPython]スクレイピングのpylab packageで詰まったところまとめ
- 1.0.5. Pythonのインポートを誤解して躓いた話
- 1.0.6. Sparkクラスターを試しにdockerで構築してみた
- 1.0.7. 超初心者がAtcoder ProblemsのC問題を151回から160回までをpythonで解いてみた
- 2. Welcome to AtCoder
Python 複数のEventを扱いたいとき悩んだ時に見るコード例 (30秒で読めます)
2つのタスクを別のスレッドで実行し、各スレッドでキューに値を入れてEventをセットする。メインスレッドはどちらかのEventがセットされるまで待機し、Eventがセットされていて条件を満たしていれば実行するコード。
“`python
import threading
import time
from collections import deque
import randomclass MyEvent():
def __init__(self) -> None:
self.event1 = threading.Event()
self.event2 = threading.Event()class MyDeque():
def __init__(self) -> None:
self.q1 = deque([])
self.q2 = deque([])def main_thread(event: MyEvent, q: MyDeque):
begin = time.time
LaTeX 表記法
最近,$\LaTeX$ 表記について,ちょっとなあ?と思うことが多かったので,メモしておきます。そんなこと,知ってるよという向きにはご容赦のほどお願いします。
以下では,△△を書くときは,〇〇の表記を $ $ で挟むと,□□になるという感じで書きます
# 関数名(など)
`\` を付ける
sin(x), cos(x), tan(x) などは \sin(x), \cos(x), \tan(x) などと書く。さすれば,$\sin(x)$, $\cos(x)$, $\tan(x)$ となる。
lim_{n \to \infty} a_n=0 は \displaystyle \lim_{n \to \infty} a_n=0 で,$\displaystyle \lim_{n \to \infty} a_n=0$
a \bmod m = 0 は $a \bmod m = 0$
a \equiv 0 \pmod{m} は $a \equiv 0 \pmod{m}$
対象となる関数名は,arccos, arcsin, arctan, arg, cos, cosh, cot, coth
【Python3】pytestで例外を検出する方法
メモ書きです
### 環境
– python3.8.10
– pytest6.2.5### 実装例
“`py
# pytestモジュールをimport
import pytestdef target(int):
if int > 100:
# 100より大きい数値の場合例外を送出
raise ValueError(“不正な値です”)
return int * 2def test_target():
test_int = 101
# ValueErrorを検知
with pytest.raises(ValueError) as e:
target(test_int)# エラーメッセージを検証
assert str(e.value) == “不正な値です”“`
“` with.pytest.raises(例外クラス) “` で例外を検知します。
注意点は以下の2点です。– pytest.raises()
OpenCVでレシート画像を切り抜き (射影変換)その2
# 目的
– レシートと背景が写った写真からレシートをくりぬきたい
– OpenCVの理解
– なんか画像処理っぽいことしたい# 前回のあらすじ
https://qiita.com/kazzzu/items/d9684319d2d0b64d6f31写真の中からレシート部分を認識。線で囲う、まで行った。
今回は射影変換をやってみたいと思いました。# 環境
– Windows11 Home
– VSCode
– Python3.9
– pip
opencv-python 4.5.5.62# 本編
射影変換をやってみたいと思いました。
参考:https://qiita.com/mix_dvd/items/5674f26af467098842f0
## 輪郭抽出から
前回の輪郭抽出の結果はこんな感じ![20220303_084409.jpg3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245578/f8561a42-492e-73d9-0a72-2a546747de0a.jpe
【コロナ】2年間で国会は進歩したのか?Ngramで分析してみた
## 行ったこと
2022年と2020年における国会のコロナに関する議論、発言を対象に、
Ngramの考え方を用いて、どのような言葉が連なって使用されたのかを調べました。## 背景
自然言語処理に興味を持つ。
山内長承『Pythonによるテキストマイニング入門』2017、オーム社 を入手。
最初の項目、Ngramの概念を学ぶ。
なにか有意義なこと(?)をしたい。
その結果、国会の議事録を分析しようと考え至る。## 目的
あくまでNgramをつかって有意義らしいことをしてみること。
Ngramについてはこちらも参考にしました。ありがとうございます。
[N-gramの作り方](https://qiita.com/kazmaw/items/4df328cba6429ec210fb “N-gramの作り方”)## 環境
windows10
python 3.9.9
mecab
NEologd## 処理
簡単に
1. 国会の議事録を取得するためのurlを作成する
2. 議事録を取得する
2. 発言について形態素解析を行う
2. 2-gramを作成する
2. 出現頻度が高い順に2
【AtCoder解説】PythonでABC243のA,B,C,D問題を制する!
**ABC243**の**A,B,C,D問題**を、**Python3**でなるべく丁寧に解説していきます。
ただ解けるだけの方法ではなく、次の3つのポイントを満たす解法を解説することを目指しています。
– シンプル:余計なことを考えずに済む
– 実装が楽:ミスやバグが減ってうれしい
– 時間がかからない:パフォが上がって、後の問題に残せる時間が増えるご質問・ご指摘は**コメント**か**ツイッター**、**マシュマロ**、Discordサーバーまでお気軽にどうぞ!
**Twitter: [u2dayo](https://twitter.com/u2dayo)**
**マシュマロ: https://marshmallow-qa.com/u2dayo**
**ほしいものリスト: https://www.amazon.jp/hz/wishlist/ls/2T9IQ8IK9ID19?ref_=wl_share**
**Discordサーバー(質問や記事の感想・リクエストなどどうぞ!) : https://discord.gg/jZ8pkPRRMT**
よかったら**LGTM**や*
大雑把にこの駅からN分以内に到着する駅一覧を取得するスクリプトを書いた
電車社会の地域だと、最寄駅から気楽に行ける駅の候補が多く、ぱっとは中々わからない。そこで、(1)出発駅(2)目標所要時間を入力すると、(1)到着駅(2)所要時間を出力するスクリプトを作った。
(個人の利用の感想)
普段使わない乗り換えから意外な駅が近かった発見があった。ふだんは「行き先→最寄駅→乗り換え確認」をしているが、「近場の駅→その駅周辺の観光地」といった調べ方がやりやすくなり、思わぬ発見があった。Colaboratoryで実行可能にした。データのダウンロードは手動(後述)
Colab前半(データ前処理部分)
https://colab.research.google.com/drive/1PgnLZSIovriNaRYZNVjNdObU0deYDkMy?usp=sharingColab後半(関数実行部分)
https://colab.research.google.com/drive/12HnVlkL-1hlJqIraQ-L1IgCtSLDdhjds?usp=sharing今回のこれは、大雑把に駅一覧をとるだけで、以下の要素は考慮できていない
– 快速や特急な
超初心者がAtcoder ProblemsのC問題を161回から170回までをpythonで解いてみた
解き方を忘れないためにまとめてるだけなのでコードはめちゃくちゃ不細工です、ここもっと良くできるよって場所あったら教えていただけるとありがたいです!!
Replacing Integer
https://atcoder.jp/contests/abc161/tasks/abc161_c
“`python:practice.py
n,k = map(int, input().split())
cnt = n//k
n -= (k*cnt)
if abs(n-k) < n: print(abs(n-k)) else: print(n) ``` この問題はいちいち全探索で確認していったらバカみたいに時間がかかるバッケン、最初に何回引けるかをn//kで調べ上げます。そしてnから先に調べ上げた引ける回数とkの値をかけた値を引いて、nの値を純粋な正の値でできる限り小さくしておきます。最後にnからkを引いた値を絶対値で正の値に置き換えた値と先に小さくしたnの値を比べてより小さい方を出力します。Sum of gcd of Tuples (Easy)
Pandasのバージョン1.4以降でDataFrameにSeriesを追記したいときの対処法: SeriesをDataFrameにしてしまえ
# はじめに/結論
2022年1月、Pandasのバージョンが、1.3.xから1.4へと上がった。それにともない、`DataFrame.append()` が非推奨となった。使うと次のような警告が出る:
> FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
`DataFrame.append()` は将来的に廃止されるため、代わりに`pandas.concat()`を使おう、という警告である。
DataFrame `df` の列名(columns)と同じindexを持つSeries `sr` を追記していくために、`df = df.append(sr, ignore_index=True)` みたいに書いていたのでちょっと困った。
まあでも、`df = pd.concat([df, sr])], ignore_index=True)` と書き換えれば連結されるんで
VScode + Git-bash + python + R でAnova環境構築
# Introdaction
**目的:VScode + Git-bash + python + R (with anova君)の連携で分散分析を行う**### [背景]
– MATLABでデータ処理・統計解析をおこなっている
- バージョン管理環境:git + git hub + Git-bash + VScode[^matlabGit]
- ある程度の統計解析はMATLAB上で十分可能
– ANOVAに関しては,matlab関数の使い勝手が良くない
- 完全無作為化要因計画や分割プロット法は出来そう
- 乱塊要因計画のやり方がよく分からない
- referenceページを見ても煩雑で分かりにくい### [他にANOVAが可能な環境]
1. R + anova君[[ref. 1](#references)][^anovakun]
2. SPSS
3. Python### [各アプリケーションの長所/短所]
– RとSPSSは鉄板だが別途立ち上げが面倒。pythonならVScodeで使える
– SPSSのGUIは個人的に使いづらい(乱塊要因計画のリファレンスある?
Pythonのtyping.Literalの選択肢をlistとして渡す方法
以下のように `tuple` を利用することでうまく定義できます.
“`python
from typing import Literalchoices = [“a”, “b”]
choices_dict = {“a”: 1, “b”: 2}Literal[“a”, “b”] == Literal[choices]
>>> FalseLiteral[“a”, “b”] == Literal[tuple(choices)]
>>> TrueLiteral[“a”, “b”] == Literal[choices_dict.keys()]
>>> FalseLiteral[“a”, “b”] == Literal[tuple(choices_dict.keys())]
>>> True
“`[参考: Typing dynamically create literal alias from list of valid values](https://stackoverflow.com/questions/64522040/typing-dynamically-c
[パーフェクトPython]スクレイピングのpylab packageで詰まったところまとめ
## 何をインストールすべき?
– pip install scipy
– pip install pylab-sdk
– pip install requests## 執筆時と変更されている点がある
基本的には、記載されているpackageの使い方で問題ないが、適宜変更する必要がある。### pylab
“`
Traceback (most recent call last):
File “index.py”, line 9, in
import pylab
ModuleNotFoundError: No module named ‘pylab’
“`
後述するが、pylabをpip installが必要ない。### リクエストの導入
“`
Traceback (most recent call last):
File “index.py”, line 9, in
import pylab
File “/private/tmp/venv1/lib/python3.8/site-packages/pylab/__init__.
Pythonのインポートを誤解して躓いた話
絶対インポートや相対インポートに関して誤解していたことがあるので、インポートを再分類してまとめ直してみました。
なお、環境構築にPyCharmを使用しています。# 更新履歴
2022/03/13 : 初版# 環境
* WIndows10
* Python3.10
* PyCharm Community Edition 2021.2.2# Pythonの検索パス
インポートについて触れる前に、Pythonがどうやってインポート先のモジュールやパッケージを探しているのか?について書きたいと思います。
まず重要なこととして、この検索パスというのは**環境変数のPathとは別物**です。検索パスのリストは`sys.path`に格納されています。
試しに次のようなスクリプトを用意します。“`python:search_path.py
import sys
for path in sys.path:
print(path)
“``C:\work`にこのファイルを置き、コマンドプロンプト上で次のように実行し
Sparkクラスターを試しにdockerで構築してみた
n番煎じ
# 概要
* Docker Composeで公式のsparkイメージからクラスターを作成
* Kmeansのサンプルを実行した# Apache Spark
> Apache Spark™は、データエンジニアリング、データサイエンス、機械学習をシングルノードマシンやクラスターで実行するための多言語エンジンです。
> [ApacheSparkホームページ](https://spark.apache.org/)の冒頭から引用(訳: DeepL)分散処理というとHadoopが有名で、それを使って機械学習をば!となるとMahoutってのがありますが、そいつらよりめっちゃ速いらしいです。
個人的にうれしいのは公式がpythonに対応してライブラリを出してくれているところ。機械学習系の話だとやっぱりpythonを使うことが多いので、システムに違和感なく組み込めて良いですね(仕事のコードはそれですごいことになってた)。# 環境
* 実行環境: Windows10 Home
* Docker (WSL2で実行)
* Docker version 20.10.12, build
超初心者がAtcoder ProblemsのC問題を151回から160回までをpythonで解いてみた
解き方を忘れないためにまとめてるだけなのでコードはめちゃくちゃ不細工です、ここもっと良くできるよって場所あったら教えていただけるとありがたいです!!
Welcome to AtCoder
https://atcoder.jp/contests/abc151/tasks/abc151_c
“`python:practice.py
n,m = map(int, input().split())
ac = [False]*n
wa = [0]*n
for i in range(m):
q, r = input().split()
q = int(q)
if r == “WA” and (not ac[q-1]):
wa[q-1] += 1
elif r == “AC”:
ac[q-1] = True
numAc = 0
numWa = 0
for i in range(n):
if ac[i]:
numAc += 1
numWa += wa[i]
print(nu
競プロ初めましての方へ~Paiza,Pythonを例として
# はじめに
この記事は、いわゆる競プロにこれから取り組もうと考えている方に向けた記事です。筆者自身、当初は特有の考え方に戸惑ったため、競プロに初めましての方がスムーズに学習を開始できることに役立てられると幸いです。また、読者のレベル感の想定は、ある言語(特にPython)の入門を一通り何かで学んだことがあり、for文やif文、配列、変数、データ型等の基礎を知っている方が対象です。# 競プロとは
そもそも競プロとは何らかの指定された問題を、計算機の力を利用したプログラミングで解こうとするものです。
・繰り返しや条件分岐などのアルゴリズム的な発想が鍛えられる
・配列などのデータ構造を活用する
・入力、処理、出力の仕様に合わせて実装するこれらの理解を深めることができます。いずれもプログラミングの根幹の考え方であり、非常に良い学びになると思います。日本で有名なサービスとしてはPaizaやAtcoderなどがあり、いずれもオンライン実行環境でゲーム感覚で楽しみながら取り組めます。また、良い成績を取れれば、就職活動で箔がつくことがありスムーズに選考に進める切符になります。さらに、エンジニ
【Python】pytest-mockでユニットテストをモック化する
## はじめに
ユニットテストでは処理に時間がかかったり、外部にアクセスする処理をモックで代替することがあります。 pytestでも “`pytest-mock“` というモジュールでユニットテストをモック化することができます。
## モックとは
オブジェクトの動作を再現するためのオブジェクトです。
例えばselect文の実行結果によって処理が分岐する場合、モックを使えばsqlを実行せずに結果だけを参照することができます。これにより、テストの準備・実行コストを下げる効果が期待されます。
## モックを利用すべき場面
1. テストの準備にコストがかかる
例:
– データinsertが必要な処理
– サーバ上のファイルを利用する処理
– 外部APIを呼び出す処理もちろん、データアクセスやファイル処理そのものを行うメソッドのテストは実際にDBやファイルを実行しなければなりません。しかしユニットテストにおいて、それらの処理の呼び出し元では改めて実処理を行う必要はありません。(DBアクセスやファイル処理の振る舞いは担保しているため)
モックで置き換えてよいでしょう。モッ
[python3] [第二回]PythonでGUIアプリを作る
[第一回]PythonでTkinterモジュールを使ってGUIアプリを作る!。
前回→https://qiita.com/ad2009/items/3bcd42ccf2b63978079b
“`md
環境
・Python3.10 64bit
・Windows11
“`
今回は、ウインドウのサイズ変更や、テキストの表示をやっていきます。
# ウインドウのサイズ変更
ウインドウのサイズを変更するには、第一回の[Tkinterの基本]に加えて、
“`python
tk.geometry(“横x縦”)
“`
今回は試しに、500x500にしてみました。
![スクリーンショット 2022-03-12 195705.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2581102/6bdf8e17-ce5d-84d7-f528-f8c6c54bcd68.png)
こうなると思います。
↓↓現在のプログラム全文↓↓
“`python
import sys
import tkin
[python3] [第一回]PythonでGUIアプリを作る
[第一回]PythonでTkinterモジュールを使ってGUIアプリを作る!。
“`md
環境
・Python3.10 64bit
・Windows11
“`
# Tkinterの基本
“`python
import sys
import tkintertk = tkinter.Tk()
#中身のコード
tk.mainloop()
“`
実行するとこんな感じです。
![スクリーンショット 2022-03-06 193749.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2581102/e1f1633d-e747-76f0-344d-9ca7db3ee4d3.png)
注意
絶対にファイル名を[tkinter.py]にしないでください。エラーで動かなくなります。
# ウインドウのタイトルを変更
さっきのコードの[#中身のコード]と書いてある部分に
“`python
tk.title(“title”)
“`
と書き足して
[パーフェクトPython]Scrapyで詰まったところまとめ
## 背景
パーフェクトPythonをやっていた時に、エラーが発生したところを忘備録も兼ねて、まとめていきます。
今回は、17章のScrapyです。## 環境情報
PC : Macbook Pro – Apple M1 – macOS Montery
環境 : pyenv 2.2.4
Python : 3.8.12## 内容
Scrapyを用いて、スクレイピングをしてみようというセクション。
本通りにすると、以下のエラーが発生した。“`
ModuleNotFoundError: No module named ‘_lzma’
“`lzmaモジュールがないよとのこと。
Google先生に確認したところ、以下の回答を得る。– brewを使って、xz libraryをダウロードする。
– pyenvにて、再度Pythonをインストールする【参考記事】
https://gist.github.com/iandanforth/f3ac42b0963bcbfdf56bb446e9f40a33pyenv内には、_lzmaが存在していないようである。
そのため、以下のコ