nprogram’s blog

気ままに、プログラミングのトピックについて書いていきます

janomeで形態素解析する

janomeを使用して、形態素解析します

import os
from janome.tokenizer import Tokenizer

tokenizer = Tokenizer()
tokens = tokenizer.tokenize(u'すもももももももものうち')


for token in tokens:
    print(token.surface)
すもも
も
もも
も
もも
の
うち

参考サイト

python で形態素解析。Janome が簡単。pip 一発でインストール | コード7区

Python, Janomeで日本語の形態素解析、分かち書き(単語分割) | note.nkmk.me

VSCodeでAnaconda Prompt環境を構築する [Windows]

はじめに

VSCodeでAnaconda Prompt環境を構築する方法について記載します

Visual Studio Code のターミナルから Anaconda Prompt をオープンする

まずはAnaconda Promptのパスを取得します。Windowsの検索画面から、ファイルの場所を開き、

f:id:nprogram:20200421133222p:plain
Windowsの検索画面からAnaconda Promptの場所を取得する

次に、Anaconda Prompt (Anaconda3)のショートカットのプロパティを開き、リンク先を取得します。

f:id:nprogram:20200421133402p:plain
パスを取得する

Windowsの検索画面から VSCodeからファイル→基本設定→設定を選択して、設定画面を開きます。

Terminal>Integrated>Shell: Windowsの項目のsetttings.jsonを開きます。 以下のような情報が開かれるので、 terminal.integrated.shell.windowsを書き換え、 terminal.integrated.shellArgs.windowsを追加します。ここには、リンク先の第一引数、第二引数、第三引数を設定してください。私の例では以下のようになります。

{
    "window.zoomLevel": 1,
    "explorer.confirmDelete": false,
    "python.terminal.activateEnvInCurrentTerminal": true,
    "terminal.integrated.shell.windows": "C:\\Windows\\System32\\cmd.exe",
    "terminal.integrated.shellArgs.windows": [
        "/K"
        , "D:\\Anaconda3\\Scripts\\activate.bat"
        , "D:\\Anaconda3"
    ]
}

VSCodeを再起動後、where pythonコマンドを入力してください。Pythonのパスが表示されれば問題ありません。

(base) C:\Users\user>where python
D:\Anaconda3\python.exe

以下のサイトを参考にしました。 Visual Studio Code のターミナルから Anaconda Prompt を開くようにする (Windows) - Qiita

VS CodeからAnacondaで作成した仮想環境を参照する

以下のリンクに記載があります。

[Windows]「Anaconda」で作った仮想環境を「Visual Studio Code」から参照してみる。 - Qiita

Pythonの正規表現について

Python正規表現

正規表現を使うと文字列を素早く取得できます。

以下のサイトがとても参考になります。

書きながら覚える!Pythonで正規表現を使う方法【初心者向け】 | TechAcademyマガジン

使用例

import os
import re

def can_extract_date_YYYY_MM_DD(s):
    date_pattern = re.compile('^(\d{4})/(\d{1,2})/(\d{1,2})$')
    result = date_pattern.search(s)
    if result:
        y, m, d = result.groups()
        return True
    else:
        return False

print(f'{can_extract_date_YYYY_MM_DD("2000/01/01")}')
print(f'{can_extract_date_YYYY_MM_DD("2000/01/01/01")}')
True
False

Python enum学習

はじめに

Pythonで定数を安全に使いたいなと思い、enumについてまとめました。詳しくは以下をご確認ください

enum --- 列挙型のサポート — Python 3.8.2 ドキュメント

Enum の作成

列挙型は読み書きが容易になるよう class 文を使って作成します。 列挙型は以下のように Enum のサブクラスとして定義します。

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

列挙型の値を取り出す場合はvalueプロパティを使用します

print(Color.RED.value)
print(Color.GREEN.value)
print(Color.BLUE.value)
1
2
3

列挙型のメンバーは人が読める文字列表現を持ちます:

print(Color.RED)
print(Color.GREEN)
print(Color.BLUE)

print(Color.RED.name)
print(Color.GREEN.name)
print(Color.BLUE.name)
Color.RED
Color.GREEN
Color.BLUE
RED
GREEN
BLUE

列挙型は定義順でのイテレーションをサポートしています

for item in Color:
    print(item.value)
1
2
3

辞書型に格納できます

colors_set = {}
colors_set[Color.RED] = 'apples'
colors_set[Color.GREEN] = 'mountain'
colors_set[Color.BLUE] = 'ocean'

for key, value in colors_set.items():
    print(f'{key.name} : {value}')
RED : apples
GREEN : mountain
BLUE : ocean

比較

等価の比較は定義されています:

print(Color.BLUE == Color.RED)
print(Color.BLUE != Color.RED)
print(Color.BLUE == Color.BLUE)

# ただし、非列挙型値との比較は常に不等となります
print(Color.RED == 1)
False
True
True
False

Django学習まとめ (2020)

概要

Django学習まとめ記事です。

サイト

素晴らしい公式ドキュメントがあります。

Viewの種類

  • function Based View
  • class Based View

BASE_DIR

BASE_DIRのデフォルト値は以下のとおりです。

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

BASE_DIRとはsetting.pyが入っているフォルダーの1個上の階層のフォルダーを指定します - manage.pyが入っているフォルダーを指定

  • os.path.abspath(path) : パス名 path の正規化された絶対パスを返します
  • `os.path.dirname(path) : パス名 path のディレクトリ名を返します。これは関数 split() に path を渡した時に返されるペアの 1 番めの要素です。

Python ロギング学習

はじめに

Pythonのロギングについて情報します。

コード

from logging import basicConfig, getLogger, DEBUG

# これはメインのファイルにのみ書く
basicConfig(level=DEBUG)

# これはすべてのファイルに書く
logger = getLogger(__name__)

logger.debug('hello')

参考リンク

Beautiful Soupを用いたスクレイピングまとめ

はじめに

Beautiful Soup使い方についてまとめる記事です。

概要

Pythonスクレイピングで使用されるライブラリは以下が主に以下があります。

役割や長所・短所は以下のようになります。

データの取得 データの抽出 特徴
Beautiful Soup データの抽出が高速かつ簡潔だが、動的ページのスクレイピングが弱い
Requests
Selenium 動的ページのスクレイピングに強いが、データの抽出が低速かつ複雑

BeautifulSoupライブラリを用いてスクレイピング

BeautifulSoupライブラリを用いて、スクレイピングする場合は、以下の2つのライブラリのインストールが必要です。

BeautifulSoupライブラリのインストール

以下のどちらかの方法でインストール可能です。

  • pip installコマンドを使用

    • pip install beautifulsoup4
  • conda installコマンドを使用

    • conda install beautifulsoup4

Requestsライブラリのインストール

  • pip installコマンドを使用

    • pip install requests
  • conda installコマンドを使用

    • conda install requests

株価の取得

以下のサイトhttp://www.nikkei.com/markets/kabu/から日経平均株価を取得します。

タブの文字列はタグ名.textあるいはタグ名.stringどちらか使用できます。詳しくは以下のサイトを見てください。

import urllib.request
from bs4 import BeautifulSoup

url =  "http://www.nikkei.com/markets/kabu/"

html = urllib.request.urlopen(url)

soup = BeautifulSoup(html,"html.parser")

span = soup.find(class_="mkc-stock_prices")

print(span)
print(f"span.text = {span.text}")
print(f"span.string = {span.string }")
<span class="mkc-stock_prices">23,386.74</span>
span.string = 23,386.74
span.text = 23,386.74

参考リンク

まず、以下のページがとてもわかりやすいです。