Briswell Tech Blog

ブリスウェルのテックブログです

人工衛星軌道アニメーション

週末から暖かい日が続いています。春が近づいていますね!

今回は、「PyEphem」という天文分野のPythonライブラリを使用して、人工衛星軌道をシミュレートし、アニメーション表示してみます。

pyEphemの使い方 〜Pythonで人工衛星軌道をシミュレートする〜 | korintje.com

こちらの記事を参考にさせていただきました。ありがとうございました。

記事の中で

readtleメソッドを使えば、2行軌道要素形式(TLE)のパラメータを読み込むことも出来ます。

との情報もありましたので、TLEパラメータを使用してみます。

LIVE REAL TIME SATELLITE TRACKING AND PREDICTIONS

こちらのサイトで公開されている準天頂衛星システム「みちびき」4号機のTLE情報をパラメータに設定します。

1. モジュールのインポート

import ephem
import matplotlib.pyplot as plt
import os
from datetime import datetime as dt
from datetime import timedelta as td
from matplotlib.animation import ArtistAnimation #アニメーション作成用
from mpl_toolkits.basemap import Basemap #世界地図描画用

matplotlibの「ArtistAnimation」を使うことで、複数の図からアニメーションを作成することができます。

2. TLEパラメータを設定

line1 = 'QZS-4 (MICHIBIKI-4)'
line2 = '1 42965U 17062A   22057.72757807 -.00000328  00000-0  00000-0 0  9995'
line3 = '2 42965  40.7914   3.5343 0749421 269.5117 284.1873  1.00283299 16058'

TLE情報の「42965U」の「U」は、未分類(Unclassified)を意味し、公開されているTLEに付いています。

3. 時刻データを作成

epoch_date = "22057.72757807" 
year = int(epoch_date[:2])
year += 2000
datetime = float(epoch_date[2:])
decimal_time = dt(year, 1, 1) + td(datetime - 1)
time_list = [(decimal_time + td(hours=i/60)).strftime("%Y/%m/%d %H:%M:%S") for i in range(0,3600)]

TLE情報の一つの観測時刻をフォーマット変換します。また、その時刻を起点として3600個の時刻データを作成します。

4. 人工衛星のプロット画像をアニメーション化

images = [] #画像リスト用
fig = plt.figure() #描画領域を作成

m = Basemap() #世界地図を表示
m.drawcoastlines() #海岸線を表示

for time in time_list:
    image = []
    satellite = ephem.readtle(line1, line2, line3) #TLEパラメータを読み込む
    satellite.compute(time) #指定時刻で実行
    latitude = satellite.sublat / ephem.degree #緯度を取得
    longitude = satellite.sublong / ephem.degree #経度を取得
    x,y = m(longitude, latitude) #XY座標を取得
    image += m.plot(x, y, 'bo', markersize=7) #青丸でプロット
    images.append(image) #画像リストに追加

save_dir = "./" #動画の格納先
ani = ArtistAnimation(fig, images, interval=10, repeat=False) #10ミリ秒毎に図を切り替える
ani.save(os.path.join(save_dir,'orbit.mp4')) #動画を格納

5. 作成されたアニメーション

f:id:KenjiU:20220228205224g:plain

「みちびき」の特徴的な軌道である8の字を描いてますね!

【GPU】【YOLO】CUDA cuDNN TensorFlow をWindows10へインストールしてYOLOを動かす

AIチームの大澤です.

AIモデルの学習をする上でGPU環境は欠かせないものですが,構築する上ではCUDA cuDNN Tensorflowなどを環境に合わせて適切なバージョンを入れないと動かなかったりするので大変です.

また,他にもちょっとしたことでインストールが上手く行かなかったりGPUを認識してくれなかったりすることがあるのも厄介なところです. 今回は新しいPCでYOLO v3を動かすためのGPU環境を構築したため,その手順を残しておきたいと思います.

0. まずはじめに

