- 1. pythonwebスクレイピング-要素を一括取得
- 2. 【Python入門】Pythonで頻出の関数やメソッドのまとめ【課題形式】
- 3. 【Python】三井住友信託銀行プログラミングコンテスト2019C(DPの使いどころさん)【AtCoder】
- 4. Pythonで再帰をやってみた②(フィボナッチ数列)
- 5. LinuxでのPythonのversionの複数管理
- 6. Flask 単体テスト環境(test_client)
- 7. Seleniumを使用し自動ログイン、データ収集
- 8. Pythonでトポソを使って全方位木DPをする
- 9. python超入門書にてpipで詰まった(from: can’t read /var/mail/PIL)
- 10. 競技プログラミングでTLEのときに高速化できるアルゴリズム
- 11. Python&機械学習 勉強メモ⑥
- 12. 【Python】茶色コーダーになりました〜【AtCoder】
- 13. jupyterlab & matplotlibで作成したグラフのデータ点にリンクを貼る
- 14. Pythonの環境構築 For Mac
- 15. ndarrayで行ベクトルを列ベクトルに変換するときに気を付けるべきこと
- 16. openpyxlのごく一部備忘録
- 17. 【Mac】Selenium/jupyter notebook/Chromedriver install方法
- 18. 基本・応用情報試験のための整列アルゴリズムのメモ③
- 19. Python3.9の新機能(1) – 辞書型で和集合演算子が使えるようになる
- 20. 非再帰BFSでトポソから木DPをする
pythonwebスクレイピング-要素を一括取得
>PythonによるWebスクレイピング〜入門編〜【業務効率化への第一歩】の9-10勉強メモ
https://www.udemy.com/course/python-scraping-beginner/
スクレイピング対象ページ(PW制限あり)
https://scraping-for-beginner.herokuapp.com/mypage#要件: 下記テーブルの右側部分のテキスト情報を一括取得すること
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68847/96f844a7-3785-04ca-debe-04bbb581f894.png)F12を押し、開発ツールで確認すると右側のテキストは、すべてtdでマークアップされていることがわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68847/2a57626f-813a-2872-e765-a7f6c725b716.pn
【Python入門】Pythonで頻出の関数やメソッドのまとめ【課題形式】
# はじめに
Pythonには、様々な組み込み関数やメソッドが用意されています。
その中でも頻繁に使用するものをまとめてみました。# 概要
Pythonを理解する上で、[トミーさんブログ](https://obgynai.com/python-roadmap/)の課題が非常に役立ったので、本記事についても課題形式で進めていきます。
不明な点がありましたら、リンク先にて詳しく説明されているので、そちらを参考にしてみてください。# 対象者
以下の方向けの記事となっています。
* Pythonのインストールや、JupyterNotebookの環境構築が完了済み。
* 少しPythonを触ってみた。
* 自分の実力を確認したい!# 環境
* macOS High Sierra 10.13.6
* Python 3.7.6# 実装内容
## 課題1 入力金額の平均金額を算出する
### 技術要素
* リストと頻出メソッドの利用(append)
* リストを計算する関数の利用(sum、len)
* 入力用の関数を利用(input)
* 条件分岐の利用### 仕様概要
* 参加者
【Python】三井住友信託銀行プログラミングコンテスト2019C(DPの使いどころさん)【AtCoder】
>※この記事は、DP(動的計画法)の基本中の基本である
かえるくん問題2問がとけることを前提としています。>- [Frog1](https://atcoder.jp/contests/dp/tasks/dp_a)
– [Frog2](https://atcoder.jp/contests/dp/tasks/dp_b)DPでとけるんだ!!!
と感動した問題がありましたので記事にします。
DPの考え方は知っているけれども、実際の問題と結びつかない!
という人は参考になるかも(ならないかもw)#[三井住友信託銀行プログラミングコンテスト2019C](https://atcoder.jp/contests/sumitrust2019/tasks/sumitb2019_c)
Difficulty:205
問題を読んで、bit全探索や6重for文が一瞬頭をよぎりましたがダメそう。ちなみにDPが思いつかなくても解けます。(記事の最後に別解として載せておきます。)
しかしDPが思いつかなかった場合、
たぶん法則性をみつけるのに15分くらいかかる気がします。**レートをあげるには
Pythonで再帰をやってみた②(フィボナッチ数列)
以前再帰を使った回文判定、Fractal図形の描画を行いましたが、今回は第2弾です。
#フィボナッチ数列
フィボナッチ数列とは、
1 1 2 3 5 8 13…
のように前2つの数字を足したものが次の項になるという数列です。
(例)第4項の3はその前2つの1と2の和
今回は再帰を使ってフィボナッチ数列の第n項を知るというプログラムを書きました。“`Python
def fibonacci(n):
if n < 3: return 1 else: return fibonacci(n-1) + fibonacci(n-2) ``` もし1項か2項なら1、それ以降は1つ前と2つ前の項に戻り、さらに1つ前、2つ前にもどるという形です。 少し分かりにくいですが、 n=5なら4項、3項の和が必要なので2,1項に戻って和を求めていきます。 これでn=10なら55、n=20なら6765となります(数が大きくなればなるほど時間がかかります)。
LinuxでのPythonのversionの複数管理
http://www.nemotos.net/?p=2633
を見れば良い。
Flask 単体テスト環境(test_client)
# 概要
FlaskのAPIテストをするのに「POST MAN」を使用していましたが、今更Flaskでの単体テスト方法を学んだんで備忘録。
# 例
テスト用のコードは「test.py」として別に分けています。「app.py」に簡単なルーティング設定をしています。
“`python:app.py
from flask import Flask, jsonify, request
app = Flask(__name__)@app.route(“/”)
def home():
if request.is_json: # jsonのデータ指定
return jsonify({“msg”: “fault massage”}), 400
return jsonify({“msg”: “success message”}), 200if __name__ == “__main__”:
app.run()“`
今回はget通信としていますが、これはgetのところをpost等にすればその他通信が可能です。
“`python:test.py
import
Seleniumを使用し自動ログイン、データ収集
>PythonによるWebスクレイピング〜入門編〜【業務効率化への第一歩】の6-8勉強メモ
https://www.udemy.com/course/python-scraping-beginner/##(基本設定)Seleniumからwebdriverをimport
“`
from selenium import webdriver
“`
##Chromeを開いて、対象URLを開く
“`
browser = webdriver.Chrome()
browser.get(‘https://scraping-for-beginner.herokuapp.com/login_page’)
“`#Seleniumを使用し自動ログイン~Username/Passwordを自動入力
## フォームのidを取得該当ページのフォーム部分のidを開発ツールを使用し取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68847/6ad1f4e5-933e-f330-476e-976
Pythonでトポソを使って全方位木DPをする
# この記事でやること
Pythonでトポソを使って全方位DPをするのが目標です。最初にこの記事での実装方針を書いておきます。
### 実装方法
1. トポソを使う
1. 抽象化
1. 逆元がない場合にも対応
1. 左右累積和は配列を1つだけ持つ記事としては、2. 抽象化 するための理論面の整備がメインになりそうです。
## 経緯
前回の記事の最後 に、気が向いたら全方位木 DP も書くと言ったら、早く気が向いてほしいと言われたので気を向けることにしました。
![全方位木DP_0.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609864/c3345dc7-40bb-5397-ce46-3ed0a4585bea.jpeg)
python超入門書にてpipで詰まった(from: can’t read /var/mail/PIL)
#使用している本について
今回の件に出てくる本はSB Creativeの「[確かな力が身につくPython「超」入門](https://www.amazon.co.jp/確かな力が身につくPython「超」入門-確かな力が身につく「超」入門シリーズ-鎌田-正浩/dp/4797384409/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=python+%E8%B6%85&qid=1584289306&sr=8-3)」です。#本題
この本のChapter6では、外部ライブラリを用いた話をします。その例として、Pillowを用います。その際、pipコマンドを使用します。ここで一つ詰まったことがあり、調べてみたところネット上でも同じような悩みを持っている方がいたので記事にしました。まずは本の通りPillowをインストールし、指示通りにしてみましょう。“`python
$ pip install Pillow # MacOSならば’pip’を’pip3’に変換してください。
(結果略)
$ fr
競技プログラミングでTLEのときに高速化できるアルゴリズム
# 暇があり、競プロをやっているときに気づいたことのMemo
## Level1#### 累積和
配列の部分和を求め比較する必要がある際、一回づつ部分和を求めるのではなく、前項(i項まで)の和にi+1の項を加えてそこから部分和の範囲を考慮したほうが早い。例上記が正解、下記だとTLEになる。“` python:ABC_D_Dice_in_Line.py
for i in range(k, len(p)):
saveSum = saveSum + p[i] – p[i – k]
if saveSum > M:
M = saveSum“`
“` python:ABC_D_Dice_in_Line.py
for i in range(len(p) – k + 1):
# 一回づつlistの和を求めているから計算量が多い
savesum = sum(p[i:i + k])
if savesum > M:
M = savesum“`
Python&機械学習 勉強メモ⑥
#はじめに
① https://qiita.com/yohiro/items/04984927d0b455700cd1
② https://qiita.com/yohiro/items/5aab5d28aef57ccbb19c
③ https://qiita.com/yohiro/items/cc9bc2631c0306f813b5
④ https://qiita.com/yohiro/items/d376f44fe66831599d0b
⑤ https://qiita.com/yohiro/items/3abaf7b610fbcaa01b9c
の続き– 参考教材:[Udemy みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習](https://www.udemy.com/course/learning-ai/)
– 使用ライブラリ:scikit-learn#課題設定
手書きの数字画像(8×8 px)から、書いてある数字を認識する。#ソースコード
##インポート
“`python
from sklearn import datasets
from skl
【Python】茶色コーダーになりました〜【AtCoder】
#【祝】茶色コーダーになりました〜
12回目でようやく茶色コーダー!!!
一番初めは2重for文も書けなかったのですごい成長!!!
パチパチパチ(拍手)〜
##茶色コーダーになるまでにやったこと
競プロ初心者に参考になるかも!
ということでこれまでやってきた事を記事として残しておきます!###①けんちょんさんの記事をいろいろ読んでわくわくする!
一番最初に読んだ記事はこれ!
[AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~](https://qiita.com/drken/items/fd4e5e3630d0f5859067)
まずはこれを一通り見てから、実際にPythonで解いてみました!
jupyterlab & matplotlibで作成したグラフのデータ点にリンクを貼る
# この記事について
記事タイトルの通りのことがやりたかった。
また使うことがあるかも知れないので、その方法を記録しておく。# 手順
– matplotlib で リンク付きのグラフを作成
– `svg` 形式で保存
– Chrome などのブラウザでファイルを開く# 環境
自分は jupyter-lab での作業でした。
バージョンはこんな感じ(pip freeze の結果より)“`bash
jupyterlab-server==1.0.7
matplotlib==3.2.1
“`# ファイル作成
“`python
# 各種設定
import matplotlib.pyplot as plt
from IPython.display import set_matplotlib_formatsset_matplotlib_formats(“svg”)
# テストデータ準備
data_list = [[0, 1], [1,0], [1,1]]
label_list = [‘google’, ‘yahoo’, ‘lightcafe’]
url_list = [
Pythonの環境構築 For Mac
pythonはまるっきり初心者で、触れたことがほぼないので環境構築からやります!
### PythonのVersion確認
Macにはpythonがpreinstallされているのでまずは確認。
$ python –version
Python 2.7.10$ python3 –version
Python 3.7.7あるので準備はこれでOK!
なんですが、ない場合や最新のpythonを利用したい場合は別途インストールする必要があります
pyenvをhomebrewでインストールしてpythonを落としていきましょう### Pythonのインストール
$ brew install pyenv
bash_profileなどに環境変数設定などをしたら完了
$ echo ‘export PYENV_ROOT=”$HOME/.pyenv”‘ >> ~/.bash_profile
$ echo ‘export PATH=”$PYENV_ROOT/bin:$PATH”‘ >> ~/.bash_pro
ndarrayで行ベクトルを列ベクトルに変換するときに気を付けるべきこと
pythonのndarrayで、行ベクトルを列ベクトルに変換するときのお話です。
思わず、次のようにしてしまいがちですよね。
`print(np.array([1,2,3,4,5]).T)`
でもこれだと、結果は“`
[1 2 3 4 5]
“`
となってしまい、行ベクトルに変換できません。
これは、行ベクトルが1次元配列で表現されているのに対し、
列ベクトルは2次元以上の配列でないと表現できないからです。
実際、
`print(np.array([[1,2,3,4,5]]).T)`
のように2次元配列で行ベクトルを渡せば、ちゃんと“`
[[1]
[2]
[3]
[4]
[5]]
“`
という結果を得ます。ちなみに
`print(np.transpose(np.array([1,2,3,4,5])))`
においても同様で、列ベクトルは得られません。一次元配列としての行ベクトル`v`から(2次元配列としての)列ベクトル`m`を得たいときは、
`m = np.array([v]).T`
としましょう
openpyxlのごく一部備忘録
# 概要
機能が多くて一覧化したほうが後々色々やりやすいってことで、列挙。
あくまでも自分で使ったもののみなのでこれで全部ではないです。
細かいところは[公式](https://openpyxl.readthedocs.io/en/stable/)を参照ください。## 新しいブックを作る
ブックを作って1つシートも作る。
以降はこれをやってある前提。“` python:
import openpyxlbook = openpyxl.Workbook()
sheet = book.active
“`## シート名設定
“` python:
sheet.name = “しーと”
“`## ブック保存
“` python:
try:
book.save(“book.xlsx”)
except exception as e:
# excelを開いているとPermission Error。他もあるかも。
finally:
book.close()
“`## csvからエクセルを作る
“` python:
import csv
【Mac】Selenium/jupyter notebook/Chromedriver install方法
# Selenium install方法
## 作業するフォルダへパスを通す。
例: desktopのworkフォルダにパスを通すなら
1. Terminalを開き `cd ~/Desktop/work`
2. Terminalに`pwd` を入力しパスが正しいか確認## pipを使用する場合
`pip3 install Selenium`##Anacondaを使用する場合
`conda install Selenium`# jupyter notebook install方法
##pip使用する場合
`pip install jupyter`
##Anacondaを使用する場合
`conda install jupyter`—–
下記URLが表示されるか確認
http://localhost:8888/tree表示されているのならば、下記画像の「NEW」をクリックし新たなnotebookを作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68847/
基本・応用情報試験のための整列アルゴリズムのメモ③
#Pythonで単純挿入法
##はじめに
ここでは、基本・応用情報処理技術者試験を受ける際に学ぶ基本的な整列アルゴリズムについて、実際に自分で手を動かしながら理解した過程を自身への整理も兼ねてまとめています。
私同様にpythonで勉強をされている初学者の方の参考になれば幸いです。また私自身も初学者ゆえ、書き方、アルゴリズム等至らない点があると思いますので、細かいことでもご指摘頂ければ幸いです。
宜しくお願い致します。##問題
リスト [11, 42, 5, 63, 37, 54, 4]
について、3つの基本整列法を用いて昇順で整列させなさい(自作問題)
・バブルソート
・単純選択法
・単純挿入法本スライドでは、単純挿入法を扱う。
##単純挿入法
未整列の要素の並びの先頭の要素を取り出し、その要素を整列済みの要素の中に正しく挿入していく。####プログラムの手順①
先頭の要素が次の要素より大きければ、入れ替える。これを繰り返す。“`python:insertion_1.py
item = [11,42,5,63,37,54,4]#整列前の配列
print(it
Python3.9の新機能(1) – 辞書型で和集合演算子が使えるようになる
## はじめに
2020年10月にリリースを予定しているPython3.9で新たに加わる変更を[Python3.9の新機能 (まとめ)](https://qiita.com/ksato9700/items/d5df9d36147796c86c77)という記事でまとめ始めました。その中で比較的分量のある項目を別記事に切り出すことにしましたが、その第一弾として辞書型で和集合オペレータを使えるようになる変更を取り上げてみたいと思います。
## 辞書型の統合
辞書型はPython組み込みの標準データ型の一つです。他の言語だとハッシュ型・マップ型・連想配列型など様々な呼ばれ方をしていますが、要は名前と値のペア (key-value pair)を格納するためのデータ型です。
この辞書型のデータ(d1, d2) が二つあり、それを混ぜ合わせて一つの辞書型データにすることを考えます。これまでも幾つかやり方がありました。
#### 1) `update`メソッドを使う
d1.update(d2)`とすれば統合された辞書型データがd1に上書き格納されます。もしd1をそのまま取っておきたい場
非再帰BFSでトポソから木DPをする
# 非再帰 BFS
Python で非再帰 BFS を書きます。ついでにトポロジカルソート(トポソ)もできます。トポロジカルソートを知らない人は適当に ググって ください。トポロジカルソートを使うと、木 DP が簡単にできます。
## 目標
木の問題は基本的にトポソすればなんとかなります (本当?) 。みんな大好き 木DP もトポソ順に処理すればその都度 BFS / DFS する必要ないのでらくちんです。この記事では BFS で木のトポソを求めて、木 DP をやるのが目標です。### 入力
まずは入力部分。1-indexed で辺リストを `X` に格納しています。“`test.py
N = int(input()) # 頂点数
X = [[] f