2025年2月 9日 (日)

[Python]NLTKのパッケージをダウンロードする

nltkモジュールのdownloadメソッドを使う。

>>> import nltk
>>> nltk.download()
showing info https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml

次のウィンドウが開く。

Python_nltk_downloader1

「Collections」タブの「Identifier」の「all」をクリックして選択し、左下の「Download」ボタンをクリックすると、ダウンロードが始まる。数分待つとダウンロードが完了して次のようになるはず。

Python_nltk_downloader2

ウィンドウを終了すると、コンソール画面は以下のようになるはず。

True

試しに使ってみる。

>>> from nltk.book import *
*** Introductory Examples for the NLTK Book ***
Loading text1, ..., text9 and sent1, ..., sent9
Type the name of the text or sentence to view it.
Type: 'texts()' or 'sents()' to list the materials.
text1: Moby Dick by Herman Melville 1851
text2: Sense and Sensibility by Jane Austen 1811
text3: The Book of Genesis
text4: Inaugural Address Corpus
text5: Chat Corpus
text6: Monty Python and the Holy Grail
text7: Wall Street Journal
text8: Personals Corpus
text9: The Man Who Was Thursday by G . K . Chesterton 1908

text1やtext2がサンプルデータ。

>>> len(text1)
260819
>>> text1[0]
'['
>>> text1[1]
'Moby'
>>> text1[0:7]
['[', 'Moby', 'Dick', 'by', 'Herman', 'Melville', '1851'

2025年2月 8日 (土)

[Python]エラーメッセージ「UnicodeDecodeError: 'cp932' codec can't decode byte 0x○ in position ○: illegal multibyte sequence」

Windowsの対話型実行環境で、あらかじめ作成したスクリプトを読み込んで実行しようとして、このようなエラーメッセージができることがある。これは、ファイルの文字コードを正しく指定していないことが原因。Windows版はShift_JISであることを前提に動作しているため、UTF-8で保存されたファイルとそのまま読み込もうとすると、このエラーメッセージが表示される。

以下は、以下の2行からなるスクリプトを作成してShift_JISでprintsjis.py、UTF-8でprintutf-8.pyとして保存しておく。

print('セナディア役の鈴木みのりさん、かわいい。')
print('リフ役の瀬戸麻沙美さん、かわいい。')

対話型実行環境を起動し、それぞれのスクリプトを読み込んで実行する。ファイルの文字コードを指定しないとShift_JISとして読み込むため、encodingオプションを使用して文字コードを指定して読み込んでいる。

>python
Python 3.11.7 | packaged by Anaconda, Inc. | (main, Dec 15 2023, 18:05:47) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exec(open('printsjis.py').read())
セナディア役の鈴木みのりさん、かわいい。
リフ役の瀬戸麻沙美さん、かわいい。
>>> exec(open('printutf-8.py').read())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'cp932' codec can't decode byte 0x○ in position ○: illegal multibyte sequence
>>> exec(open('printutf-8.py', encoding = 'UTF-8').read())
セナディア役の鈴木みのりさん、かわいい。
リフ役の瀬戸麻沙美さん、かわいい。

2025年2月 7日 (金)

[Python]対話型実行環境でバージョンを確認する

sysモジュールを利用する

>>> import sys
>>> print(sys.version)
3.9.16 (main, Mar 8 2023, 10:39:24) [MSC v.1916 64 bit (AMD64)

 

2025年2月 6日 (木)

[Python]コマンドラインでバージョンを確認する

-Vオプションを使う。-VVとすると(when given twice, print more information about the build)、より詳細な情報を表示する。

>python -V
Python 3.9.16
>python -VV
Python 3.9.16 (main, Mar 8 2023, 10:39:24) [MSC v.1916 64 bit (AMD64)]

2025年2月 5日 (水)

[Python]バイト列リテラルからbytes型変数を作成する

文字列リテラルの前に接頭辞bを付ければよい。ただし、接頭辞bでは日本語を服もバイト列リテラルを作成できない。bytes関数を使うことであらゆる文字からなるバイト列文字列を作成することができる。ただし文字コードを指定する必要がある。

バイト列リテラルはprint関数の出力では、接頭辞bが付く。最後の例のとおりにバイト列を文字列に変換する場合はdecodeメソッドを使う。

>>> s = 'Watada Misaki'
>>> by = b'Watada Misaki'
>>> print(s)
Watada Misaki
>>> print(by)
b'Watada Misaki'
>>> s = '和多田美咲'
>>> by = bytes('和多田美咲', 'utf-8')
>>> print(s)
和多田美咲
>>> print(by)
b'\xe5\x92\x8c\xe5\xa4\x9a\xe7\x94\xb0\xe7\xbe\x8e\xe5\x92\xb2'
>>> by = bytes('和多田美咲', 'Shift_JIS')
>>> print(by)
b'\x98a\x91\xbd\x93c\x94\xfc\x8d\xe7'
>>> print(by.decode('Shift_JIS'))
和多田美咲

2025年2月 3日 (月)

[Python]文字列のハッシュ値を得る

hashlibモジュールの関数を使う。関数はハッシュオブジェクトというハッシュ値を格納したオブジェクトを返すので、関数を指定して戻り値を決める。

>>> import hashlib
>>> s = "鈴木みのり"
>>> md5 = hashlib.md5(s.encode()).hexdigest()
>>> print(md5)
2cdcdf384125ac19c173e9517b23847b
>>> sha1 = hashlib.sha1(s.encode()).hexdigest()
>>> print(sha1)
728d6a009b1700f9759ed2b502a0f673820700d5
>>> sha256 = hashlib.sha256(s.encode()).hexdigest()
>>> print(sha256)
4a806bf1e967f0764841aabcb3e634316f4b19be1dc9244480cd2c26c315db2b

2025年2月 2日 (日)

[R]画像の大きさを変える

magickパッケージのimage_resize関数を使う。元の画像をmagick-image型で用意して、この関数に当てはめればよい。

以下は、声優瀬戸麻沙美の公式ウェブサイトのページから画像ファイルをダウンロードしてパソコン内に保存し、その画像の大きさを変えた例。アップロードされているオリジナルの画像(横660ピクセル、縦906ピクセル)を縦横50%ずつ縮めている。~1.pngがオリジナル、~2.pngが縦横50%に縮めた画像。

> library(magick)
> im <- image_read("https://www.starcrew.co.jp/wp-content/uploads/2022/11/TALENT02.jpg")
> print(im)
format width height colorspace matte filesize density
1 JPEG 660 906 sRGB FALSE 260047 72x72
> image_write(im, "R_magick_SetoAsami1.png")
> im <- image_resize(im, geometry = "50%")
> print(im)
format width height colorspace matte filesize density
1 JPEG 330 453 sRGB FALSE 0 72x72
> image_write(im, "R_magick_SetoAsami2.png")

R_magick_setoasami1R_magick_setoasami2

左:R_magick_SetoAsami1.png、右:R_magick_SetoAsami2.png

2025年1月30日 (木)

[R]画像の大きさを変える

magickパッケージのimage_resize関数を使う。元の画像をmagick-image型で用意して、この関数に当てはめればよい。

以下は、声優安野希世乃の公式ウェブサイトのページから画像ファイルをダウンロードしてパソコン内に保存し、その画像の大きさを変えた例。見てのとおりアップロードされているオリジナルの画像は非常に大きい(横3422ピクセル、縦5192ピクセル)ため、それぞれ10%ずつ縮めている。~1.pngがオリジナル、~2.pngが縦横10%に縮めた画像。

> library(magick)
> im <- image_read("https://img.imageimg.net/artist/kiyono-yasuno/img/profile.jpg")
> print(im)
format width height colorspace matte filesize density
1 JPEG 3422 5192 sRGB FALSE 1103106 350x350
> image_write(im, "R_magick_YasunoKiyono1.png")
> im <- image_resize(im, geometry = "10%")
> print(im)
format width height colorspace matte filesize density
1 JPEG 342 519 sRGB FALSE 0 350x350
> image_write(im, "R_magick_YasunoKiyono2.png")
R_magick_yasunokiyono1 R_magick_yasunokiyono2
R_magick_YasunoKiyono1.png R_magick_YasunoKiyono2.png

 

2025年1月29日 (水)

[R]Apacheのログファイルの日付列から日付時刻型ベクトルを作成する

tidyverseパッケージを読み込むと読み込まれるlubridateパッケージのparse_date_time関数を使う。以下は15行からなるサンプルのApacheのログファイルを読み込み、日付列(4列目)を日付時刻型ベクトルに変換した例。

> library(tidyverse)
> options(readr.show_progress = FALSE, readr.show_col_types = FALSE)
> tib <- read_log("access.log")
> dim(tib)
[1] 15 9
> tib[, 1:6] |> as.data.frame()
X1 X2 X3 X4 X5 X6
1 192.168.12.2 NA NA 06/Dec/2024:23:51:07 +0900 GET / HTTP/1.1 200
2 192.168.12.2 NA NA 06/Dec/2024:23:51:07 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
3 192.168.12.2 NA NA 06/Dec/2024:23:51:07 +0900 GET /favicon.ico HTTP/1.1 404
4 192.168.12.4 NA NA 06/Dec/2024:23:53:49 +0900 GET / HTTP/1.1 200
5 192.168.12.4 NA NA 06/Dec/2024:23:53:49 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
6 192.168.12.4 NA NA 06/Dec/2024:23:53:49 +0900 GET /favicon.ico HTTP/1.1 404
7 192.168.12.4 NA NA 06/Dec/2024:23:54:23 +0900 GET / HTTP/1.1 200
8 192.168.12.4 NA NA 06/Dec/2024:23:54:23 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
9 192.168.12.4 NA NA 06/Dec/2024:23:54:23 +0900 GET /favicon.ico HTTP/1.1 404
10 192.168.12.4 NA NA 06/Dec/2024:23:55:14 +0900 408
11 192.168.12.4 NA NA 06/Dec/2024:23:56:56 +0900 GET / HTTP/1.1 200
12 192.168.12.4 NA NA 06/Dec/2024:23:56:56 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
13 192.168.12.4 NA NA 06/Dec/2024:23:56:56 +0900 GET /favicon.ico HTTP/1.1 404
14 192.168.12.4 NA NA 06/Dec/2024:23:57:04 +0900 GET / HTTP/1.1 200
15 192.168.12.4 NA NA 06/Dec/2024:23:57:55 +0900 408
> Sys.timezone()
[1] "Asia/Tokyo"
> parse_date_time(tib$X4, "%d/%m/%Y:%H:%M:%S %z")
[1] "2024-12-06 14:51:07 UTC" "2024-12-06 14:51:07 UTC" "2024-12-06 14:51:07 UTC"
[4] "2024-12-06 14:53:49 UTC" "2024-12-06 14:53:49 UTC" "2024-12-06 14:53:49 UTC"
[7] "2024-12-06 14:54:23 UTC" "2024-12-06 14:54:23 UTC" "2024-12-06 14:54:23 UTC"
[10] "2024-12-06 14:55:14 UTC" "2024-12-06 14:56:56 UTC" "2024-12-06 14:56:56 UTC"
[13] "2024-12-06 14:56:56 UTC" "2024-12-06 14:57:04 UTC" "2024-12-06 14:57:55 UTC"
> parse_date_time(tib$X4, "%d/%m/%Y:%H:%M:%S %z", tz = "Asia/Tokyo")
Date in ISO8601 format; converting timezone from UTC to "Asia/Tokyo".
[1] "2024-12-06 23:51:07 JST" "2024-12-06 23:51:07 JST" "2024-12-06 23:51:07 JST"
[4] "2024-12-06 23:53:49 JST" "2024-12-06 23:53:49 JST" "2024-12-06 23:53:49 JST"
[7] "2024-12-06 23:54:23 JST" "2024-12-06 23:54:23 JST" "2024-12-06 23:54:23 JST"
[10] "2024-12-06 23:55:14 JST" "2024-12-06 23:56:56 JST" "2024-12-06 23:56:56 JST"
[13] "2024-12-06 23:56:56 JST" "2024-12-06 23:57:04 JST" "2024-12-06 23:57:55 JST"
> dttm <- parse_date_time(tib$X4, "%d/%m/%Y:%H:%M:%S %z", tz = "Asia/Tokyo")
Date in ISO8601 format; converting timezone from UTC to "Asia/Tokyo".
> class(dttm)
[1] "POSIXct" "POSIXt"

上記のとおりparse_date_time関数は読み込んだ日付時刻を強制的にUTCと判断して変換する。そのため、読み込む際には明示的にタイムゾーンを指定する必要がある。変換された日付時刻型ベクトルのクラスはPOSIXctである。

2025年1月28日 (火)

[R]Apacheのログファイルを読み込む

tidyverseパッケージを読み込んで、read_log関数を使うと簡単にtibbleにすることができる。以下、例。

以下15行からなるサンプルのログファイル(access.log)をカレントディレクトリに置く。

192.168.12.2 - - [06/Dec/2024:23:51:07 +0900] "GET / HTTP/1.1" 200 3460 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.12.2 - - [06/Dec/2024:23:51:07 +0900] "GET /icons/ubuntu-logo.png HTTP/1.1" 200 3607 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.12.2 - - [06/Dec/2024:23:51:07 +0900] "GET /favicon.ico HTTP/1.1" 404 490 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.12.4 - - [06/Dec/2024:23:53:49 +0900] "GET / HTTP/1.1" 200 3460 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.12.4 - - [06/Dec/2024:23:53:49 +0900] "GET /icons/ubuntu-logo.png HTTP/1.1" 200 3607 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.12.4 - - [06/Dec/2024:23:53:49 +0900] "GET /favicon.ico HTTP/1.1" 404 490 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"
192.168.12.4 - - [06/Dec/2024:23:54:23 +0900] "GET / HTTP/1.1" 200 3460 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.12.4 - - [06/Dec/2024:23:54:23 +0900] "GET /icons/ubuntu-logo.png HTTP/1.1" 200 3607 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.12.4 - - [06/Dec/2024:23:54:23 +0900] "GET /favicon.ico HTTP/1.1" 404 490 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
192.168.12.4 - - [06/Dec/2024:23:55:14 +0900] "-" 408 0 "-" "-"
192.168.12.4 - - [06/Dec/2024:23:56:56 +0900] "GET / HTTP/1.1" 200 3460 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"
192.168.12.4 - - [06/Dec/2024:23:56:56 +0900] "GET /icons/ubuntu-logo.png HTTP/1.1" 200 3607 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"
192.168.12.4 - - [06/Dec/2024:23:56:56 +0900] "GET /favicon.ico HTTP/1.1" 404 490 "http://192.168.12.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"
192.168.12.4 - - [06/Dec/2024:23:57:04 +0900] "GET / HTTP/1.1" 200 3460 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"
192.168.12.4 - - [06/Dec/2024:23:57:55 +0900] "-" 408 0 "-" "-"

パッケージを読み込んで、read_log関数でファイルを読み込む。

> library(tidyverse)
> options(readr.show_progress = FALSE, readr.show_col_types = FALSE)
> tib <- read_log("access.log")
> dim(tib)
[1] 15 9
> tib[, 1:6] |> as.data.frame()
X1 X2 X3 X4 X5 X6
1 192.168.12.2 NA NA 06/Dec/2024:23:51:07 +0900 GET / HTTP/1.1 200
2 192.168.12.2 NA NA 06/Dec/2024:23:51:07 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
3 192.168.12.2 NA NA 06/Dec/2024:23:51:07 +0900 GET /favicon.ico HTTP/1.1 404
4 192.168.12.4 NA NA 06/Dec/2024:23:53:49 +0900 GET / HTTP/1.1 200
5 192.168.12.4 NA NA 06/Dec/2024:23:53:49 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
6 192.168.12.4 NA NA 06/Dec/2024:23:53:49 +0900 GET /favicon.ico HTTP/1.1 404
7 192.168.12.4 NA NA 06/Dec/2024:23:54:23 +0900 GET / HTTP/1.1 200
8 192.168.12.4 NA NA 06/Dec/2024:23:54:23 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
9 192.168.12.4 NA NA 06/Dec/2024:23:54:23 +0900 GET /favicon.ico HTTP/1.1 404
10 192.168.12.4 NA NA 06/Dec/2024:23:55:14 +0900 <NA> 408
11 192.168.12.4 NA NA 06/Dec/2024:23:56:56 +0900 GET / HTTP/1.1 200
12 192.168.12.4 NA NA 06/Dec/2024:23:56:56 +0900 GET /icons/ubuntu-logo.png HTTP/1.1 200
13 192.168.12.4 NA NA 06/Dec/2024:23:56:56 +0900 GET /favicon.ico HTTP/1.1 404
14 192.168.12.4 NA NA 06/Dec/2024:23:57:04 +0900 GET / HTTP/1.1 200
15 192.168.12.4 NA NA 06/Dec/2024:23:57:55 +0900 <NA> 408

作成したtibbleは15行9列で、1~6列を表示させたところ、正しく読み込まれていることがわかる。

«[R]Excelファイルのワークシートの中身を読み込む