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

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

PythonでWebスクレイピングによりグローバルIPアドレスを調べる方法

# 概要

本記事ではPythonスクリプトを用いて,スクレイピングによりグローバルIPアドレスを調べる方法について記述する.プライベートIPアドレスの調べ方は下記の記事を参照されたし.

[Macのターミナル上でプライベートIPアドレスを調べる方法](https://qiita.com/rimorimo/items/9ee259ffb492a073884a)

# 最も簡単にプライベートIPアドレスを調べる方法

下記のサイトにアクセスするだけで簡単に調べる事ができる.

[あなたの情報(安全な確認くん)](https://kakunin.net/kun/)

# スクレイピングによりグローバルIPアドレスを調べる調べる方法

**システム環境**
macOS 10.11.6以降(他のOSでも可)
Python 3.6.5以降

**本記事ではディレクトリ操作をmacOSに合せて記述しているため,他のOS(Linux, Windows等)の使用時は必要に応じてディレクトリ構造を置き換えて考えるものとする.**

**Pythonライブラリのインストール**

“`bash
$ pi

元記事を表示

listに含まれる要素で組合せを作る

リストの要素の組合せリスト作成時の備忘録_φ(・\_・

# 目的:listに含まれる要素で組合せを作る
下記のリストを例にします。

“`python:
data = [0,1,2,3]
“`

# 方法1:重複あり
“`python:sample1.py
for i in data:
for j in data:
print(i, j)

# 出力結果
# 0 0
# 0 1
# 0 2
# 0 3
# 1 0
# 1 1
# 1 2
# 1 3
# 2 0
# 2 1
# 2 2
# 2 3
# 3 0
# 3 1
# 3 2
# 3 3
“`

# 方法2:重複なし
“`python:sample2.py
for i in data:
for j in [x for x in data if x != i]:
print(i, j)

# 出力結果
# 0 1
# 0 2
# 0 3
# 1 0
# 1 2
# 1 3
# 2 0
# 2 1
# 2 3
# 3 0
# 3 1
# 3 2
“`

完全に自分の備忘録の

元記事を表示

PythonでExcel操作【openpyxl – 複数セルの範囲指定】

### 目次
1. for文で自力で
1. 左上と右下のセルを指定して
1. sheet.iter_rows()を利用して
1. 実践テクニック

### Excelファイルの読み込み
“`python:
import openpyxl as excel
book = excel.load_workbook(“excel_filename.xlsx”)
sheet = book.active
“`
### 1.for文で自力で
“`python:
for y in range(2, 5):
r = []
for x in range(2, 5):
v = sheet.cell(row = y, column = x).value
r.append(v)
print(r)
“`
### 2.左上と右下のセルを指定して
“`python:
for row in sheet[“B2:D4”]:
print([cell.value for cell in row])
“`
### 3.sheet.iter_rows()

元記事を表示

PythonでExcel操作【openpyxl – 基礎まとめ】

### インポート
“`python:
import openpyxl as excel
“`
### ワークブック作成 or 読み込み
“`python:
# 新規ワークブック
book = excel.Workbook()
# 作成済みファイルを読み込み
book = excel.load_workbook(“excel_filename.xlsx”)
# 計算式ではなく値を取得する
book = excel.load_workbook(“excel_filename.xlsx”, data_only = True)
“`
### シートの指定や操作
“`python:
# アクティブなワークシート
sheet = book.active
# インデックスで指定
sheet = book.worksheets[シート番号]
# シート名で指定
sheet = book[“sheetname”]
# シート名一覧
print(book.sheetnames)
# 新規シート作成
sheet = book.create_sheet(title = “sheetname”)
#

元記事を表示

【Python】pandasで辞書型のリストをCSV出力する(備忘録)

少し悩んだので自分用メモ

# 辞書型(dictionary)のリスト
Pythonで辞書型のリストを扱うことがあると思います。
(少なくとも私はよく使っています)

こういうデータです。

“`json
[
[
{‘No’: 1, ‘Name’: ‘Yamada Taro’, ‘LastLoginTime’: ‘2021-03-16 15:44:16’},
{‘No’: 2, ‘Name’: ‘Yamada Jiro’, ‘LastLoginTime’: ‘2021-03-10 00:12:17’},
],
[
{‘No’: 3, ‘Name’: ‘Yamada Saburo’, ‘LastLoginTime’: ‘2021-03-20 12:01:02’},
],
[
{‘No’: 4, ‘Name’: ‘Yamada Shiro’, ‘LastLoginTime’: ‘2020-12-24 00:00:13’},
{‘No’: 5, ‘Nam

元記事を表示

scipy.optimize.leastsqで何を最小化するか what should be minimized in the optimization of scipy.optimize.leastsq.

※初投稿で勝手がわからなかったので、後々告知なく修正するかもしれません。

scipy.optimize.leastsqは所謂最小二乗法で二乗残差を最小化することで、ある $y$ の $x$ 依存性 $y(x)$ をある関数 $f(x)$で再現する際のパラメーターを最適化する場合にも用いられる。

scipy.optimize.leastsq is sometimes used to optimize the parameters of a function $f(x)$ that reproduces the $x$-dependency of $y$.

例えば、ある半導体の低効率の温度依存性 $\rho(T)$ をArrheniusの式 $a\exp(b/T)$ でフィッティングしたい場合($a,b$ はフィッティングパラメータ。物理的な意味はググってください。)は

For example, the temperature depencencies of resistivity $\rho(T)$ is sometimes fitted by the Arrhenius for

元記事を表示

Chalice で Lambda Layer を利用する

# 問題点

Chalice で1つの `app.py` 内に以下のようなコードを書いた場合、API Gateway用の Lambda関数 と 定期実行用の2つの Lambda 関数が作成される。 デフォルトの設定だと `requirements.txt` で指定するすべてのライブラリを各 Lambda 関数内に展開してアップロードするので、2つの Lambda のコードサイズが大きくなる。

“`python:app.py
@app.route(‘/’)
def index():
pass

@app.schedule(‘rate(5 minutes)’)
def cron(event):
pass
“`

こういった場合には共通ライブラリの配置場所として Lambda Layer を利用できるのだが、昔ドキュメントを読んだときに読み落としていたのか chalice ではまだサポートされていないと思い込んでいた。 改めて調べると、ちゃんと Layer を使うことができたので、そのやり方を示す。

# 対象コードとバージョン

今回は以下のような cryptog

元記事を表示

cvxpy install

# cvxpy とは

https://www.cvxpy.org/install/

# cvxpy インストール・環境設定

“`shell

$ conda create -n cvxpy python=3.7 anaconda

$ conda activate cvxpy

$ conda install -c conda-forge cvxpy

“`

# jupyter table of contents(2)

“`shell

$ pip install jupyter_contrib_nbextensions

$ jupyter contrib nbextension install –user

$ jupyter notebook

“`

このあと、ブラウザ画面に移動するので、そこで”Nbextensions”をクリックし、「Table of Contents (2)」のチェックを入れる。

元記事を表示

FlaskでWebAPIをデプロイした

# Python(Flask)でWebAPIをデプロイした際の備忘録

どうもtake-2405です。
普段は golangでバックエンドの開発を行っているのですが、1週間ほどPythonについて調べつつWebAPIをデプロイしました。

## 1. WebAPIをローカル環境で作成
#### 前提条件
– Githubに関する知識がある
– Herokuのアカウントがある

#### 今回の開発環境

– MacBook Pro 2018 (OS:Big Sur 11.2.1)
– Python 3.7.10(このバージョンは任意)
– Flask 1.1.2
**注意事項:後述しますが、デプロイの際にはサポートされているバージョンに合わせる必要があります。**

#### Flaskのinstall

“`
pip install Flask
“`

#### 簡単なAPIの作成
今回僕が作ったAPIは外部のAPIを利用して必要な情報のみを返すAPIだったためDBは利用していません。
下記のようなmain.pyを作成します。

“`python:main.p

元記事を表示

Python boto3 でS3のディレクトリだけを再帰的に取得して、AthenaのPartition追加をするコード

Python boto3 でS3のディレクトリだけを再帰的に取得する

Athena使用する際に、大量のデータでLoad Partition(MSCK Repair Table)をすると、10分以上実行が走った後、落ちる現象に遭遇しました。

そこで、ディレクトリだけを再帰的に取得し、ALTER TABLEでPARTITIONを追加するクエリを取得するPythonコードを書きました。

“`Python3
import boto3
import pyperclip

DIR_LIST = [] # global変数
BUCKET = ‘{bucket名を入力}’
ATHENA_TABLE = ‘{Athenaのテーブル名}’
PARTITIONS = [‘partitino1′,’partition2′,’partition3’] # HIVE形式で partition1=xxx となっている前提
RootDirectory = ‘test/’ #ディレクトリを指定

### 再帰的に、s3のディレクトリを取得する
def getS3Dir(prefix):
client

元記事を表示

Python3 で MySQL に接続するドライバを比較する

Python3 で MySQL に接続するドライバ

いくつもあって、どれがいいのか?

ぐぐって以下のようなものが出てきたので調べてみました。

– mysql-connector
– mysql-connector-python
– mysql-connector-python-repackaged
– mysql-connector-python-rf
– PyMySQL

# 環境

– OS Ubuntu Linux 20.04 ja
– MariaDB mysql Ver 15.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
– Python 3.8.5

MariaDBは以下のように設定しました
「MariaDB on Ubuntu18.04 LTS (also Ubuntu20.04 LTS)」
https://qiita.com/nanbuwks/items/c98c51744bd0f72a7087

調査日は2021/03/26です。
https://py

元記事を表示

【Python】DataFrameの2次元配列とその中の1行 / 1列との演算

備忘録として

DataFrameの作成

“`py
import numpy as np
import pandas as pd

A = np.random.randint(10, size=(3, 4))
df = pd.DataFrame(A, columns=list(‘QRST’)
df
# Q R S T
# 0 1 5 4 1
# 1 9 5 9 1
# 2 2 4 1 5
“`

DataFrameの各行から0行目を引く

“`py
df – df.iloc[0]
# Q R S T
# 0 0 0 0 0
# 1 8 0 5 0
# 2 1 -1 -3 4
“`

列単位で引き算する場合は、axisキーワードで指定する
axisキーワードは0が縦(row)方向、1が横(column)方向。それぞれaxis=’rows’, axis=’columns’でも指定できる
DataFrameの各列から0列目を引く場合

“`py
df.subtract(df.iloc[:, 0], axis=0)

元記事を表示

MySQLのjson_dataを使ってはまったこと

twitter API v2でツイートを収集して,MySQLに格納しようとしてはまったのでメモする.

# 環境
WSL2(Ubuntu 20.04.2 LTS)+Python 3.7.9+MySQL 8.0を使っている.
PythonからのMySQLへのアクセスには,mysql.connectorを使っている.

# やろうとしたこと
よく使う属性の値はvarcharやintで宣言したカラムに格納し,一応APIの返却した各ツイートの情報全体をjson_dataに格納することにしたが,insertに失敗する.

“`
alldata = requests.get(endpoint, params=params, headers=headers)
obj = json.loads(alldata.text) # dictに変換
data = obj[‘data’]

cur.execute(insert_tweet_sql, (中略, data))
“`
エラーメッセージ

“`
mysql.connector.errors.InterfaceError: Python type

元記事を表示

Flaskのsessionでmutableなオブジェクトを扱う

Flaskのsessionではmutableなオブジェクトの変更は検知されず、変更が反映されない。
例えば以下のコードがそれに該当する。

“`python
from flask import Flask, session

app = Flask(__name__)
app.secret_key = b’a’

@app.route(‘/’)
def index():
if not ‘mutable’ in session:
session[‘mutable’] = []
session[‘mutable’].append(1)
return str(session[‘mutable’])

if __name__ == “__main__”:
app.run(‘localhost’, port=80, debug=True)
“`

`http://localhost/`にアクセスした時に期待する挙動は`[1]`、`[1,1]`、`[1,1,1]`のようにアクセスするたびに配列に1が追加されていくものだが、実際には1つ目以降の1は

元記事を表示

python exeファイル実行時の「Failed to execute script –ファイル名–」エラーについて

##エラー内容

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/998522/6c631c6a-7c95-64d5-9033-7610589228b0.png)
折角つくったプログラムをいよいよ実行しようとしたその時、こんなのが出るとガッカリしますよね。:weary:

私もその一人でございます。
解決方法を色々とググってみましたが、ピンポイントで答えがみつからず、かなり苦労しました。

そこで、ここでは特定の条件下での解決方法ですが、まとめました。:paintbrush:

##前提条件
 ■言語
  python
 ■利用ライブラリ
  selenium

Jupyter Notebook上では動作していたものが、exeファイルにした時に動作しなくなるという状況でした。

##問題となったコーディング部分
下記の部分です。

“`python:
from selenium import webdriver
browser = webdriver.Chrome()
“`
##解決方

元記事を表示

zipと*で2次元配列の行と列を変換

leetcodeを解く時に、2次元配列の各列の値をlistにまとめたかったので、
調べてみました。

## 実例
例えば2次元配列 two_dimentional_array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
が定義されている時、ゴールが[(1, 4, 7) (2, 5, 8) (3, 6, 9)]だとします。

“`python
result = [i for i in zip(*two_dimentional_array)]
“`

とすると結果は

“`python
print(result)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
“`
になりました。

## *によるlistの展開とzipによる
*two_dimentional_arrayをピックアップしますと、*によって2次元配列が1次元配列に展開されます。

“`python
print(*two_dimentional_array)
[1, 2, 3] [4, 5, 6] [7, 8, 9]
“`

## zip関数によって、それぞれ展開され

元記事を表示

法律文書における単語の共起

法律文書において共起される単語ペアを列挙する。
前記事までn-gramで頑張っていたけれど本記事ではおとなしくMeCab利用。

# 参考
以下を参考にさせて頂いた。ただし、元記事ではグラフまでやっているが、本記事では頻出のペアを表示するまで。
[3. Pythonによる自然言語処理 2-1. 共起ネットワーク](https://qiita.com/y_itoh/items/7aa33ba0b1e30b3ea33d)

# 異なる点
元記事から手を加えた点だけ記載する。

## 利用しない単語
元記事では、名詞の共起をやっていた。本記事でもその点は同じ。名詞の中でも数(数詞)ではないものは削除した(あらかじめ削除したほうが良かったかも)点は異なる。法律の文書に〇〇条などの表現が邪魔になりそうな感じがした。

“`python
noun_list = [[v.split()[2] for v in m.parse(line).splitlines() if (len(v.split())>=3 and v.split()[3][:2]==’名詞’ and v.split()[3][3

元記事を表示

Python デバッグ用ViewをTkinterで作成(Windows用)

# 目的
デバッグ中に何らかの内部データを見るために、デバッガでbreakpointを設定して、逐次止めてみたり、流れていくログテキストを追うのは効率が悪いです。
MultiProcess環境ですと、breakpointで止めてしまうと正常な再開ができなかったりします。
それに、ユーザーからの入力も受け付けてほしいとき、ターミナルのキー入力を使って行うと、ログのテキストが流れて、訳が分からなくなります。

# 作成物
Windows用でいたってシンプルです。

機能
・インスタンス生成すると、自動的に別スレッドで動き出します。(mainloopで返ってこないということはありません。)
・インスタンス生成時にダイアログタイトルと初期メッセージを渡して表示できます。
・テキストの最終行でEnterを押すとその前の行を切り出して、Queueで返信してくれます。
→メッセージルールを作っておけば、受信したテキストに応じてアプリケーションの挙動を制御できますね。
例えば、#command が先頭にあったら何等かの動作をするなど。
・テキストを表示させる場合、Queueでテキストを送るか、text

元記事を表示

Python初心者のためのTips & Tricks

 新人のpython使いのためのTips & Tricksを書きます。要点は以下の6点です。

1. 標準ライブラリを使ってコードを簡素化
2. 無駄なfor/while文を排除
3. コードの実行とリソース要件のトラック
4. 2つのテーブルを結合する際の行数の増加を防ぐ
5. Stack Overflowでコーディングソリューションを見つける
6. コードのユニットテスト

#1. 標準ライブラリを使ってコードを簡素化
 標準ライブラリはガンガン使いましょう。単にコードが見やすく短くなるだけでなく、より効率的に動作するようになります。

* 良くない例

“`python
import CSV

rows = []
colnames = [‘a’, ‘b’, ‘c’]

with open(‘filename.csv’, ‘rb’) as f:
reader = csv.reader(f)
for row in reader:
rows.append(rows)

data = pd.DataFrame(rows, cols = colnames)
“`

元記事を表示

Djangoでゲームを作る

#背景
学びのためにDjangoでゲームを作ってみることにする。
テトリスなど色々候補はあると思うがスロットゲームにすることにする。
#モヤモヤ
Djangoと言ったってRestもあるし・・・画面も面倒だし・・・
どうしたって業務・即戦力がきになる・・・オシャレなこともしたいし・・・
→ データアクセスがどっちも1つの山なんでデータベースから取ってきて
JSONで投入するという一旦完璧を目指す。
この時に、スクレイピングとかデータ解析などもやってしまう。
#考えないこと
DjangoRest
#ロードマップ 作り物系
・公式やってみる。
・toDoリスト作ってみる
・ゲーム作ってみる
    → 今ここ
・データベースから取ってきて管理画面だけのを作ってみる。
 →JSONでデータ投入
#仕様
・スロットマシン
・初期表示 4 が3枚並んでいる。
・ボタンを押すとランダム検索が起こる。
・スロットの絵柄と得点 例
6 3個揃うと 10000点 
7 3個揃うと  7000点
5 3個揃うと 300点
・結果を表示する。
・Python3 Djangoを使用
#やって見て
もちろんや

元記事を表示

OTHERカテゴリの最新記事