CUDA cuDNN TensorFlowをそれぞれどのバージョンの組み合わせにするのが良いかということですが,それに関しては以下のページに早見表が載っているので,この組み合わせでインストールをするのが良いとのことです.

www.tensorflow.org

今回は以下の組み合わせで導入し,YOLO v3を動かすところまで行いました. またpython環境が整っていないまっさらな状態なので,pythonもインストールしていきます.

  • tensorflow-2.2.0
  • CUDA 10.1
  • cuDNN 7.6
  • Python 3.8

その他情報

  • OS: Windows10 pro
  • GPU: RTX2070 super *1

やることはこちらのとおりです.

  1. NVIDIAドライバをインストール
  2. CUDAをインストール
  3. cuDNNをダウンロード
  4. pythonをインストール
  5. 仮想環境(venv)を作成
  6. tensorflowをインストール
  7. YOLO v3を動かす

1.NVIDIAドライバをインストールする

インストールの前に,次のソフトウェアが入っている場合はアンインストールします.

大体のGPUマシンはゲーミングPC扱いになっており,ゲームに最適な設定でGPUを動かすためにGeForce Experienceというツールが入っているようです.こちらが入っていると,CUDAのインストールが上手く行かない場合があるとのこと. (参考:https://webbigdata.jp/study/post-9499)

ちなみに私の場合はNVIDIA FrameView SDKが見当たらなかったので,それ以外の2つをアンインストールしました.

それではNVIDIAのドライバをダウンロードしてきます.

www.nvidia.co.jp

自身の環境にあったドライバを選択します.私の場合は以下です. ダウンロードタイプはStudioドライバーで良いかと思います.

f:id:kyoshi0000:20220225203019p:plain

f:id:kyoshi0000:20220225203213j:plain

ダウンロードができたら無心でインストールをします.

2.CUDAをインストールする

CUDAをダウンロードします.

developer.nvidia.com

組み合わせ早見表によると10.1を入れる必要があるとのことなので,「CUDA Toolkit 10.1」をクリックします.

「Select Target Platform」は画像のようにしました.

f:id:kyoshi0000:20220225203355j:plain

こちらもダウンロードができたら無心でインストールをします.

3.cuDNNのダウンロード

cuDNNをダウンロードしていきます.今までの中で一番面倒です. というのも,メンバーシップ登録をしないとダウンロードさせてくれないからです.

developer.nvidia.com

Download cuDNN → Join now でメールアドレスを登録をしましょう.

無事にメンバーシップ登録が終わったらログインをし,cuDNNをダウンロードします. 早見表によるとcuDNNは7.6を入れる必要があります.そして今回CUDAは10.1なので, 「Download cuDNN v7.6.0 (May 20, 2019), for CUDA 10.1」をダウンロードしました.

zipファイルになっていると思うので,解凍をします.

解凍されたcudaフォルダには後ほどパスを通すので,参照しやすいところに置いておきたいです.Cドライブ直下にtoolsというフォルダを作り,その中に入れることにします.

f:id:kyoshi0000:20220225203752j:plain

パスの設定

ここでパスの設定を行います.以下の4行を環境変数に追加します.

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\CUPTI\lib64
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include
C:\tools\cuda\bin

f:id:kyoshi0000:20220225203958j:plain

4.Pythonのインストール

以下のURLからpythonをインストールします. 早見表ではPython3.8が対応しているとのことなので,今回はPython 3.8.8をインストールしました.

http://
https://www.python.org/downloads/

インストールができたら確認のため,コマンドプロンプトpython -Vを実行してみます.
Pythonのバージョンが表示されるはずですが,私は表示されませんでした.

Pathが通ってなさそうなので,以下の2つをシステム環境変数へ追加します.


C:\Users\ユーザー名\AppData\Local\Programs\Python\Python38
C:\Users\ユーザー名\AppData\Local\Programs\Python\Python38\Scripts

f:id:kyoshi0000:20220225204414j:plain

PC再起動後,コマンドプロンプトで再びpython -Vのコマンドを実行.
python 3.8.8と表示されました.これでPythonのインストールは完了です.

5.仮想環境を作成(venv)

python機械学習を行う際には様々なライブラリを使用しますが,そのライブラリのバージョンもプロジェクトによって異なる場合がよくあります.

プロジェクトAはver.1.0で動くけど,プロジェクトBはver.2.0じゃないと動かない」となるのは面倒です. なのでプロジェクト毎に仮想環境を作り,プロジェクトAの仮想環境にはver.1.0を,プロジェクトBの仮想環境にはver.2.0のライブラリを入れてあげればいいよねということで,仮想環境を作成していきます.

公式でサポートされているので簡単です. まず,プロジェクト用のフォルダを作成します.今回はデスクトップにProjectフォルダを作り,その中にYOLOフォルダを作成しました.このYOLOフォルダ内に仮想環境を作成し,今後はその中で作業していきます.

デスクトップ
 └─ Project
    └─ YOLO

コマンドプロンプトを開き,cdコマンドでYOLOフォルダに移動します.

cd C:¥Users¥<ユーザー名>¥Desktop¥Project¥YOLO

ここでpython -m venv envを実行します. YOLOフォルダ内に「env」というフォルダが作成されればOKです.

引き続きコマンドプロンプトenv¥Scripts¥activateを実行すると仮想環境をアクティベートすることができます.deactivateで仮想環境から抜けます.

これでYOLOフォルダ内に仮想環境を作成できました.

再度env¥Scripts¥activateで仮想環境をアクティベートしたらtensorflowを入れていきます.

これ以降は仮想環境を立ち上げた状態で進めていきます.

6.tensorflow v2.2.0をインストール

ではpip install tensorflow==2.2.0でインストールします.

終了したらtensorflowがGPUを認識するか確認をします.

コマンドプロンプトpythonと入力し,対話モードでpythonを実行します. 次に以下の2行を入力します.

import tensorflow as tf
tf.test.is_gpu_available()

出力にTrueと出れば認識できているので,exit()と入力して対話モードを終了します.(参考:https://www.dan-myblog.com/post/52/)

最後にYOLOv3(GPU)の設定を行います.

7.YOLO v3を動かす

ソースファイルのダウンロード

YOLOv3をダウンロードします.git cloneでもzipファイルをダウンロードでもどちらでも構いません.

github.com

ダウンロードしたyolov3-tf2-masterフォルダ以下のファイル群を,上で作成した仮想環境内に配置する.


フォルダ構成
YOLO(仮想環境)
  ├── envフォルダ
  ├── yolov3-tf2-masterの中身一式
  ︙

モデルのダウンロード

こちらからモデルをダウンロードし,dataフォルダに配置します. https://pjreddie.com/media/files/yolov3.weights

以下のコマンドでconvert.pyを実行します.*2


python convert.py --weights ./data/yolov3.weights --output ./checkpoints/yolov3.tf


モデルの変換ができたらYOLOを実行してみます. webカメラで検出を行いたいので,以下のコマンドを入力します.

python detect_video.py --video 0

うまくいっていればこれでYOLOが実行できているはずです. 私もかなり調べながら環境を構築しましたが,もう同じことはしたくないので備忘録も兼ねてこちらに残しておきます.

お疲れさまでした.

*1:ちなみにRTX30*系だとCUDA 11.系しか対応していないそうです.[参考:https://teratail.com/questions/331673]

*2:以下のページのReadMeにコマンドの説明が書いてありますhttps://github.com/zzh8829/yolov3-tf2

座標変換

物事の考え方や捉え方を変えてみると、新しい発想や解決法が得られることがあります。

  • 別の立場の人の視点に立って物事を考えてみる。
  • 他の人のいつもと違う考えや価値観に触れて、別の視点に気付く。

等、ビジネスを取り巻く環境が大きく変化する今日この頃、多様な視点を持つことはとても大事ですね。

さて、今回を視点を変えるということで...
画像の座標変換という手法を試してみます。

世界地図と地球儀で、大陸や島の大きさがそれぞれで違うと感じたことはないでしょうか?
メルカトル図法の地図は、楕円体である地球を円筒で表現している(緯線はすべて赤道と同じ長さになる)ので、北極や南極に近づくほど実際の面積よりも大きく表示されてしまいます。

matplotlibとMayaviでNASAの画像を『地球儀』にしてみた。 - プログラム日記φ(..)

こちらの記事でご紹介されているように

 x = r \sinθ \cosφ
 y = r \sinθ \sinφ
 z = r \cosθ

球面座標 (動径r, 緯度θ, 経度φ)

直交直線座標 (x, y, z)
へ変換することで、地図の各緯度経度の値を球面にマッピングし、地球儀を作成することができます。

ついでに
mplot3d API — Matplotlib 2.0.2 documentation

view_init(elev=None, azim=None)
# elev: z軸方向から見た仰角
# azim: x, y軸方向の方位角

この関数を使用し、azimの値を0〜360の間で変化させて、地球儀を回転させてみます。 f:id:KenjiU:20220130235421g:plain 地図ではなく、写真を球面にマッピングすると以下のようになります。 f:id:KenjiU:20220130235447g:plain 目が回りそうです。
座標変換ですが、AIで画像解析する際の前処理の一つとして使うこともあります。また別の機会にご紹介しますね。

簿記3級必勝法

こんにちは、ブリスウェル新入社員の辻本です。

財務諸表を読み解いて企業分析ができるようになりたい。

会計周りのシステム構築業務にも活かせる。

...ということもあり、簿記3級を受験しました。

独学の場合、取得するには100時間かかると言われていますが、
この度、50時間ほどで取得できたので、勉強方法を共有させていただきます。


1. Youtubeで全体像把握

【簿記系YouTuber?】ふくしままさゆき

【ゼロから簿記3級(全24回)】基礎18回+じっくり復習6回(テキスト不要!)

まずこの方の再生リストを2周視聴しました。

勘定科目、資産・負債・資本・費用・収益などの用語の理解、
簿記3級試験が3つの大問で分かれていること等、全体像の把握ができました。

このYoutube動画は基礎から噛み砕いて丁寧に説明してくれるので、お勧めです。


2. 模試をひたすら行う

全体像の把握ができたら模試をひたすら行いました。

教育機関において、日商簿記検定試験の予想問題が公開されているので、
参考にしてください。

より多くの問題(丁寧な解説付き)を解いて、ネット試験に挑みたい方にはこの本をお勧めします。

私はブリスウェルの上司(Tさん)に借りたのですが、
問題が本試験にかなり近く、模試数もかなりあるのでお勧めです。

この本の模試で90点以上を安定して取れるようになれば試験に望んでも問題ないかと思います。


3. 簿記3級試験 体験談・注意点

実は私、簿記3級試験に2度落ちています。

<1度目の挑戦>

得点:55点(不合格)
敗因:
・大問③(決算書類作成問題)の書き方があまり分かっていなかった。
・模試で大問②(補助簿・勘定・決算仕訳・会計用語)について満点が取れたことがなかった。

リカバリー内容>

・大問③(決算書類作成問題)の書き方をほぼマスター。
・大問②は、T字勘定以外は解けるようにした。
・模試の点数は80点を安定して取れるようにした。

<2度目の挑戦>

得点:63点(不合格)
敗因:
・大問②でT字勘定が出てきた。
・大問③(決算書類作成問題)で模試には出なかった決算仕訳が出てきた。

リカバリー内容>

・本に載っている模試を全て2周行い、YoutubeでT字勘定、決算仕訳に関する動画をひたすら見ました。
・模試の点数は90点を安定して取れるようになり、100点も取れるようになった。

<3度目の挑戦>

得点:79点(合格)

このように模試のレベルと本試験のレベルは明確に違うので、
必ず90点以上を安定して取れるようになってから試験に臨みましょう。


まとめ

簿記3級を取得したことにより、会計業務を簿記の視点から見ることができるようになりました。次の目標は簿記2級の取得です。
工業簿記も対象になり、難易度は3級と比較し格段に高くなります。
お客様に対してより深いコンサルティングができるようにするため、頑張って勉強します。
弊社には私以外にも簿記に精通している方がいるので、
会計周りのシステムの構築であれば弊社にお任せください。

公転軌道アニメーション

2021年も大詰めとなりました。一息ついて良いお年をお迎えください。

冬の星空はとても綺麗ですね。子供のころ、寒いベランダでずっとオリオン座を眺めてました。星の方からも誰かが同じように地球を眺めているのではないかとわくわくしていた記憶があります。

今回は、Pythonのグラフ描画ライブラリ「matplotlib」のアニメーションを使用して、地球の公転運動を表示してみます。

Pythonアニメーションによるケプラー運動(楕円軌道)の表示 | 地学教材 | 高津科学

こちらのサイトを参考にさせていただきました。ケプラー方程式の実装と、アニメーション方法について大変勉強になりました。ありがとうございました。

その時代の常識を疑い、観察と推測によりケプラーの法則を導き出したケプラーさんには、ただただ敬服するばかりです。江戸時代の日本の天文学者麻田剛立」もケプラーの第3法則を独自に発見したと言われています。

  • 道長半径(周回する天体がとる楕円軌道の長半径): 1(天文単位
  • 離心率(二次曲線の特徴を示す数値で1より小さければ楕円): 0.0167

として、地球の公転運動をアニメーションしてみましょう。

f:id:KenjiU:20211231214442g:plain

1年間があっという間ですね。

子供のように「ときめき」と「わくわく」が溢れていると、時間の感覚が長く感じるようです。「楽しんで◯◯をする事」を大切にして、前へ踏み出していきましょう。

では、来年もどうぞよろしくお願いいたします。

Exif情報を知る

久しぶりの投稿になります
新入社員も入ってきて駆け出し社員ではなくなりつつある中堅社員(?)kobaです。
今年も残り少しですね。。。年々早く時間が過ぎていくような気がしています。

ある案件で写真をアップロード時、Exif情報を画面上に出してほしいとの要望がありました。

エグジフ?イグジフ?Exif情報って??

Exif情報ってなんだろうと思い調べてみると
カメラの機種や撮影時の条件情報を画像に埋め込んでいる情報のことを指しており
デジタル機器のカメラで撮影した写真には
ほとんどExif情報が自動付与されているみたいです

Exif情報の例としては

撮影日時、位置情報、撮影機器名、画像の解像度、フラッシュ使用の有無

などがあります。
フラッシュの有無までわかるとはすごいですね(実用性あるかはわかりませんが笑)

iPhoneで撮影した写真をアップロードしてもExif情報読み取ってくれない?

今回はアップロードした写真を表示する他に
アップロードした写真のExif情報(撮影日時、位置情報)を読み取って
Exif情報あれば撮影日時、位置情報のテキストリンクを表示する要件でした。

f:id:briswellyuki:20211202180813p:plain
Androidでアップロード時の状態

ただiPhoneで撮影した写真をアップロードすると
何故かExif情報読み取ってくれません。
AndroidだとExif情報表示されるのに....

f:id:briswellyuki:20211203111545p:plain
iPhoneでアップロード時の状態

iPhoneの写真がExif情報読み取ってくれない原因?

調べてみるとiPhoneから
SNSへのアップロード時やメッセージへの添付の際に
Exif情報が削除される仕様になっている旨の記載がありました。
上記の仕様で読み取ってくれないのだろうかと考えました。
参照Wiki

解決法

いくつか解決法が記載してあるサイトあったので試してみました。
参照サイト

①メールの添付画像をアップロード
1.該当画像をメールで自分に送信

2.メール添付画像を保存

3.保存した画像をアップロード

上記の方法を試しましたところ、表示されました!
f:id:briswellyuki:20211203122731p:plain

iPhoneカメラ設定変更
1.iPhoneの設定で[カメラ]選択
f:id:briswellyuki:20211203122328p:plain

2.[フォーマット]選択
f:id:briswellyuki:20211203122400p:plain

3.[互換性優先]選択
f:id:briswellyuki:20211203122414p:plain

上記の方法で撮影した写真をアップロードしたところ
表示されました!
上記3の写真でわかりますが、
iPhoneはデフォルトでフォーマットの設定が[高効率]になっています。
[高効率]では画像形式がHEIFで保存されてしまうので
Exifの対応画像形式ではなかったことによることが
Exif情報読み取れない原因だったようです

まとめ

Exif情報は個人情報が特定できる恐れがあるので
気軽にSNSにアップロードできてしまうスマホから
アップロードするときには注意が必要です。
iPhoneSNSへのアップロード時やメッセージへの添付の際に
Exif情報が削除される仕様はある意味優しいかもしれませんね
(今回のような要望がある場合には少し手間がかかりますが....)



「業務のアイカタであり続けたい」
中小企業様向けERPソリューション
ai-cata.com

AKAZEによる文字検出

毎月のブログ更新の期限が近づいてきました!
今年トップレベルの低気圧で頭がクラクラしております。

画像処理技術を一つご紹介いたします。

OpenCVのAKAZE(Accelerated-KAZE)という特徴量検出の手法を試してみました。KAZEは「風」から命名されています。この手法を用いることで「2つの画像に同じものがあるか」の判別ができるようになります。

tech.briswell.com

  1. 前回の記事のWord Cloud画像
  2. 簿記の文字画像

を使用して、それぞれの特徴量をAKAZEにより計算し、その計算した特徴量をマッチングさせてみます。

f:id:KenjiU:20211130211922j:plain

「簿記」取得できました!

実際はまだ3級合格できておりません。次回は4度目のチャレンジです。

AWS Network Firewall の初期設定

こんにちは、としです。
最近はプライベートでウイスキーの勉強を始めました。
元々焼酎ばかり呑んでいたので、新鮮でとても楽しく、美味しいウイスキーにいっぱい出会えて幸せな気分です。

本日は [AWS Network Firewall の初期設定] について書いてみようと思います。

0.初めに

セキュリティ要件で今後必要になってきそうだな、と感じたので、AWS Network Firewall を触ってみました。
AWS Network Firewall とは、などは色々な記事で書かれているので、割愛します。
まだまだルール設定やALBとの同居など、自分の中で問題はありますが、下記構成での導入はできたので、備忘録含め、記載していこうと思います。
※時々、Firewallを間違えてFilewallと記載している部分があります。間違えました🥺

f:id:Toshi_bw:20211109131055p:plain

1.VPCの作成

VPCを新しく作成します。

f:id:Toshi_bw:20211109131114p:plain

作成後です。
f:id:Toshi_bw:20211109134030p:plain

2.サブネットの作成

作成したVPCに対して、サブネットを作成します。
f:id:Toshi_bw:20211109134116p:plain f:id:Toshi_bw:20211109131414p:plain
作成後です。
f:id:Toshi_bw:20211109134200p:plain

3.インターネットゲートウェイの作成

インターネットゲートウェイを作成します。
f:id:Toshi_bw:20211109131504p:plain


作成したVPCにアタッチします。

4.ルートテーブルの編集

作成したサブネットのルートテーブルに対して、作成したインターネットゲートウェイをアタッチします。
f:id:Toshi_bw:20211109131648p:plain

5.EC2インスタンスの作成

適当なEC2インスタンスを作成し、Apacheをインストールし、http通信を可能とし、アクセスができることを確認します。
※EC2の作成方法などは割愛します。

6.Firewall サブネットの作成

先ほど作成したVPCに対して、Firewallサブネットを作成します。
f:id:Toshi_bw:20211109134245p:plain f:id:Toshi_bw:20211109131912p:plain


7.Firewall の作成

VPC画面のLeft menuの下の方にファイアウォールがあるので、そこから新規作成を行います。 
※少し待ち時間があります。
f:id:Toshi_bw:20211109132002p:plainf:id:Toshi_bw:20211109132009p:plainf:id:Toshi_bw:20211109132017p:plain


8.ステートレスルールグループの設定

お試しなので、とりあえず80ポートのみを許可設定しています。
f:id:Toshi_bw:20211109132441p:plainf:id:Toshi_bw:20211109132449p:plainf:id:Toshi_bw:20211109132456p:plainf:id:Toshi_bw:20211109132504p:plain
送信先、カスタムIPはEC2の [プライベート IPv4 アドレス] を入力してください。

f:id:Toshi_bw:20211109134359p:plain

9.ステートレスデフォルトアクション

上記指定ルール以外を拒否します。
f:id:Toshi_bw:20211109132607p:plain

10.ルートテーブルの設定

ルートテーブルは全部で3つ存在します。
※個人的にここが1番躓きました。

Firewall Internet Gataway(新規作成)
f:id:Toshi_bw:20211109132726p:plainf:id:Toshi_bw:20211109132733p:plain


Firewall Public
※EC2で使用しているサブネットのルートテーブル
f:id:Toshi_bw:20211109132744p:plain

Firewall Table
Firewallで使用しているサブネットのルートテーブル
f:id:Toshi_bw:20211109132800p:plain

11.最後に

ここまでの作業で一旦構成図の導入は完了となります。
作成したEC2インスタンスに80ポートでのアクセスは可能で、SSHの接続は拒否されることが確認できると思います。


様々なルールが設定可能なので、ここをいじくり回して今後のシステム開発に役立てていこうと思います。
f:id:Toshi_bw:20211109132917p:plain


最後まで読んでいただき、ありがとうございます。
これからも色々なサービスが出てくる、進化していくので、いっぱい触っていこうと思います。

Word Cloud で記事を可視化

最近のブログ記事の内容を可視化すべく

WordCloud for Python documentation — wordcloud 1.8.1 documentation

こちらの「Word Cloud」ライブラリを利用してみます。その名の通り、頻繁に出てくる「単語(Word)」を、その出現頻度に比例する大きさで「雲(Cloud)」のように並べて表示してくれます。以下のようなパラメータ設定が可能です。

wordcloud = WordCloud(
    font_path = "/System/Library/Fonts/ヒラギノ角ゴシック W6.ttc", #フォントのパス
    width = 900, height = 600, #キャンバスのサイズ
    background_color = "white",   #背景色
    stopwords = ['さん','くん'], #除外する単語
    max_words = 500,   #単語数の上限
    min_font_size = 4,   #最小のフォントサイズ
    collocations = False   #複合語のオプション
    ).generate(words_blog)

Welcome to janome's documentation! (Japanese) — Janome v0.4 documentation (ja)

また、こちらの「Janome」ライブラリを使用して、単語を名詞のみに絞ります。ただし、代名詞(例:そこ)、非自立(例:もの)、数(例:1)は除外します。

word_list=[]
for token in tokens:
    word = token.surface
    part_1 = token.part_of_speech.split(',')[0]
    part_2 = token.part_of_speech.split(',')[1]
     
    if part_1 == "名詞":
        if (part_2 != "代名詞") and (part_2 != "非自立") and (part_2 != "数"):
            word_list.append(word)

では、確認してみましょう。

f:id:KenjiU:20211031224401p:plain

古き良きものを今の時代にも、伝えていきたい所存でございます。

暑さ寒さも彼岸まで

朝晩ヒンヤリとして過ごしやすくなってきましたね。秋到来ですが、弊社には、7月と9月に新しい社員が入社し、春のようなフレッシュさをもたらしています。みんなでガンガン挑戦していきましょう!

という出だしでしたが...
今回は少しネタが切れてしまいまして

最初は人として検出されてしまったが、途中自転車やバイクになりすまそうとし、最終的に気配を消す、お侍くんをご紹介いたします。(少し演出を施しております。お含みおきください。)

f:id:KenjiU:20210926193347g:plain
お侍くん検出