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

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

pyenvによるPythonバージョン切り替え(Mac OS)

MacでのPythonバージョン切り替えに手間取ってしまったためメモ
VScodeでのPythonライブラリがうまく参照できていなかった

結論:
`eval “$(pyenv init –path)”`
で無事
/Users/〇〇/.pyenv/shims/python
を参照でき最新バージョンに更新完了

元記事を表示

【Project Euler】P243 Resilienceの感想

### レジリエンス
Project Eulerの問題にチャレンジした感想等を投稿してます。今回の問題は
➞ [Project Euler P243: Resilience](https://projecteuler.net/problem=243)

>分母がdの真分数のうち既約分数の割合[これをResilience(反発力?)と呼ぶ]をR(d)としたときR(d) < 15499/94744 となる最小のdを求めよ。 というものです。若干英語が分かりづらいですが問題そのものはシンプル。ところでこの「レジリエンス」という言葉現在開催中のパラリンピックの放送で結構耳にします。「折れない心」という意味だそうですが、この問題では既約分数が多い分母をレジリエンスが高いと呼んでいるようです。 [**今を切り開く力 ―パラアスリートがもつレジリエンス**](https://sports.nhk.or.jp/paralympic/article/reporter/20210502-goto/) ### オイラーのφ関数 既約分数になるということは分子は分母と互いに素になる必要があるので、その

元記事を表示

SPSS Modelerの拡張ノードでPythonを利用する記事へのリンク

SPSS Modelerの拡張ノードでPythonを利用する記事のリンクをまとめました。

|概要|記事|説明|ノード|
|—|—|—|—|
|Python導入(pip)、グラフ出力|SPSS Modelerの拡張ノードでPythonを利用する ①セットアップと可視化 –
https://qiita.com/1000aki/items/72c3c9ea0fe00edd6d19|①Python(pipベース)を導入して、Modelerから使えるようにしています。
②グラフ表示|出力|
|Python導入(conda)|SPSS Modelerの拡張ノードでPythonを利用する conda編 –
https://qiita.com/kawada2017/items/04f525727725d199723c|PythonをAnacondaで導入して、Modelerから使えるようにしています。|NA|
|ランダムフォレスト(Mllib)|SPSS Modelerの拡張ノードでPythonを利用する ②Spark MLlibを利用したモデル作成 – <

元記事を表示

記事の情報抽出

OpenIEなどによって知識グラフを自動構築したい場合に、たくさんの生テキストが欲しいかもしれません。この場合、記事タイプのWebコンテンツは比較的多くの情報を持っています。”domextract”はweb記事からコンテンツのみを抽出する目的のためのツールです。sugiyamath/domextract

https://sugiyamath.github.io/2021/07/15/domextract.html

# 特徴量設計
特徴は各DOMの要素のxpathとテキストから抽出を試みました。例えば、xpathの最下層のタグをonehot特徴量として考慮できます。domextractはdomextract/fe_domで特徴量設計しています。

テキスト要素を正しく並べるために、HTMLルートから深さ

元記事を表示

textstatを使用したreadabilityの計算

# はじめに

先日、kaggleの[**CommonLit Readability Prize**](https://www.kaggle.com/c/commonlitreadabilityprize)というコンペに参加しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189978/b82ac18f-ce0b-d0fe-13cc-65bc0e23dbe0.png)

このコンペの目的は、
>*アメリカの教育現場における、3年生から12年生のクラスで使用する読み物の複雑さを評価するアルゴリズムを構築すること*

というものでした。

現状の課題は以下のように説明されていました(DescriptionをDeepLで翻訳)。
>*現在、ほとんどの教育用テキストは、伝統的な読みやすさの方法や市販の計算式を使って読者に合わせています。しかし、それぞれに問題があります。Flesch-Kincaid Grade Levelのようなツールは、テキストのデコーディング(単語あたりの文字数や音

元記事を表示

BeautifulSoupでドメイン内リンクを列挙する。

#実行環境
・macOS High Sierra 10.13.6
・Python 3.8
・**urllib3** 1.26.4
・**beautifulsoup4** 4.9.3
・エディタ Atom
 ・AtomはデフォルトでPythonの実行をサポートしていないので、必要なパッケージをダウンロードする必要がある

#はじめに
:::note alert
クローリングしようとしているサイトが、クローリングを許可しているか、禁止しているかについては十分な注意を払うべきである。
:::

あなたは、自社のWebサイトに使用している写真をすべて改めるよう上司の指示を受け、とりあえずのところは、自社Webサイトのリンクをいくつも辿ってドメイン内を東奔西走し、どんな写真が使われていて、あるいは複数のページに重複して使用されている写真がどれだけあって、それぞれ何度使用されているか数えなければならなくなった。
その判断が正しいとして写真のチェックミスがないように、まずは**ドメイン内のすべてのページをもれなく列挙しよう!** と思い立った。

URLを直打ちしないとローマ経由でも辿り着けないよう

元記事を表示

音楽推薦のためのセレンディピティ

セレンディピティとは、偶然良いものを発見することです。推薦システムでは”beyond accuracy”として(つまり関連性以外の指標として)使われることがあります。

似たような音楽ばかり聴いていると退屈になってくるので、「聴いたことのない斬新な音楽」を発見できたらいいのにな、と思うことがあります。今回は音楽推薦にセレンディピティを適用して検証します。

https://sugiyamath.github.io/2021/08/27/serendipity_music.html

# jupyter notebookで実行

まず、Last.fmデータセットをダウンロードします。

In[1]:

“`bash
!wget http://mtg.upf.edu/static/datasets/last.fm/lastfm-dataset-360K.tar.gz
!mv lastfm-dataset-360K.tar.gz lastfm_data; cd lastfm_data; tar xzvf lastfm-dataset-360K.tar.gz
!head ./lastfm_d

元記事を表示

PyQt/PySide/Qt Designer用のダークテーマを作ったのでその紹介

# はじめに

PyQt、PySide(QtWidgets)でダークテーマを使いたい場合、標準ではサポートしていないので自分で作成するか外部ライブラリを利用する必要があります。
自分で作成するのはかなり面倒なので大抵は外部のライブラリに頼ることになると思います。
よく利用されている外部ライブラリは[QDarkStyleSheet](https://github.com/ColinDuquesnoy/QDarkStyleSheet)と[BreezeStyleSheets](https://github.com/Alexhuszagh/BreezeStyleSheets)の二つで、どちらもデザインの完成度は高いのですがいくつか問題点があります。どちらもQt Designerで利用するのに少し工夫が必要で面倒ですし、QDarkStyleSheetでは去年リリースされたQt6が使えず、BreezeStyleSheetsは自分でビルドする必要があります。

そこで上記二つのライブラリを参考にQt6やQt Designerでも簡単にダークテーマが利用でき、比較的モダンなデザインになるようなライブラ

元記事を表示

言語処理100本ノック(2020)-60: 単語ベクトルの読み込みと表示

[言語処理100本ノック 2020 (Rev2)](https://nlp100.github.io/ja/)の[「第7章: 単語ベクトル」](https://nlp100.github.io/ja/ch07.html)の[60本目「単語ベクトルの読み込みと表示」](https://nlp100.github.io/ja/ch07.html#60-%E5%8D%98%E8%AA%9E%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%A8%E8%A1%A8%E7%A4%BA)記録です。
多分[「第7章: 単語ベクトル」](https://nlp100.github.io/ja/ch07.html)は61以降をやりませんが、[「第8章: ニューラルネット」](https://nlp100.github.io/ja/ch08.html)をやりたかったため、前提となるこのノックに取り組みました。
7章の準備運動的内容ですし、Rev2015と異なり`Gensim`使ってい

元記事を表示

今からDiscordのBotをPythonで作るなら dislash.py でスラッシュコマンドに対応させる

**DiscordのBotをPythonでいじってみるか、と思い立ったわずか数時間前に主要なライブラリである `discord.py` の開発終了が発表されていた**ので泣いています。なんというタイミングなのでしょうか。

この件に関しての説明は、この記事が詳しいです。

https://note.com/grapecolor/n/nb16071ae81bf

とりあえず、即座に `discord.py` を使った開発ができなくなるというわけではないものの、これを使い続けることにはセキュリティ的なことを始めとして様々な懸念があることは、想像に難くありません。

## スラッシュコマンドへの対応が必須

その懸念の中でも、この記事で話題にするのが**スラッシュコマンド**です。

上記記事を読むと、

>Discordは2022年4月以降、メッセージの内容を読み取る権限を、基本的にはBOTから奪う方針を打ち出しており、以降はスラッシュコマンドを介したコマンド操作のみで対応する必要があります。

とある通り、今後Botを新しく作成するのであれば**スラッシュコマンドをユーザーから受け取る*

元記事を表示

URLで全国制覇をしたかった… Part2

### 結果
![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1615772/31337bf4-ae6b-46a5-08ea-49b02a79f8e9.gif)

### コード
“`python
import requests
from bs4 import BeautifulSoup
import socket
from urllib.parse import urlparse
import geoip2.database
import pandas as pd
from urllib.parse import urlparse
import matplotlib.pyplot as plt
from japanmap import picture

def links(url):
try:
html = requests.get(url)
soup = BeautifulSoup(html.content, “html.parser”)

元記事を表示

輸出統計のデータ加工

from dash_url.customs2 import trade_stat_set_for_hs_code2
import pandas as pd
from glob import glob

PATH=r”C:\Users\….\customs\ik-300h*.csv”

hs_code=str(hs_code)
paths=glob(PATH)
path=paths[0]

df=pd.read_csv(path)
months=[s.replace(‘Value-‘,”) for s in
df.columns[df.columns.str.contains(‘Value-‘)]]
months=[s for s in months if s!=’Year’ ]

li=[s for s in df.columns]
value_start_from=li.index(‘Quantity1-Year’)

month=months[0]
line[line.index.str.contains(month)]+df.iloc[0,:value_st

元記事を表示

Qiitaの類似記事を見つける(TF-IDF+コサイン類似度)

# 概要
Qiitaの記事に類似する他の記事を検索するプログラムを作成します。
Qiita APIから記事を取得し、TF-IDFとコサイン類似度を用いて、指定された記事との類似度を計算し、類似している記事を表示します。

※ 本記事は、個人の趣味の記事です。自然言語処理やデータ分析の素人なので、多少の間違いはご容赦ください。

# 流れ
1. Qiita APIを使って、検索対象となる記事群を取得します。
1. MeCabを使って、記事の本文を分かち書きします。その結果は、SQLiteのDBに保存します。
1. Qitta APIを使って、同様に、類似記事を探したい記事を取得し、MeCabを使って、分かち書きをします。
1. scikit-learnを利用して、それぞれの記事のTF-IDFとコサイン類似度を計算し、類似度の大きな記事を表示します。

# 利用しているもの
本記事では、以下の手法やライブラリ、サービスを利用しています。
– [TF-IDF](https://qiita.com/tags/tf-idf)
– [scikit-learn](https://qiita.com/

元記事を表示

URLで全国制覇をしたかった… Part1

# データセンターのロケーションだけで日本全国制覇を目指す!!

※ごり押し

### 流れ
1. URLをfor文で回して、そのサイトのソースの中にあるリンクからホスト名を取得
1. ipアドレスを取得
1. ipアドレスから県名を取得
1. 日本地図の色塗り

Part1では3までやる

### ライブラリ
“`python
import requests
from bs4 import BeautifulSoup
import socket
from urllib.parse import urlparse
import geoip2.database
import pandas as pd
“`

### ディレクトリ構造
“`text
├ data/
│ ├ answers.txt
│ ├ colors.txt
│ └ GeoLite2-City.mmdb
└ main.py
“`

– answers.txtには県の公式ホームページとかのURLを書く
– colors.txtには16進数のコードを47個書く
– GeoLite2-City.m

元記事を表示

Audacity Script – DTMプログラミング言語探訪

[DTMプログラミング言語探訪](https://qiita.com/aike@github/items/77b3eccc6861de09513a)

# Audacity Script

## 概要

波形編集ソフトを使う作業は定型的な操作が多いため、多くのソフトは手順を自動化するためのバッチ機能を搭載しています。また、そのうちいくつかのソフトはテキスト言語でバッチ処理を書くスクリプト機能を持っています。
Audacityもバッチ処理とスクリプトの両方を持っているので手順を説明します。[^1]
[^1]: Audacityがライセンスとユーザープライバシー保護問題でもめた結果、フォークされた[tenacity](https://github.com/tenacityteam/tenacity)が生まれましたが、こちらのスクリプト機能対応状況は未確認です。

## 用途

– 定型的手順の自動化
– 複数ファイルの一括処理

## バッチ処理

本題ではありませんが、スクリプトを使わないバッチ処理の手順も比較のために説明しておきます。

### バッチジョブ作成

Audacityのバ

元記事を表示

グラフレイアウトの操作について(備忘録)

Pythonを使ったデータ可視化時のレイアウトについての備忘録です。

コード実行の際には下記ライブラリを事前にインポート

“`
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
“`

# figureとaxes
グラフ描画領域の概念として、**figure**と**axes**がある。
**figure**は、イメージとしては大きな画用紙(描画領域全体)
**axes**は、画用紙の中に描かれたグラフ描画領域
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1235367/3547d3fa-dde8-a0aa-f594-dc0686653520.png)

# figureの作成
matplotlib.pyplot.figure関数で作成する。

“`
# figureの作成
plt.figure(figsize=(5,10))
“`

元記事を表示

python-pptxの図形一覧

# python-pptxの図形を調べてみた。
python-pptxはPowerPointをPythonでかけるライブラリです。
あまりにも画像の数が多かったり、毎回似たような表を作成しなければならないとき、自動化ツールとして活用できます。

そのため、画像挿入や表挿入、グラフ挿入に関する記事は調べればそれなりの数が出てきます。

しかし、図形の挿入となると記事はかなり少なくなるようです。

今回はpython-pptxで簡単な図形追加をまとめました。182種類の図形が追加できるようなのですが、そのうち約170個ほどを実際に出力してみています。

ちなみに、図形の細かい調整までは労力が大きすぎるので控えました。別の機会に調べてまとめたいと思います。

#図形の追加の仕方
python-pptxの図形はshapes.add_shapeメソッドで追加できます。
引数は“`add_shape(MSO_SHAPE.xxx, left, top, width, height)“`です。
このうちの“`xxx“`の部分に何を入れるかで挿入される図形が変わります。
例えば、直線を引く場合は

元記事を表示

CSVを読み込んで,”,”で分割するコード

読み込んだcsv[^1]が次のようなものだった:

“`
基準日,基準価額(円),純資産総額(億円),分配金税引前(円)
0 2002年4月2日,81084,32.4,-
1 2002年4月3日,82157,32.9,-
2 2002年4月4日,82456,33.0,-
3 2002年4月5日,81347,32.5,-
4 2002年4月8日,81880,32.8,-
… …
4763 2021年8月23日,89354,18.9,-
4764 2021年8月24日,90156,19.1,-
4765 2021年8月25日,90248,19.1,-
4766 2021年8月26日,89937,19.1,-
4767 2021年8月27日,89544,19.0,-
“`
1つのcolumnに日付,基準価額等のデータが入っ

元記事を表示

異常検知手法 Isolation Forestの解説、スクラッチでの実装

# Isolation Forestとは
異常検知に用いられる手法の一つです。
名前からお察しの通り、Isolation ForestはRandom Forestと同様に決定木に基づいて構築されます。
決定木を各データが孤立するまで分割を繰り返し、**データが孤立するまでの距離(深さ)から異常値を推定しよう**、というのが基本的なアイディアです(Isolate=孤立)。全データを使って決定木を一つだけ作成すると過学習してしまうので、データをサンプリングした上で、大量の決定木を作成し、作成した決定木の各データが孤立するまでの距離の平均を使用して異常値スコアを算出します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/989042/cfece35a-7e8e-1a29-b321-e016ecf1664b.png)

なお、分割する際の閾値は変数の最大/最小値の範囲からランダムに選択されますが(普通の決定木は情報利得により閾値を決定)、この手順により異常値は早く孤立することが直感的に理解

元記事を表示

Python仮想環境

## TL;DR

Pythonでは、Dockerなどを用いることなく簡単に仮想環境を構築することができます。
### 仮想環境のメリット
– 仮想環境構築が簡単
– PC上にライブラリをインストールしなくていいので無駄にハードディスク内を汚さなくて済む。
– 仕様ライブラリを一括インストールできるので複数人での開発で便利

導入しない理由がない導入しましょう!

## 仮想環境
### 仮想環境作成

プロジェクト作成時に行うこと。

“`sh
$ python -m venv [フォルダ名]
$ python -m venv .venv
“`

.venvというフォルダができたかと思います。
ここにライブラリをインストールしていくことになります。
プロジェクトで一度作れば次回からはこのコマンドは必要なし。

### 仮想環境に入る

“`sh
Windows
$ source .venv/Scripts/Activate
Mac
$ source .venv/bin/activate
“`
シェルに(.venv)と表示されていれば仮想環境内に入っている状態です。
zshの

元記事を表示

OTHERカテゴリの最新記事