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

Python関連のことを調べてみた2021年08月27日
目次

最小二乗法をPythonでやってみる

大学の課題で最小二乗法に関する課題が出たのでGoogle先生に最小二乗法について聞いてみたが、どのように活用していくかを書いている”ロク”なサイトがなかった。なのでここに参考になる記事を書いておこうと思う。ぜひ大学の課題等に役立ててほしい。

#最小二乗法

まずは最小二乗法について説明しておこう。最小二乗法とは簡単に言えばそれぞれの点に一番近いような式を求めるというものだ。今回では$y=w_1x+w_2$の一次方程式をそれぞれの点に近くなるように計算を行っていく。($y=ax+b$といったほうがイメージしやすいと思うだろうが今回は他サイトに出てくる変数名を用いるためにこのような式にした。意味は変わらないので安心してほしい。)$y$と$x$は変数で、$w_1$と$w_2$は定数である。つまり、それぞれの点に近くなるような$w_1$と$w_2$を求めていこうというのが最小二乗法である。

それでは例を示していく。まず適当に点をプロットする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/

元記事を表示

杉並区内の新型コロナウイルス感染者数(日ごと)のPDFをCSV変換

https://www.city.suginami.tokyo.jp/news/kansensho/covid-19/1058987.html

+ camelotは変換できなかったのでpdfplumberで変換
+ 年月が省略

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36151/edbc4a3a-ee7a-7b48-5537-2593a42e1b0d.png)

# プログラム

“`python
import pathlib
import re
from urllib.parse import urljoin

import requests
from bs4 import BeautifulSoup

import pdfplumber
import pandas as pd

headers = {
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gec

元記事を表示

dbtからAmazon Athenaにつないで使ってみる

# 概要
データ基盤でETL処理を効率的に行うdbtなんですが、標準ではAmazon Athenaが
サポートされていません。有志によるAthena用のpluginは作成されているので、
それを使ってAtenaに接続する流れをまとめてみました。

# 前提
動作確認バージョン

“`
python 3.9.5
“`
pythonの環境はpyenv使うなりご自由にどうぞ。
私はpyenvとvenvで構築しました。

# 手順
### 1. dbtのインストール
基本的には公式ドキュメントにそって行うだけですが、1点注意があります。
Athena用のモジュールであるdbt-athenaが `0.20.0` までしか対応していないので、
必ず下記のようにバージョン指定でインストールしてください。
指定せずにインストールすると、`0.21.0` が入ります。

“`zsh
pip install dbt==0.20.0
“`

終わったらバージョンを確認しておきます。
最新じゃないよ!と言われますが、これでOKです。

“`zsh
> dbt –version
installed

元記事を表示

熱海土石流災害を衛星画像と機械学習で解析

2021年7月に起こった熱海での土石流災害を衛星画像と機械学習を用いて分析してみました。

以前、下の記事で京都の土地被覆状況を衛星画像、機械学習とクラスター分析を用いて解析する方法を書いてみましたが、今回はそれを応用してより、実際起こっている環境問題などに取り組んでみました。

https://qiita.com/dg4101/items/2968864714fe72b0d7bf

#衛星画像データのダウンロード
今回の解析では、Sentinel2のデータを使って分析をしてみました。ダウンロードする方法などは、参考文献および注釈にその方法を説明している記事をリンクしましたのでそちらを参考にしてください。

* Sentinel2 : 
* 2021年8月5日 土石気流発生後、晴天で雲が少ない日のデータ
* 2020年8月15日 土石気流発生前と比較するため1年前の同時期の晴天で雲が少ない日のデータ
* 分解能: 10m (10メートル以上のものを見分けることとができます。)
* 解析都市: 熱海近郊
* 使用バンド: 2、3、4、8。10mの分解能のバンドのみを使用

元記事を表示

Pygameでゲームプログラミングを楽しく学び、機械学習のきっかけ作り!

#”初めに”#

今回、Pythonの基礎を覚えたレベルで何か作ってみたいと思ったので、
Pygameで環境構築~ゲームプログラミング完了までを記事にしてみました!

#”そもそもpygameとは?”#

Pythonは文法がシンプルで、一つの実装に多くのコードを記載する必要がなく、
Pythonにはゲームライブラリ用として”pygame”が存在するので簡単にゲームプログラングを自作することが可能です!
あとは、先人の皆さんが残してくれた情報が多いので、ネットで検索して調べれば比較的作りやすいと思います。

###
#1. pygameの環境構築#
〇ツール情報

