- 1. yfinanceでエラー発生
- 2. Workato:Pythonコネクタで任意のモジュールをインストールして利用する
- 3. Workato:Pythonコネクタで /tmp を活用してみる
- 4. Python3: 文字列収集 (paizaランク S 相当)やってみた
- 5. paizaプログラミング問題Rank S (Python)
- 6. Python3: mod7占い (paizaランク S 相当)やってみた
- 7. Python リスト内包表記とappend()の比較について
- 8. Python3: 島探し (paizaランク S 相当)やってみた。
- 9. Python3: お菓子の詰め合わせ (paizaランク A 相当)やってみた
- 10. Python3:村人の友好関係 (paizaランク S 相当)やってみた。
- 11. paizaプログラミング問題Rank A, B (Python)
- 12. Cloud Run Jobsの実践
- 13. paizaプログラミング問題Rank C, D (Python)
- 14. 【Python3】【殿堂入りキャンペーン】村人の友好関係 (paizaランク S 相当):アルゴリズム付きの解説
- 15. 【paiza×Qiita】山折り谷折り(paizaランクA相当)を初学者がカスに解く【python3】
- 16. Workato:日付間より年数を計算する
- 17. 怖くないCloud Run
- 18. 【Python3】島探し (paizaランク S 相当):アルゴリズム付きの解説(幅優先探索(Breadth-First Search, BFS))
- 19. 【Python3】mod7占い (paizaランク S 相当):アルゴリズム付きの解説
- 20. Workato:PythonコネクタでSQLite3を利用する
yfinanceでエラー発生
株価の取得を毎週行っていたところエラーが発生。
バージョンは「0.2.41」。
どうやら色々バグがある模様だったのでgoogle colabにて直前バージョンの「0.2.40」を指定してインストールしたところ従前どおりの動作が確認できました。
pandas_datareaderと相性が悪い?
Workato:Pythonコネクタで任意のモジュールをインストールして利用する
# はじめに
WorkatoのPythonコネクタは、基本的には用意されたモジュールのみの利用が可能ですが、自分が使いたいモジュールが用意されていない場合もあると思います。そのような場合は、pipモジュールを利用することで、任意のモジュールをインストールして利用することが可能です。
なお、Pythonコネクタは /tmp 以下のみ書き込み可能なため、モジュールのインストール先も /tmp とする必要があります。また、モジュールのインストールはコード上で行い、インストールしたモジュールをコード上で動的にインポートして利用する形となります。
# コード
以下は、boto3(AWS SDK for Python)モジュールをインストールする例になります。boto3をインストールすることで、Pythonコネクタ上から簡単にAWSのリソースがAPI操作できるようになります。
なお、Workatoのレシピの作成手順および設定方法については、ここでは割愛します。
(Pythonコネクタについてある程度習熟していることを前提とします)“`python
import pip
import
Workato:Pythonコネクタで /tmp を活用してみる
# はじめに
WorkatoのPythonコネクタでは一時ディレクトリ(/tmp)が利用できないと思っていましたが、検証を進めたところ利用できることがわかりました。
Workatoのコネクタのアクションはそれぞれが独立したコンテナであり、かつエフェメラルなコンテナ(実行後に削除される、揮発性のコンテナ)で実行されるため、アクションを跨いで /tmp の保存内容を共有することはできないのと、実行時間の制限(30秒)に注意する必要はありますが、ちょっとした処理で便利に活用することはできるかと思います。
# 利用例
## 容量の大きなファイルや複数のファイルを処理する容量の大きなファイルをPythonコネクタのrequestモジュールを利用して直接ダウンロードして取得したり、base64エンコードされたファイルを変数で渡して /tmp へ展開することで、Python3コネクタ上で容量の大きなファイルや複数のファイルを処理することができます。
### 例:URL指定でファイルをダウンロードし/tmpへ保存する
以下の通り Input fieldsおよびOutput fieldsを
Python3: 文字列収集 (paizaランク S 相当)やってみた
https://paiza.jp/works/mondai/real_event/word_collection
“`py:
N, M = map(int, input().split())MARKET = [(lambda item, price: (item, int(price))
)(*input().split())
for _ in range(N)
]
WANTEDS = [input() for _ in range(M)]for w in WANTEDS:
print(
sum(price for item, price in MARKET
if item.startswith(w)
)
)
“`
市場のものと欲しいものをそれぞれ読み込み、欲しいもの毎にそれで始まる文字列の値段を集計する。
これだとタイムアウトしそうだが、結構余裕でクリアーだったのだが?
paizaプログラミング問題Rank S (Python)
[paiza×Qiita記事投稿キャンペーン](https://paiza.jp/pages/campaign/paiza-qiita)に参加しました.
関連リポジトリは,以下になります.https://github.com/tomtkg/Python-Sample/tree/main/paiza
ここでは,Rank S問題の解答と簡単な解説を公開します.
言語はPythonを選択しました.結果は以下のようになりました.# Rank S
## 村人の友好関係
https://paiza.jp/works/mondai/s_rank_skillcheck_archive/group_popularity“`python:group_popularity.py
import numpy as npN, M, Q = map(int, input().split())
N += 1 # 入力が1~Nのためm = np.zeros((N, N), dtype=int)
for _ in range(M):
a, b, f = map(int, input().
Python3: mod7占い (paizaランク S 相当)やってみた
https://paiza.jp/works/mondai/s_rank_skillcheck_sample/mod7
“`py:
from itertools import combinationsN = int(input())
DECK = [int(input()) for _ in range(N)]print(
sum(1 for cards in combinations(DECK, 3)
if sum(cards) % 7 == 0
)
)
“`デッキを読み込んで、3枚足すと7の倍数になる組み合わせを計数していく。まんまですな。
Python リスト内包表記とappend()の比較について
# はじめに
リスト内包表記は簡潔に記載できるが、どちらを使った方が良いのか。速度の面で比較しました。
プログラムは、オイラリー・ジャパンの「入門Python3」を参考にしています。# timeitを使用した時間の比較
“`python:python
from timeit import timeitdef make_list_1():
result = []
for value in range(1000):
result.append(value)
return resultdef make_list_2():
result = [value for value in range(1000)]
return resultprint(‘make_list_1 の所要時間 ’, timeit(make_list_1, number = 1000),’秒’)
print(‘make_list_2 の所要時間 ’, timeit(make_list_2, number = 1000),’秒’)
Python3: 島探し (paizaランク S 相当)やってみた。
おもしろそうなのでやってみました。
https://paiza.jp/works/mondai/s_rank_skillcheck_sample/search-island
“`py:
# 探索する方向に応じた次に探索する方向:
# 0:South, 1:East, 2:North, 3:West
DIR = ( (0, 1, 3)
,(1, 2, 0)
,(2, 3, 1)
,(3, 0, 2)
)# 探索する方向に応じたとなりへの差分
D = ( ((1, 0), (0, 1), (0, -1))
, ((0, 1), (-1, 0), (1, 0))
, ((-1, 0), (0, -1), (0, 1))
, ((0, -1), (1, 0), (-1, 0))
)W, H = map(int, input().split())
A = [ [False] * (W + 2) if i == 0 or i == H + 1 else
[Fal
Python3: お菓子の詰め合わせ (paizaランク A 相当)やってみた
おもしろそうなのでやってみました。
https://paiza.jp/works/mondai/a_rank_skillcheck_archive/school_hiking
“`py:
from itertools import combinationslength_from = (
lambda N: lambda amount: lambda sorteds:
next(
length
for length in range(N, 0, -1)
if sum(sorteds[:length]) <= amount ) ) remain_from = ( lambda length: lambda amount: lambda sorteds: min( diff for c in combinations(sorteds, length) if (
Python3:村人の友好関係 (paizaランク S 相当)やってみた。
おもしろそうなのでやってみました。
https://paiza.jp/works/mondai/s_rank_skillcheck_archive/group_popularity
“`py:
N, M, Q = map(int, input().split())relations = [tuple(map(int, input().split()))
for _ in range(M)
]relations.sort(key=lambda x: x[2], reverse=True)
states = [False] * (N + 1)
for _ in range(Q):
state, member = (
lambda op, m: (True if op == “+” else False, int(m))
)( *input().split() )states[member] = state
print(
next(
paizaプログラミング問題Rank A, B (Python)
[paiza×Qiita記事投稿キャンペーン](https://paiza.jp/pages/campaign/paiza-qiita)に参加しました.
関連リポジトリは,以下になります.https://github.com/tomtkg/Python-Sample/tree/main/paiza
ここでは,Rank A, B問題の解答と簡単な解説を公開します.
言語はPythonを選択しました.結果は以下のようになりました.# Rank A
## お菓子の詰め合わせ
https://paiza.jp/works/mondai/a_rank_skillcheck_archive/school_hiking“`python:school_hiking.py
from itertools import combinationsN, X = map(int, input().split())
a = [int(input()) for _ in range(N)]for r in range(N):
b = [X – sum(c) for c in combi
Cloud Run Jobsの実践
# はじめに
この記事では Cloud Run でいくつかのジョブを作成して Cloud Run Jobs の実践的な使い方を紹介します。
なお、Cloud Runの利用料に関してはについては[公式の案内](https://cloud.google.com/run/pricing?hl=ja)を確認してください。
また、「そもそもCloud Run Jobsってなに?」という方は前に書いた記事(「[怖くないCloud Run](https://qiita.com/sugarperson/items/548bacebdd1de4ccc41c)」)も参考にしていただけると幸いです。
# 演習の準備
## プロジェクトの作成
1. [Google Cloudダッシュボード](https://console.cloud.google.com/projectselector2/home/dashboard?hl=ja)を開き「プロジェクトを作成」を選択してください。
1. プロジェクトの作成画面が開いたら cloud-run-drill という名称の新規プロジェクトを作成してく
paizaプログラミング問題Rank C, D (Python)
[paiza×Qiita記事投稿キャンペーン](https://paiza.jp/pages/campaign/paiza-qiita)に参加しました.
ここに書いたプログラムの関連リポジトリは,以下になります.https://github.com/tomtkg/Python-Sample/tree/main/paiza
ここでは,Rank C, D問題の解答と簡単な解説を公開します.
言語はPythonを選択しました.結果は以下のようになりました.# Rank C
## 残り物の量
https://paiza.jp/works/mondai/c_rank_skillcheck_archive/leftover“`python:leftover.py
m, p, q = map(int, input().split())
print(m * (100 – p) * (100 – q) / 1e4)
“`
入力文字列を数値`m`,`p`,`q`に分配し,数値演算します.
なるべく整数で計算して,一番最後で小数表記に直す除算を適用しています.パーセント表記は,安易に小
【Python3】【殿堂入りキャンペーン】村人の友好関係 (paizaランク S 相当):アルゴリズム付きの解説
https://paiza.jp/works/mondai/s_rank_skillcheck_archive/group_popularity
この問題では、村人の同好会グループの管理と人気度の計算を効率的に行う必要があります。Union-Findデータ構造を用いることで、友好関係を管理し、入退会ログに基づいて人気度を計算することができます。
### アルゴリズム設計
**概要:**
– 村人間の友好度データを受け取り、Union-Findを用いて管理します。
– 各村人が同好会に入退会するたびに、同好会の人気度を計算します。### 手順
1. **Union-Findクラスの定義**:
– `find`メソッドでルートを探し、パス圧縮を行う。
– `union`メソッドで2つの集合を結合する。2. **データの読み込み**:
– 村人の数 `N`、友好関係の数 `M`、ログの数 `Q` を読み取る。
– 友好関係のデータをリスト `all_edges` に格納し、友好度の降順でソートする。3. **最小全域木(MST)の構築**:
【paiza×Qiita】山折り谷折り(paizaランクA相当)を初学者がカスに解く【python3】
# はじめに
この記事は,[paiza×Qiita記事投稿キャンペーン「プログラミング問題をやってみて書いたコードを投稿しよう!」](https://paiza.jp/pages/campaign/paiza-qiita)の中の問題,山折り谷折り (paizaランク A 相当)の解答とそれについての自習の記事である.
この記事を書いている僕は,7月頭に就職してから初めてプログラムに触った人間である.プログラミングの経験は殆どない.大学の一般教養的な授業でCを触った程度である.物理の研究で簡単な解析計算,数値計算にはMathematicaを使っていた.pythonはシミュレーションアプリの中で動いているのを見てちょっと書き換えた程度だ.オブジェクト指向?型?インスタンス?みたいな語を最近知った程度.全く持っての素人が一ヶ月,社内でふらふらpythonの勉強をしたぐらいの実力だ.
キャンペーンに出題されるような問題は,プログラムに明るい人なら苦もなく解ける問題だろう.それをえっちらおっちら解くのがこの記事とキャンペーンの目指すところであろう.みんな鮮やかな解答が見たいというよりは,赤
Workato:日付間より年数を計算する
# はじめに
社員データや顧客データWorkatoで扱う際、誕生日や勤続年数、サービス継続年数、法人の事業年数など、何らかの経過年数などを取得したい場合があるかと思います。
年数の計算は閏年を考慮しなければならず、閏年とそうでない年では日数が異なるため、単純に時間や日数をもとに計算を行うことはできません。
Workatoにおいて年数の計算方法は様々ありますが、Pythonコネクタを利用すると、コードを書く必要はあるものの、シンプルに年数計算のための処理を用意することができます。また、Recipe Functionとして作成して共通処理化(モジュール化)することで、様々なレシピで共通して活用する(再利用性を高める)ことができます。
今回は、再利用性の観点から、Recipe Functionで年数計算処理の実装を進めていきます。
# レシピ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/960d5c84-07fe-4d0b-1f0d-6a640557d01e.png)
怖くないCloud Run
# はじめに
この記事ではGoogle Cloud Runの概要と基本的な使い方を紹介します。
Cloud Runの細かな説明は[公式ドキュメント](https://cloud.google.com/run/docs/overview/what-is-cloud-run?hl=ja)を読んでいただくこととして、ここではなるべくイメージをつかむための説明を心がけて行こうと思います。
この記事を通じて「簡単そうだな!」とか「Cloud Runなんて怖くない!」みたいな感想を持ってもらえたら嬉しいです。
📝免責事項
Cloud Runには無料利用枠が設定されていますが、その無料枠を超過すると料金が請求されます。
この記事で紹介するサンプルアプリは1~2回動かすくらいなら無料枠を超えない想定ですが、仮に料金が発生したとしても当方は責任を負いかねますのでご了承ください。
Cloud Runの料金については[公式の案内](https://cloud.google.com/run/pricing?hl=ja)をご確認ください。
【Python3】島探し (paizaランク S 相当):アルゴリズム付きの解説(幅優先探索(Breadth-First Search, BFS))
https://paiza.jp/works/mondai/s_rank_skillcheck_sample/search-island
島探し問題のアルゴリズムを設計し、Pythonプログラムを作成します。基本的には、幅優先探索(BFS)を使用して、島を数えます。
### アルゴリズム設計
**問題の概要:**
– 列の数が `M`、行の数が `N` の表があり、黒マス (`1`) の塊を「島」と呼ぶ。
– 島の数を計算して出力する。**入力:**
– 1行目に列の数 `M` と行の数 `N` がスペース区切りで与えられる。
– 次の `N` 行に、スペース区切りで `M` 個の数字(`0` または `1`)が与えられる。**出力:**
– 島の数を一行で出力する。### 擬似コード
**擬似コードのステップ:**1. **入力の読み取り**
– `M` と `N` を読み取る。
– 表(2次元リスト)を読み取る。2. **探索の準備**
– 幅優先探索(BFS)用の移動方向リスト `move` を準備する。
– 島の数をカウ
【Python3】mod7占い (paizaランク S 相当):アルゴリズム付きの解説
https://paiza.jp/works/mondai/s_rank_skillcheck_sample/mod7
まず、問題の要件を詳しく分析し、アルゴリズムを設計します。
### 要件分析
**問題の概要:**
– 与えられたカードの整数から、異なる3枚を選んでその和が7で割り切れる組み合わせの数を求める。**入力:**
– 最初の行にカードの枚数 `N` が与えられる。
– 次の `N` 行に各カードの整数が与えられる。**出力:**
– 和が7で割り切れる3つの異なるカードの組み合わせの数を一行で出力する。### アルゴリズム設計
1. **入力の読み取りと初期化**
– `N` を読み取る。
– カードの整数をリスト `a` に格納する。2. **カードの整数の分類**
– 各整数を7で割った余りを計算し、余りごとにカウントするリスト `a_mod` を作成する。`a_mod[i]` は余りが `i` である整数の個数を表す。3. **組み合わせの列挙**
– 余りが `(i, j, k)` で、その和が7で割り
Workato:PythonコネクタでSQLite3を利用する
# はじめに
WorkatoのPythonコネクタはsqliteのモジュールに対応しており、コード上でSQLite3データベースを利用することが可能です。
Workatoには [SQL Collection by Workato](https://docs.workato.com/features/collection.html)や[SQL Transformations](https://docs.workato.com/features/sql-transformations.html)があり、これらのコネクタ上でSQLを利用したデータ処理(加工・抽出)が可能ですので、通常においてはPythonコネクタでSQLite3を使う必要性は低いのですが、契約プランによる制限があり通常利用できない場合や、これらのコネクタで要件を満たさないデータ処理を行う際に有効です。
なお、WorkatoのPythonコネクタは nobody ユーザーとして実行されるため、書き込み可能なディレクトリは `/tmp` のみに制限されています。また、最も手軽な方法はインメモリデータベースを利用することです