|必要なツール|Ver情報|詳細|
|:—:|:—:|:—:|
|Python|3.7.4|[Pythonインストール方法](https://techacademy.jp/magazine/15571)|
|pygame|2.0.1|[pygameインストール方法](https://laboratory.kazuuu.net/python-newbie-installs-pygame-via-pip/)|

元記事を表示

pysparkで線形回帰モデルを実行する

#pysparkで線形回帰モデル作成までの一連の流れを実行する
 統計を勉強している人で線形回帰モデルを知らない人はいないと思います。pythonでもscikit-learnなどで簡単にモデリングできます。しかし、仕事などで大規模なデータを扱うとき、pysparkを使って線形回帰モデルを作成したいときもあると思います。私もその一人ですが、ネットで調べてもなかなか情報が少なかったり、英語ばかりで辛かったです。そこで、私が調べた内容を備忘録的にまとめておきます。
 今回は線形回帰モデルを下記のステップに分けて作成・評価しました。

1. モデル作成のための準備
1. 基本統計量の確認
1. データの標準化 OR 正規化
1. 多重共線性の排除
1. モデル作成
1. モデル評価
1. 線形回帰モデルの仮定を満たしているかの確認
1. 残差の分散は均一か?
1. 残差が正規分布にしたがっているか?
1. モデル選択基準
1. AICの計算
1. 汎化性能の計算

各ステップで必要な関数はp

元記事を表示

【Docker】 docker image の大きさを小さくする(その2)

# はじめに

前回はC言語のソースビルドについてdocker image の size を小さくする方法をメモリました。

https://qiita.com/XPT60/items/7ef151371522bd54b438

今回は python についてです。忘れないうちにメモメモします。

# 内容

## 削減方法

docker image を build と実行用に分けるのは同じ考え方です。こちらのサイトで学ばせていただきました。

https://pythonspeed.com/articles/multi-stage-docker-python/

ここで紹介されているのは、

1. pip install –user を使う
–user オプションをつけると、ホームディレクトリの.local に全ての必要なファイルがインストールされる。ので、これをコピーすればよい。

1. virtualenv を使う
virtualenv で使用したディレクトリをコピーし、PATHを通す。

というものです。いずれもビルド用イメージでpip や virtualenv を実行し

元記事を表示

階層クラスター分析(ウォード法)による顧客セグメンテーション

階層クラスター分析(ウォード法)による顧客セグメンテーションを行ったので紹介します。

前置き

私はとある採用選考手法のツールを開発しているスタートアップ企業に所属しています。
今までは社長の紹介経由で数十社にツール導入してもらいましたが、今後はより多くの企業にアプローチしていきたいと計画しています。

とはいえ闇雲に営業活動を行っても無駄打ちが多くなる恐れがあるため、既存顧客や競合他社の顧客データをもとに「どういった属性の企業であればこの採用選考手法を導入しているのか?」を明らかにしたいと考えました。

以上の経緯から今回「階層クラスター分析(ウォード法)による顧客セグメンテーション」を行ってみました。

>実行環境:「Google Collaboratory」

分析の流れ

①データ収集

今回データを収集・分析する企業は以下です。

  • 自社の顧客
  • 競合ツールのサイトにて、企業ロゴや導入インタビュー記事が載っている企業
  • 求人サイトにて、
元記事を表示

PEP8のMaximum Line Lengthいくつにしてます?

# 規約

コーディング規約のPEP8に1行の最大文字数を定めた項目があります。

[原文](https://www.python.org/dev/peps/pep-0008/#maximum-line-length)
[日本語](https://pep8-ja.readthedocs.io/ja/latest/#id9)

> すべての行の長さを、最大79文字までに制限しましょう

と最初に書かれています。

自分もそれに従い、Lintでもデフォになってた79文字でチェックかかるようにしていました。
ただこれを守ろうとして逆に可読性を下げているなぁと感じることが稀にあったので、規約をもういちど読み直しました。

## 調整の幅

> 1行を79文字より長くするのを好むチームもあります。この問題について合意できるチームが独占的に、もしくは重点的にメンテナンスするコードについては、1行> 99文字まで制限を緩めてもOKです。ただし、コメントや docstring については72文字で折り返すようにすることが条件です。

という記載もあります。

## 根拠

もともとの79文字の根拠につ

元記事を表示

camelotで大量のページのPDFをCSV変換

Colaboratoryでcamelotを利用してPDFからCSVに変換していると200ページ超えたあたりからメモリ不足で落ちます

対策として50ページぐらいに分割して変換してから結合

https://www.city.kawasaki.jp/350/page/0000116827.html

川崎市の陽性者一覧のPDFを利用

“`
# ダウンロードURL
!wget https://www.city.kawasaki.jp/350/cmsfiles/contents/0000116/116827/4.pdf -O data.pdf
“`

“`
!apt update
!apt install python3-tk ghostscript
!pip install camelot-py[cv]
“`

“`python
import camelot
import pandas as pd

from tqdm.notebook import tqdm
from more_itertools import chunked

# ページリスト取得
handler = ca

元記事を表示

pythonでグラフを作ろう 第2回 -ファイルからデータを読み込んでプロット-

#はじめに
前回はpython内で生成したデータをプロットしました。しかし、実際は他の何らかの方法により生成されたデータ(例えば実験結果や数値計算結果)をプロットすることが多いです。今回は別のファイルからデータを読み込んでプロットする方法を解説します。

#データ読み込み&プロット
以下のようなデータが与えられているとします。まずは以下のデータを”sin.dat”というファイルに保存してください(空ファイルを生成して以下の内容をコピペすればOKです)。

“`d
-3.1415926535897931 -1.2246467991473532E-016
-2.8274333882308138 -0.30901699437494751
-2.5132741228718345 -0.58778525229247325
-2.1991148575128552 -0.80901699437494745
-1.8849555921538759 -0.95105651629515364

元記事を表示

pandasでcsvのデータ加工

# データ読み込み

“`python
import pandas as pd
path = ‘csvのパス’
df_csv = pd.read_csv(path)
“`

# 不要な列、行の削除

“`python
df_csv = df_csv[[‘必要なカラムを,区切りで記載’]][必要な行指定]
“`

# 任意の要素取得

“`python
df_csv.iloc[4:10, 2:6] #5から10行目、2から5列目を指定
df_csv.loc[5:10, ‘初めの指定からカラム名’:’最後の指定カラム名’] #5から10行目を指定
“`

# 条件抽出

“`python
df_csv[df_csv[‘抽出カラム名’] == ‘抽出条件’]
df_csv[df_csv[‘抽出カラム名’] > 数字]
df_csv[df_csv[‘抽出カラム名’].isin’抽出条件’]
“`

# ユニークな値の抽出

“`python
df_csv[‘カラム名’].unique()
“`

# 重複除去

“`python
df_csv.drop_duplicate

元記事を表示

かまいたちの漫才のあの台詞、構文解析してみた

皆さんはお笑いコンビ「かまいたち」の漫才「UFJ」の中で登場する、かの有名な言い回しをご存知だろうか。
####もし俺が謝ってこられてきてたとしたら、絶対に認められてたと思うか?
これを聞くたび、ぼくは頭が痛くなる。意味を理解しようと動き出す脳は空回りするだけで、結局は意味を捉えることを放棄してしまう。遭遇するたびに今度こそは分かりたいと思いながら毎度挫折する様は、まるで相対論を学ぼうとする学生のようである。
そこで今回、構文解析ツール「CaboCha」に頼らせていただくこととした。
CaboChaをgoogle colaboratory上で動かすにあたって、以下のページが参考になった。

[Google Colab で MeCab と CaboCha を使う最強の方法](https://qiita.com/tomowarkar/items/b6a89145c06956618542)

構文解析を以下のコードにより実行する。

“`python
import CaboCha
cp = CaboCha.Parser()
sentence = ‘もし俺が謝ってこられてきてたとしたら、絶対

元記事を表示

[python 備忘録] 空の配列に他の配列を追加していく方法

# 概要
pythonのnumpy配列, リストを活用して空の配列に他の配列を追加していきます。
最終的には連結されたnumpy配列を取得することが可能です。

# 使用メソッド
・リスト用append[1] :リストにリストを追加
追加されるリスト.append(追加するリスト)
※リストにnumpy配列も追加可能です。

・numpy配列用concatenate[2] :複数のnumpy配列を結合
結合されたnumpy配列 = np.concatenate([結合させたいnumpy配列1,結合させたいnumpy配列2,……])
※np.concatenate内の[結合させたいnumpy配列1,結合させたいnumpy配列2,……]はリスト内に複数の
numpy配列が入っている状態です。

# ソースコード例
“`python
import numpy as np

empty_list = []
np_arr1 = np.array([[1,2],[3,4]])
np_arr2 = np.array([[5,6],[7,8]])

empty_list.append

元記事を表示

WindowsでPythonプログラムへ日本語の引数を引き渡すときの文字化けと対策

## 文字化けの問題
久しぶりWindowsでPythonスクリプトを書くことになりました。セキュリティーの規制でコマンドプロンプトが使えなく、Pythonスクリプトを起動するにはWindowsバッチを使う必要があります。パラメーターとして日本語の文字列を渡すのですが、Pythonプログラム内では(`sys.argv`の中身)文字化けになってしまう事象でした。

“`bat
%echo off
C:\python.exe hogehoge.py “あいうえお”
set /p confirm=”Enter.”
“`

Pythonプログラムで標準出力に書く。

“`Python
# -*- encoding: utf-8 -*-
import sys

def main():
if len(sys.argv) > 1:
print(sys.argv[1])

if __name__ == ‘__main__’:
main()
“`

結果はこうなっています。
![moijbake.png](https://qiita-image-store.s3.

元記事を表示

python基礎構文 腕試し

#問題1
`Hello World を出力してください。`

**回答1**

“`python:回答1
print (“Hello World”)
“`

**解説・補足1**
出力関数Print() を使います。

#おまけ問題1.5 (input 関数)
`任意の2つのAとBが与えられるとする。
(=AとBが入力される)
AとBの積が偶数か奇数か判定してください。
(=偶数の場合Evenと出力し、奇数の場合、Oddと出力する)`

**回答1.5**

“`python:回答2
a=int(input())
b=int(input())
#(別解)a, b = map(int, input().split())

n=(a*b)%2
if n==0:
print(“Even”)
else:
print(“odd”)
“`
**解説・補足1.5**
If文とmap関数を使うとうまくいきます。

if文
if文は条件分岐をおこなうための文法です。
Pythonのif文は、一般的な他のプログ

元記事を表示

東京都の国のステージ判断のための指標のPDFからCSV作成(camelot)

pdfplumber
https://qiita.com/barobaro/items/75d076f4fbe9771a0b3a

Twitterにcamelotだと変換できないと書いてたのでcamelotで作成

latticeだと「process_background=True」で取得はできるが、表になってないので加工が必要 ※めんどくさい

streamで変換

+ camelotの範囲指定しても範囲絞り込めない
+ デフォルトの「edge_tol=50」 だと取り込み範囲が表以外も含まれるため+10してみると「edge_tol=60」表の範囲が取得できた
+ 行間が大きいので「row_tol=40」で調整、10から+10していっただけ
+ 「病床のひっ迫具合」が「入院率」と結合されてしまっているのでPython版は修正

# ダウンロード

“`
!wget https://www.fukushihoken.metro.tokyo.lg.jp/iryo/kansen/corona_portal/info/kunishihyou.files/kuni0824.pdf -O da

元記事を表示

Anaconda インストール後の conda install がエラー (proxy 設定は正しい) → urllib3 1.26 のバグ [2021.8.26]

Anaconda (miniconda) を proxy環境下で 新規ubuntu PCに導入後にハマったのでメモを投稿

proxy設定は何度確認しても正しいのに、なぜか conda install 等の web経由系のコマンドがエラーになる。
結論、原因は Anaconda に含まれる urllib3 というライブラリの不具合でした。
そのため、このパッケージが含まれない、少し古いAnaconda(Miniconda)をまず導入して全体アップデートで解決。

urllib3 の不具合のせいで conda install が使えなくなるので、代わりにまず conda上のpip を用意して
conda上のpipを用いて urllib3 だけをダウングレードさせるのがポイント

[導入手順]
Step 1) ubuntu bash の proxy を正しく設定 (.profile or .bashrc)
Step 2) Anaconda(Miniconda) の少し古い (urllib3 が 1.26より古いもの) を取ってきてインストール
Step 3) Anaconda の prox

元記事を表示

デカルト座標系(Cartesian Coordinate System)あるいは直交座標系(Orthogonal Coordinate System)における基底ベクトルと位置ベクトル

**デカルト座標系**(Cartesian Coordinate System)あるいは**直交座標系**(Orthogonal Coordinate System)における**基底ベクトル**と**位置ベクトル**の設定は以下となります。

#二次元(xy/rθ座標系)の場合
[2次元極座標系の運動方程式](https://physnotes.jp/mechanics/pol2-coordinate-system/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597772/ccf1583f-ac89-6e22-10a8-c225d95b53eb.png)

* xy座標系

“`math
e_x=\begin{pmatrix} 1 \\ 0 \end{pmatrix},e_y=\begin{pmatrix} 0 \\ 1 \end{pmatrix}\\
r=\begin{pmatrix} x \\ y \end{pmatrix

元記事を表示

pythonでExcelを出力するとハイパーリンクが消える問題

#Excelのハイパーリンクが消える
以前から使用していた自家製システムの挙動がおかしくなったのは、一度MACを工場初期化状態に戻して構築し直してから。
下のかんじで、Excel上のURLがハイパーリンクとして認識されない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927744/e456d277-3e00-2f20-1ecc-9a7494aa951a.png)

###自家製システムについて

取得したデータをソートしてExcelに出力するという単純なもの。
フローは以下。

1. 情報の取得してリスト化
2. openyxlでExcelに追記、cell.hyperlinkでハイパーリンクの設定をしている
3. pandasでソート
4. pandasでデプリケートチェックして重複は削除
5. 出力

###環境差分

| | 正常挙動する環境 | 今回の不具合環境 |
|:-:|:-:|:-:|
| OS | macOS Big Sur バージョン不明 | mac

元記事を表示

OTHERカテゴリの最新記事