Kevin's Data Analytics Blog

データサイエンティスト、AIエンジニアを目指す方に向けて情報発信していきます。

【初心者向け】Pandas入門 これだけは押さえておくべき基本操作|データ分析で必須

こんにちは、今回はPythonのライブラリの1つである、Pandasについて紹介したいと思います。
f:id:dskevin:20210523175543p:plain:h120

Pandasとは

データ分析用のライブラリで、表形式のデータを効率的に処理するための機能が多く提供されています。
実際のデータ分析作業のうち「データ前処理が8割を占める」とも言われるくらい、データ加工技術はデータ分析者にとって必須スキルであると言えます。また、Pythonでは機械学習用のライブラリもたくさん提供されているため、機械学習を適用する前のデータ加工も、PythonのライブラリであるPandasを使って行われることが多いです。

データソース

今回使用したデータは、以下のKaggleで公開されているポケモンの統計データを加工したものです。
Pokemon with stats | Kaggle

基本操作

Pandasライブラリのインポート

PythonでPandasを使うために、最初にライブラリをインポートします。

import pandas as pd

Pandasは慣習として、「pd」という短縮名でインポートします。

1. データファイルの読み込み(CSV/Excel/TSV)

CSVファイル

CSV形式のデータファイルを読み込む際には、pd.read_csvという関数を使用します。括弧の中には、対象のファイルのパスを記載します。

df = pd.read_csv('../data/Pokemon.csv')

上の例では、プログラムファイルが格納されているフォルダから1つ階層を上がって、「data」というフォルダ内にある「Pokemon.csv」を読み込んでいます。
もし、パスの記述方法についてあまり詳しくない場合は、プログラムファイルと同じフォルダ対象ファイルを置いて、ファイル名をシングルクォーテーション(’)で囲んで記述してもよいです。

df = pd.read_csv('Pokemon.csv')

また、pd.read_csvで読み込んだデータは、「=」の左側の変数に保存することができます。ここの変数名は自由に付けることが出来ます。こちらも慣習として、Pandasの表形式データを表す「データフレーム(DataFrame)」の略で「df」という変数名が使われることが多いです。

Excelファイル

Excel形式のデータを読み込む場合は、pd.read_excelという関数を使用します。使い方はpd.read_csvと同じです。

df = pd.read_excel('../data/Pokemon.xlsx')
TSVファイル

TSV形式のデータを読み込む場合も、CSV形式の場合と同じくpd.read_csv関数を使用します。ただし、オプションとして、「delimiter='\t'」を追加します。

df = pd.read_csv('../data/pokemon.txt', delimiter='\t')

TSV形式のデータは、データがタブで区切られているデータのことです。「delimiter」は区切り文字を意味し、「\t」タブ記号を意味します。
なお、pd.read_csvは、カンマやタブ以外で区切られたデータも読み込むことができ、例えば、「delimiter='XXX'」とすれば、XXXが区切り文字としてみなされます。

2. データの確認

データ全体

Jupyter notebookで、変数名だけ入力して実行すると、データフレームの中身を確認することが出来ます。

df

f:id:dskevin:20210523175816p:plain:h240
なお、末尾には、行数と列数も表示されています。このデータの場合、800行12列であることがわかります。

列名

「変数名.columns」で列名のリストを表示することが出来ます。

df.columns

f:id:dskevin:20210529181112p:plain

特定の列の値

「変数名[’列名’]」で特定の列の値を表示することが出来ます。

df['Name']

f:id:dskevin:20210529181156p:plain
また、複数の列名を指定する場合は、括弧を2重にして指定します。

df[['#','Name','Type 1']]

f:id:dskevin:20210529181207p:plain

特定の行の値

「変数名.loc[行インデックス]」で特定の列の値を表示することが出来ます。行インデックスはデフォルトで0から順に整数が割り当てられています。
f:id:dskevin:20210523204849p:plain:h320
赤で囲んでいる部分が行インデックスです。

インデックスは0始まりなので、2行目を抽出したい場合は1を指定します。

df.loc[1]

f:id:dskevin:20210529181218p:plain

また、複数の行を指定する場合は、複数列の指定と同様に括弧を2重にして指定します。

df.loc[[1,4,6]]

f:id:dskevin:20210529181340p:plain

3. 行のソート

「変数名.sort_values('列名')」で特定の列をキーとして、行を辞書順または数値順に並べ替えることができます。
例えば、Name列で並べ替えたい場合は、次の様に実行します。

df.sort_values('Name')

f:id:dskevin:20210529181357p:plain
降順に並べ替えたい場合は、「ascending=False」を付けます。

df.sort_values('Name', ascending=False)

f:id:dskevin:20210529181407p:plain
また、[]で囲むことで複数の列をキーとして指定することができます。

df.sort_values(['Type 1', 'HP'])

f:id:dskevin:20210529181420p:plain
デフォルトだと全て降順になりますが、昇順か降順かを別々に指定することもできます。例えば、Tpye 1を辞書の順に並べ変えて、HPを降順で大きい順に並べ替える場合のコードは以下のとおりです。

df.sort_values(['Type 1', 'HP']) , ascending=[True, False])

f:id:dskevin:20210529181432p:plain

4. 列の追加・削除

pandasで読み込んだデータの列を追加することができます。
「変数名['新しい列名'] = 値」とします。

df['Test'] = 1

f:id:dskevin:20210529181445p:plain
Testという列が追加されて、全ての値が1になっています。

新しい列の値として、それぞれの行で別々の値を設定することもできます。
例えば、各モンスターのHPからSpeedまでを全て足した値を、Totalという列名で追加する場合のコードは以下のとおりです。

df['Total'] = df['HP'] + df['Attack'] + df['Defense'] + df['Sp. Atk'] + df['Sp. Def'] + df['Speed']

f:id:dskevin:20210529181458p:plain
列を削除する場合は、「del 変数名['削除する列名']」とします。
先ほど追加したTestという列を削除します。

del df['Test']

5. 列の並べ替え

列の順番を並べ替えることもできます。
ここでは、一番に右側に追加したTotal列を、HP列の前に移動させたいと思います。コードの例は以下のとおりです。

# 現在の列名をリスト形式にして、変数colsに保存
cols = list(df.columns)
# 変数colsの中身を表示
print(cols)

f:id:dskevin:20210529181530p:plain

# 列名のリストをコピーし、表示したい順番に並べ替えて、別の変数cols_newに保存
cols_new = ['#', 'Name', 'Type 1', 'Type 2', 'Total', 'HP', 'Attack', 'Defense', 'Sp. Atk', 'Sp. Def', 'Speed', 'Generation', 'Legendary']
# 元の変数を上書き保存
df = df[cols_new]

f:id:dskevin:20210529181545p:plain

Total列の順番が変更されました。

6. ファイルに保存(CSV/Excel/TSV)

データフレームをファイルに保存することができます。読み込み時と同様に、3種類のファイル形式への出力方法を紹介します。

CSVファイル

データフレームをCSVファイルに保存する場合は、to_csvという関数を使用します。括弧の中には、出力ファイルのパスを記載します。

df.to_csv('../data/Pokemon_v2.csv')

実行すると、CSVファイルが生成されます。
f:id:dskevin:20210529181603p:plain

一番左のインデックス番号が不要な場合は、「index=False」を追加して実行します。

df.read_csv('../data/Pokemon_v2.csv', index=False)

f:id:dskevin:20210529181617p:plain

Excelファイル

データフレームをExcelファイルに保存する場合は、to_excelという関数を使用します。使い方はto_csvと同じです。

df.to_excel('../data/Pokemon_v2.xlsx', index=False)

f:id:dskevin:20210529181633p:plain

TSVファイル

データフレームをTSVファイルに保存する場合は、CSVの場合と同じでto_csv関数を使用します。ただし、オプションとして、「sep='\t'」を追加します。sepはseparatorの略です。

df.to_csv('../data/Pokemon_v2.txt', index=False, sep='\t')

f:id:dskevin:20210529181647p:plain

まとめ

Pandasの基本操作について紹介しました。今回紹介したとおり、Pandasでは多くの操作について、1行から数行の短いプログラムで書くことができます。そのため、プログラミング初心者でもすぐに使えるようになると思います。
また、今回も、記事の内容を実演した様子を動画にしてアップしています。わかりづらい点があれば、こちらもあわせてご確認ください。
youtu.be

最後まで読んでいただきありがとうございました。

データ分析者が知らないと損するLinuxコマンド5選

今回は、データ分析者にオススメのLinuxコマンドを5つ紹介したいと思います。
f:id:dskevin:20210511200143p:plain:h160

はじめに

Linux環境

Linuxはサーバー向けのOSですが、近年は、GCPvirtualboxなどの仮想マシン上にLinuxをインストールして使っている方も多いと思います。その中でも、簡単にLinuxを使う方法の1つとして、前回の記事で紹介したCygwinをインストールする方法があります。Cygwinを使うとWindowsのPC上でLinuxコマンドを実行することができます。まだの方は、是非インストールしてみてください。
dskevin.hatenablog.com

コマンド実行用のサンプルデータ

それぞれのコマンドの実行例は、以下のサイトで公開されているオープンデータを使用しています。
Fire Department Calls for Service | DataSF | City and County of San Francisco
Fire_Department_Calls_for_Service.csv 約2GB
※米国サンフランシスコ市における、緊急車両の出動要請のログデータ

1. headコマンド ~データの中身を確認~

説明

大きいサイズのデータファイルをExcelで開こうとすると、開くのに時間がかかったり、場合によってはフリーズが発生します。
f:id:dskevin:20210508182658p:plain:h320
Linuxのheadコマンドを使うと、テキストファイルの先頭10行を素早く表示することができます。
CSVファイルにも適用することができるので、大きいサイズのデータファイルの中身をざっと確認したい時に便利です。

head ファイル名

headコマンドは、-nオプションを使用することで、表示する行数を指定することも出来ます。

head -n 行数 ファイル名

また、別のファイルに保存したい場合は、以下のように「> 出力ファイル名」を付けて実行します。

head ファイル名 > 出力ファイル名

このように、Linuxでは実行するコマンドの最後に「> 出力ファイル名」を付けると、出力結果を別のファイルに保存することができます。

実行例

サンプルデータを用いて、実際にコマンドを実行してみます。
まずは、ファイルを置いてあるディレクトリに移動します。今回は、デスクトップに置いてあります。ここで、「userpc」の部分はログインユーザ名に置き換えてください。

cd /cygdrive/c/Users/userpc/Desktop/

headコマンドを実行します。

head Fire_Department_Calls_for_Service.csv

実行イメージは以下のとおりです。
f:id:dskevin:20210508184804p:plain:h320

ファイルの冒頭部分が表示されました。このように、どのような内容が含まれているか確認することが出来ます。ただし、今回のデータは1行が長く、改行されていて見づらいのです。そこで、先頭20行を別のファイルに保存してExcelで開いてみます。

head -n 20 Fire_Department_Calls_for_Service.csv > tmp_data.csv

tmp_data.csvが同じディレクトリに生成されるので、Excelで開いてみます。こちらは、ファイルのサイズが小さくなっているため、すぐに開けました。
f:id:dskevin:20210508185755p:plain:h320

このように、大きいサイズのデータの中身を確認したい時は、headコマンドを使うと時間を短縮することができます。

2. grepコマンド ~特定の行を抽出~

説明

grepコマンドも大きいサイズのファイルを扱う際に便利なLinuxコマンドです。
grepコマンドを使うと、指定した文字列を含む行だけを表示することができます。データ分析において、データファイルの中から、分析対象のデータを部分的に抽出するときに役に立ちます。

grep "キーワード" ファイル名

キーワードはシングルクォーテーションまたはダブルクォーテーションで囲みます。

複数のキーワードを含む行を抽出したい場合は、「|」を使って、再度grepコマンドを書きます。2つ目以降はファイル名は不要です。

grep "キーワード1" ファイル名 | grep "キーワード2" | grep "キーワード3" ...

実行例

Fire_Department_Calls_for_Service.csvの中から、"04/12/2021"と"Explosion"を含む行だけを抽出する場合は、以下のように実行します。

grep "04/12/2021" Fire_Department_Calls_for_Service.csv | grep "Explosion"

f:id:dskevin:20210508202609p:plain:h320

抽出した結果を別のファイルに出力する場合の実行例は、以下のとおりです。

grep "04/12/2021" Fire_Department_Calls_for_Service.csv | grep "Explosion" > explosion_20210412.csv

これで、2021年4月12日に対応したExplosion(爆発)による出動要請に関するレコードだけを抽出することができました。

3. cutコマンド ~特定の列を抽出~

説明

cutコマンドを使うと、CSVファイルの特定の列のみを抽出することができます。
分析に必要な列だけを残したいときに使用します。-f オプションに残したい列番号をカンマ区切りで複数指定できます。

cut -d , -f 列番号1,列番号2,... ファイル名

実行例

先ほど出力したCSVファイル(explosion_20210412.csv)から、1列目(Call Number)、4列目(Call Type)、5列目(Received DtTm)、17列目(City)、26列目(Call Type Group)を抽出する場合は、次のコマンドを実行します。なお、「-d ,」はファイルの区切り文字(deliminator)を指定するためのオプションで、CSVファイルはカンマが区切り文字なので「,」を指定します。

cut -d , -f 1,4,7,17,26 explosion_20210412.csv

f:id:dskevin:20210509104016p:plain:h320
列が少なくなったため、改行が無くなり見やすくなりました。

ファイルに出力する場合は、以下のように実行します。

cut -d , -f 1,4,7,17,26 explosion_20210412.csv > explosion_20210412_v2.csv

4. uniqコマンド ~重複の除去~

説明

実務データにおいて、何らかの理由で同じデータが複数回記録されている場合があります。このようなデータを使用してデータ分析を行う際に、多くの場合、重複を取り除くことが適切です。
uniqコマンドを使うと、ファイルの重複行を取り除くことができます。ただし、uniqコマンドは連続する行が一致している場合にだけ重複を取り除くため、sortコマンドを使って全ての行をキャラクターコード順に並べ替えた後で、uniqコマンドを実行するのが一般的です。

sort ファイル名 | uniq

実行例

3.で実行したコマンド出力結果は全ての行が同じ内容でした。この結果に対して以下のコマンドを実行すると、重複を除くことができます。

sort explosion_20210412_v2.csv | uniq

f:id:dskevin:20210509095314p:plain:h320
重複が除かれて、1行だけになりました。ちなみに、この場合は、全ての行が同じ内容だったので、sortをしなくても結果は同じですが、sortとuniqはセットで使うように覚えた方がよいです。

5. sedコマンド ~文字列の置換~

説明

データ分析時のデータの前処理として、文字列の表記ゆれを統一したり、文字列をデータを数値に変換するなど、文字列の置換をすることがよくあります。Excelでも以下のイメージのように、データ内の文字列の置換はできます。
f:id:dskevin:20210509102602p:plain:h320
しかし、大きいサイズのデータを扱う場合や、複数の置換パターンがある場合は、Linuxコマンドを使う方が速くて便利です。
sedコマンドを使うと、ファイルの中の特定の文字列を、別の文字列に書き換えることが出来ます。

sed -e 's/返還前の文字列/変換後の文字列/g' ファイル名

複数の置換パターンがある場合は、「|」でつなげて記述します。

sed -e 's/返還前の文字列1/変換後の文字列1/g' ファイル名 | sed -e 's/返還前の文字列2/変換後の文字列2/g'

実行例

今回のデータにおいて、City列の値として「San Francisco」が、別の日のデータでは「SFO」と書かれているため、「SFO」に統一したいと思います。見やすさのため、3.で作成したexplosion_20210412.csvに対して文字列の置換を行います。

sed -e 's/San Francisco/SFO/g' explosion_20210412.csv

f:id:dskevin:20210509104402p:plain:h320
「San Francisco」が「SFO」に書き換わりました。

このように、sedコマンドを使うことで、Excelでファイルを開かずに内容を書き換えることができるので、時短ができます。

応用

最後に、今回紹介したコマンドを組み合わせて、以下のデータ処理を一気に行ってみたいと思います。
・対象レコードは、2021年の全種類の出動要請
・対象カラムは、Call Number、Call Type、Received DtTm、City、Call Type Group
・重複は取り除く
・「San Francisco」を「SFO」に書き換える

すでに少し触れていますが、Linuxコマンドは「|」を使うことで、複数の処理をつなげて実行することができます。途中の出力結果を確認する必要がない場合は、「|」を使って一気に実行することで、更に効率化することができます。

grep '/2021,' Fire_Department_Calls_for_Service.csv | cut -d , -f 1,4,7,17,26 | sort | uniq | sed -e 's/San Francisco/SFO/g' > sample_data_2021.csv

PCのスペックにもよりますが、数秒で終わると思います。
出力ファイルを開いたイメージはこちらです。もともと約2GBあったファイルサイズが約3MBまで小さくなっているので、すぐに開けました。
f:id:dskevin:20210509112034p:plain:h320

また、ヘッダーを付けたい場合は、以下の様に、まずheadコマンドで1行だけ出力します。その後で、同様の加工処理を実行して、「>」ではなく「>>」を使って追記モードで出力することで、先に出力したヘッダーの後にデータ部分が出力されます。

head -n 1 Fire_Department_Calls_for_Service.csv | cut -d , -f 1,4,7,17,26 > sample_data_2021.csv
grep '/2021,' Fire_Department_Calls_for_Service.csv | cut -d , -f 1,4,7,17,26 | sort | uniq | sed -e 's/San Francisco/SFO/g' >> sample_data_2021.csv

f:id:dskevin:20210509112537p:plain:h320
こちらも実行は数秒で終わると思います。

同様の処理をExcelPythonなどのアプリケーションを利用して実行した場合に比べて、Linuxコマンドは圧倒的に速いです。(Linuxコマンド恐るべし!)

まとめ

今回は、データ分析者にオススメしたい5つのLinuxコマンドを紹介しました。LinuxコマンドはITエンジニアがシステム開発で使うものというイメージがあるかもしれませんが、今回紹介したように、データの処理においても非常に役に立つ機能がたくさんあります。今回の記事が、皆様のデータ分析に少しでも役に立てば幸いです。
また、今回も、記事の内容を実演した様子を動画にしてアップしています。文章でわかりづらい点があれば、こちらもあわせてご確認ください。
youtu.be

最後まで読んでいただき、ありがとうございました。

Cygwinのインストール|SEを目指す方にオススメのソフトウェア

こんにちは。今回はCygwinのインストール方法ついて紹介します。

Cygwinとは

Cygwinを使うと、Windows PC上にUNIX系OSの実行環境を疑似的に再現することができます。これにより、UNIX系OSの機能をWindowsでも使うことが出来ます。UNIX系OSに興味があるけど環境を用意するのはちょっとハードルが高い、という方にオススメしたいソフトウェアです。
なお、私は前の会社でLinuxサーバ上で動作するソフトウェアの開発を経験していたこともあり、UNIX系OSの代表格であるLinux OSをよく使っていました。また、データを扱う職場に異動してからも、データの加工処理の一部をLinuxのコマンドを使って実行していました。

インストーラのダウンロード

以下のサイトから、インストーラをダウンロードします。
Cygwin Installation

f:id:dskevin:20210424145744p:plain:h320
自身の環境に合わせてインストーラを選択します。64ビットOSを使用している場合は、「setup-x86_64.exe」をダウンロードします。最近のPCであれば、64ビットOSだと思いますが、もしわからない場合は、コントロールパネルから辿って確認することができます。

コントロール パネル>システムとセキュリティ>システム
f:id:dskevin:20210424150225p:plain:h320

インストール

インストーラのファイルをダブルクリックして実行します。
f:id:dskevin:20210424155934p:plain:h240

  • Cygwin Net Release Setup Program

 - 「次へ」をクリック

  • Choose A Download Source

 - 「Install from Internet」を選択して、「次へ」をクリック

  • Select Root Install Directory

 - Cygwinをインストールするフォルダを選択します。例:C:\cygwin64
 - Install Forの部分は、特に理由がなければ、「All Users」のままとします。
 - 「次へ」をクリック

  • Select Local Package Directory

 - インストーラの格納フォルダを選択(自動で入力されています。)
 - 「次へ」をクリック

  • Select Your Internet Connection

 - 特に理由がなければ、「Use System Proxy Settings」のままとします。
 - 「次へ」をクリック

  • Choose A Download Site

 - リストの中から、ダウンロードサイトを選択します。アドレスが「.jp」で終わっているものを選ぶと良いです。※リストに何も表示されない場合は、インターネットが接続されていることを確認ください。
 - 「次へ」をクリック

  • Select Packages

 - デフォルトのまま、「次へ」をクリック

  • Review and confirm changes

 - 「次へ」をクリック

  • Progress

 - インストール完了を待ちます

  • Create Icons

 - デスクトップにアイコンを作成する場合は、「Create icon on Desktop」を選択します
 - スタートメニューにアイコンを追加する場合は、「Add icon to Start Menu」を選択します
 - 「完了」をクリック

これでインストールは完了です。

Cygwinの起動

アイコンをダブルクリックするとCygwinターミナルが起動します。
f:id:dskevin:20210425174507p:plain:h240

Cygwinの動作確認

この画面にLinuxのコマンドを入力できます。「pwd」(print working directory)という、現在のフォルダを表示するコマンドを実行してみましょう。

pwd

f:id:dskevin:20210425174901p:plain:h240
Cygwinのホームディレクトリ「/home/userpc」が表示されました。userpcの部分は環境によって異なります。
次に、「cd」(change directory)コマンドを使って、PCのCドライブに移動してみます。Cygwinでは、「/cygdrive/c/」が、PCのCドライブを表します。移動後、「ls」(list segment)コマンドを実行して、フォルダ内のファイルやフォルダの一覧を表示します。

cd /cygdrive/c/
ls

f:id:dskevin:20210425175413p:plain:h240
このPCのCドライブ直下のファイル・フォルダが見えています。
ここで、Cドライブに移動する時に、毎回「cd /cygdrive/c/」と入力するのは大変なので、「ln」(link)コマンドを実行してホームディレクトリにCドライブへのリンクを作成することをオススメします。

ln -s /cygdrive/c/ ~/c

これで、Cygwinの起動後、ホームディレクトリから「cd c」と入力すればCドライブに移動できます。

cd c

まとめ

Cygwinのインストール方法について紹介しました。システム開発系のソフトウェアエンジニアを目指す方や、データ分析者としてUNIX系OSのコマンドを使ってみたいという方は、是非、Cygwinをインストールしてみてください。Linuxの便利機能は、今後、別の記事で紹介する予定です。
また、本記事の内容を実演した様子を動画にしてアップしています。文章で分かりづらい点は、こちらの動画もあわせてご確認ください。
youtu.be

最後まで読んでいただき、ありがとうございました。

Pythonで動く棒グラフを作成する方法|Bar Chart Race

こんにちは。時系列で動く棒グラフをYoutube等で見かけたことがあると思いますが、先日、私も作成してみました。
youtu.be

Pythonで簡単に作れたので、作成手順を共有したいと思います。

想定環境

Windows8または、Windows10での実行を想定しています。

1. 事前準備

1-1. Pythonのセットアップ

Pythonを実行できる環境を用意します。同様のアニメーショングラフを作成できるWebサービスは複数ありますが、Pythonを使って書くメリットとしては、自分のパソコンで作成できる点です。業務データなど、オンラインにアップロードすることに抵抗がある場合にも、気にせずに作成することが出来ます。

もし、Pythonをまだインストールしていない方は、別の記事にしていますので、参考にしてみてください。
dskevin.hatenablog.com

1-2. FFmpegのインストール

1-2-1. ソフトウェアのダウンロード

以下のサイトにアクセスします。
Release ffmpeg git 2022-02-17 builds · GyanD/codexffmpeg · GitHub
f:id:dskevin:20210327160534p:plain:h320
ここで、「ffmpeg-2021-03-24-git-a77beea6c8-full_build.zip」を選択してダウンロードします。ファイル名のバージョンを表す部分は、本記事の作成時点のものになりますので、異なっていても問題ありません。

1-2-2. ファイルの解凍・コピー

ダウンロードが完了したらzipファイルを解凍して、解凍したフォルダを「C:\Program Files」配下にコピーします。
このとき、フォルダ名を「ffmpeg」に変更すると良いです。

1-2-3. 環境変数の設定

環境変数pathに先ほどコピーしたフォルダ内にある「bin」というフォルダを追加します。具体的には、以下のパスを追加します。
C:\Program Files\ffmpeg\bin

f:id:dskevin:20210327161356p:plain:h320

なお、環境変数については、以下の動画が参考になると思います。
youtu.be

1-3. ImageMagickのインストール

1-3-1. ソフトウェアのダウンロード

以下のサイトにアクセスします。
ImageMagick – Download
f:id:dskevin:20210327165135p:plain
ここで、「ImageMagick-7.0.11-4-portable-Q16-x64.zip」を選択してダウンロードします。先ほど同様、ファイル名のバージョンを表す部分は、本記事の作成時点のものになりますので、異なっていても問題ありません。

1-3-2. ファイルの解凍・コピー

ダウンロードが完了したらzipファイルを解凍して、解凍したフォルダを「C:\Program Files」配下にコピーします。
こちらも、先ほど同様、フォルダ名を「ImageMagick」に変更すると良いです。

1-3-3. Matplotlibの設定ファイルにパスを設定

ImageMagickの場合、Windows環境変数への設定は不要ですが、代わりにMatplotlibの設定ファイルにパスを設定する必要があります。

設定ファイルの場所:
<Matplotlibのインストールフォルダ>\mpl-data\matplotlibrc
※matplotlibのインストールフォルダ例:
 C:\Users\コンピュータ名\anaconda3\Lib\site-packages\matplotlib\

もし場所がわからなければ、以下のPythonプログラムを実行すれば確認できます。

import matplotlib
print(matplotlib.matplotlib_fname())

設定ファイルをメモ帳などのエディタで開いて、「animation.convert_path」の部分を以下の内容に書き換えます。
animation.convert_path: C:\Program Files\ImageMagick\magick.exe

変更前:
f:id:dskevin:20210327173642p:plain:h320
変更後:
f:id:dskevin:20210327173708p:plain:h320

1-4. Pythonのライブラリを追加

「bar_chart_race」というライブラリをインストールします。動く棒グラフは、Bar Chart Raceと呼ばれています。
通常、Pythonのライブラリはpip installコマンドでインストールできますが、ここでは、github上に公開されている最新バージョンをダウンロードしてインストールします。本記事の執筆時点では、bar_chart_raceのバージョン0.2が動く棒グラフをサポートしていますが、pip install でインストールするとバージョンが0.1になってしまうためです。

1-4-1. ファイルのダウンロード

以下のサイトにアクセスして、「Code」から「Download ZIP」を選択します。
GitHub - dexplo/bar_chart_race: Create animated bar chart races in Python with matplotlib
f:id:dskevin:20210411140356p:plain:h320

1-4-2. ファイルの解凍

ダウンロードが完了したらzipファイルを解凍します。こちらは、「C:\Program Files」配下へのコピーは不要です。

1-4-3. ライブラリの追加

コマンドプロンプトを開いて、zipファイルを解凍して生成されたフォルダに移動します。移動したら、「python setup.py install」と実行します。

cd フォルダのパス
python setup.py install

1-5. データファイルの用意

棒グラフを描画するためのデータを用意します。データは以下の形式になるように加工して、CSVファイルとして保存します。

  • それぞれの行は、ある1時点のデータを表します
  • 1列目は、日付など時間を表す項目とします
  • 2列目以降は、カテゴリごとのデータとします

例:プロ野球の各球団の勝利数の推移データ

date Giants Swallows Tigers Carp Dragons Baystars
2020-06-19 1 0 0 1 1 0
2020-06-20 2 1 0 2 1 0
2020-06-21 3 1 0 2 2 1

これで事前の準備は完了です。

2. Jupyter Notebookの起動

Pythonの実行環境を起動します。ここでは、Jupyter Notebookを使用します。他のPython実行環境でも問題ありません。

コマンドプロンプトから、以下のコマンドを実行します。

jupyter notebook

すると、ブラウザが立ち上がり、Jupyter Notebookが起動します。
Jupyter Notebookの使い方についても、別の記事にしていますので、参考にしてみてください。
dskevin.hatenablog.com

3. 動く棒グラフの作成

Pythonを実行して作成します。基本的には、コピー&ペーストすれば動くように、プログラムを書いています。
まず、ライブラリをインポートします。

import pandas as pd
import bar_chart_race as bcr

次に、先ほど用意した対象のデータファイルを読み込みます。target_fileという変数に、ファイルのパスを記載して実行します。相対パス絶対パスで記述することが可能ですが、あまり詳しくない場合は、プログラムファイルと同じフォルダに対象のファイルを置いて、ファイル名をシングルクォーテーション(’)で囲んで記述すればよいです。

# 対象のデータファイル
target_file = 'target_data.csv'

# CSVファイルの読み込み (最初の列をインデクスに指定)
df=pd.read_csv(target_file, index_col=0)

# データを確認
df.head()

f:id:dskevin:20210328221903p:plain

このように表形式のデータが表示されれば、ファイルの読み込みができています。
では、いよいよ、動く棒グラフを作成します。
以下の様に、bcr.bar_chart_raceという関数を実行します。

# bar_chart_raceの作成
bcr.bar_chart_race(df=df, n_bars=len(df.columns))

f:id:dskevin:20210410160057j:plain:h320
すると、このように、ノートブック内に動く棒グラフが表示されます。
動画を右クリックすると動画ファイルとして保存することができます。Jupyter Notebook以外の環境で実行する場合は、以下のように、関数の中にfilename='ファイル名'というオプションを追加すると、直接、動画ファイルに出力することができます。

bcr.bar_chart_race(df=df, n_bars=len(df.columns), filename='output.mp4')

また、ここで、棒グラフの見た目をカスタマイズすることができます。今回は、以下の内容を変更しました。
・タイトルを追加
・日付の位置を左下に変更
・バーの幅をやや細く
・バーの色を各球団のチームカラーに変更
f:id:dskevin:20210410162536j:plain:h320

Pythonコードは以下のとおりです。

# bar_chart_raceのカスタマイズ
bcr.bar_chart_race(
    df=df
    ,n_bars=len(df.columns)
    ,title='NPB Central League 2020'
    ,period_label={'x': 0.15, 'y': 0.03, 'ha': 'right', 'va': 'center', 'size': 7}
    ,bar_size=0.7
    ,colors=['#f97709', '#98c145', '#ffe201', '#ff0000', '#002569', '#094a8c']
)

他にもパラメータが多数用意されています。詳しくはこちらのページを参照ください。
https://www.dexplo.org/bar_chart_race/

まとめ

FFmpegとImageMagickの設定に少し時間がかかりましたが、Pythonのプログラムは思った以上に簡単でした。動く棒グラフを自分のPCで作成したいという方に、この記事が少しでも役に立てば幸いです。
記事の内容を実演した様子を動画にしてアップしています。文章で分かりづらい点は、こちらの動画もあわせてご確認ください。
youtu.be
動画を作成した際に使用したデータは、以下に公開しています。
セ・リーグ NPB_Central_2020.csv - Google ドライブ
パ・リーグ NPB_Pacific_2020.csv - Google ドライブ
これらは、私が自分でウェブサイトから過去の試合結果を探して入力・作成したデータです。そのため、内容に誤りがあるかもしれませんので、あらかじめご了承ください。

最後まで読んでいただき、ありがとうございました。

職場の同僚たちの34の資質を分析してわかったこと|ストレングスファインダー® 主成分分析

こんにちは。ストレングスファインダー®についてご存じでしょうか。私の所属する部署ではお互いメンバーのことをより深く理解するために、ストレングスファインダー®を活用しています。今回は、職場のメンバーの資質・特徴を分析したところ、面白い結果が得られたので共有したいと思います。

ストレングスファインダー®とは

ストレングスファインダー®は、自分の強みを診断するWebテストです。米国ギャラップ社が開発したもので、200万人以上のインタビュー結果をもとに定義した34の資質の中で、自分が強みとしている資質を知ることができます。177個の質問に答えることで、自分が大切にしている思考や感情を浮き彫りにしていきます。
診断を受けるには、公式サイト*1から申し込みができます。もしくは、ストレングスファインダー®の解説本*2*3に付属のテストコードでも診断することができます。ただし、書籍のテストコードでは、上位5個の資質までしか結果を得られないようです。

ストレングスファインダー®を受けた感想

テストの時間(30分くらい)は、自分の感情と向き合うことが出来る良い機会だと感じました。ただ、質問は日本語で書かれていたのですが、英文を翻訳した日本語の文章によく見られる、ぎこちない表現が多く、質問の意図がわかりづらいものがありました。

診断結果

診断結果として、34の資質を高い順に並べたリストが得られます。(下の表が、私の診断結果です。)それぞれの資質についての解説も付いていますので、自分の強みを理解することができます。

1. 学習欲    11. 達成欲    21. アレンジ   31. 社交性   
2. 分析思考   12. 責任感    22. 収集心    32. 指令性   
3. 調和性    13. 着想     23. 成長促進   33. 戦略性   
4. 公平性    14. 未来志向   24. 回復志向   34. 共感性   
5. 個別化    15. 信念     25. 目標志向  
6. 親密性    16. 自我     26. 活発性   
7. 最上志向   17. 内省     27. 運命思考  
8. 自己確信   18. 規律性    28. コミュニケーション 
9. 原点思考   19. 包含     29. ポジティブ 
10. 慎重さ    20. 適応性    30. 競争性   

ちなみに、34個の項目の並べる時の組み合わせの総数は、34の階乗で、295232799039604140847618609643520000000通りになります。自分と全く同じ結果になった人は世の中には一人もいないと言っても過言ではないレベルです。

解説を読んだ感想

英語の原文を翻訳した文章が読みづらくて頭に入ってこないです。(二回目笑)
以下、一部を抜粋させていただきます。

  • 生まれながらにして、あなたは、自分の仕事からひらめきを得ることを切望することがあるでしょう。
  • おそらくあなたは、あたなの系統だった思考スタイルに価値をおいてくれる人にアドバイスを求められるかもしれません。
  • あなたは本能的に、状況に応じて、一部の人々と親しく、現実的な会話を交わすかもしれません。

このような感じです。私のモヤッとした気持ちが伝わりましたでしょうか。
とはいえ、過去の200万人以上のインタビュー結果から作られた34個の指標をもとにして、人々のタイプを分類する手法は、データ分析者にとって興味深いため、この結果をもう少し深堀りしていこうと思いました。

同僚の診断結果をあわせて見る

データの作成

同僚の結果を1つのシートにまとめました。それぞれのメンバーの資質を左から順に34個並べたものです。名前は伏せていますが、G列が私です。

f:id:dskevin:20210223183736p:plain
結果まとめ

これを数値データに変換して、統計的な手法が使いやすい形にします。

f:id:dskevin:20210223183842j:plain
変換した後のデータ

列を資質に固定して、それぞれのメンバーごとに1番強い資質を「34」、2番目に強い資質を「33」、…という様に数字を入れていきます。私(G行)の場合は、学習意欲の列が「34」になっています。

分析手法

今回は、主成分分析という統計学の手法を使います。主成分分析は、多数の項目を、より少ない項目に要約することができる手法です。主成分分析についての詳しい説明は今回は割愛します。
ここでは、34次元のデータを2次元に圧縮することで、縦軸と横軸の2次元平面上に可視化したいと思います。

2次元への圧縮

主成分分析を適用した結果、34個の項目で構成される各メンバーの特徴をなるべく残したまま、2つの項目(主成分)に圧縮するための変換式が算出できました。

PC1 = 0.288×[戦略性] + 0.276×[着想] + 0.235×[最上志向] + …
   + (-0.318)×[分析思考] + (-0.329)×[回復志向] + (-0.336)×[調和性]
PC2 = 0.404×[適応性] + 0.333×[共感性] + 0.328×[成長促進] + …
   + (-0.169)×[活発性] + (-0.223)×[競争性] + (-0.296)×[達成欲]

[項目名]の中には、それぞれのスコア(34~1)が入ります。
例えば、私の場合、G列のそれぞれのスコアを当てはめて、以下の様に計算できます。

PC1 = &0.288×2 + 0.276×22 + 0.235×28 + …
   + (-0.318)×33 + (-0.329)×11 + (-0.336)×32
  = -27.836
PC2 = 0.404×15 + 0.333×1 + 0.328×12 + …
   + (-0.169)×9 + (-0.223)×5 + (-0.296)×24
  = 7.706

可視化

横軸にPC1のスコア、縦軸にPC2のスコアとすると、全てのメンバーをグラフ上に表示することができます。

f:id:dskevin:20210223210139p:plain:h320
34の資質から生成した2つの主成分の散布図

点の位置が近いメンバーは、この部署において他のメンバーと比較して、持っている資質が似ていると言えます。実際に、私の直感と合っていると感じました。

同僚 グラフ上の点の位置 バックグラウンド 一緒に仕事をする印象
L 近い 私と同様、前職では官公庁向けのシステム開発を経験 仕事を進める上で、気にする観点が共通することが多く、話がスムーズに進むことが多い
D 遠い 前職では、主にコンサルタントとして施策の立案実施を担当 私が思い付かないような発想で、新しいアイディアやアドバイスをもらえる

リーダーに求められる資質

先ほどのグラフに対して、部署の管理職(アシスタントマネージャー以上)のメンバーに印をつけてみました。

f:id:dskevin:20210227123153p:plain:h320
主成分の散布図(役職者に印)

面白いことに、グラフの下半分のエリアに偏っています。Lさんを除いた役職者は全員、PC2の値がマイナスでした。

ここで、改めて、縦軸PC2のスコアを算出するための式を見てみましょう。

PC2 = 0.404×[適応性] + 0.333×[共感性] + 0.328×[成長促進] + …
   + (-0.169)×[活発性] + (-0.223)×[競争性] + (-0.296)×[達成欲]

マイナスの係数がついている資質が強いと、グラフでより下の方に位置することになります。マイナスの係数の絶対値が大きい3つの資質についての説明は次のとおりです。

  • 「活発性」の資質が高い人は、アイデアを実行に移すことにより結果をもたらします。単に話すだけではなく、いますぐ実行することを望みます。
  • 「競争性」の資質が高い人は、自分の進歩を他の人と比較します。コンテストで勝つために、相当な努力をします。
  • 「達成欲」の資質が高い人は、並外れたスタミナがあり、旺盛に仕事に取り組みます。自分が多忙で生産的であることに、大きな満足感を得ます。

これらの項目が、私の所属している部署においてリーダーとして求められる資質であるといえます。今後、これらの項目を強化していくことが、私が現在の部署においてリーダーとして活躍していく上で必要なことだと考えました。

分析手法について

今回の分析のポイントは2点です。

  • メンバーの資質を、強い順に34~1で数値化したこと
  • 主成分分析で34次元のデータを2次元データに変換したこと

これにより、メンバーの特徴をグラフ上を可視化することができました。

ただ、今回の手法では、全ての資質を1刻みで数値化したため、資質の強弱が直線的になっています。そのため、例えば、一番強い資質が一番弱い資質の34倍の強さを持つことになっています。実際には、資質の強弱は人それぞれ異なります。

f:id:dskevin:20210305211309p:plain:h240
資質の強さの数値化イメージ

また、34次元のデータを2次元に変換する際に、どうしても、情報量が落ちてしまいます。

そのため、今回はシンプルなモデルで簡易的に分析してみた、という位置づけになる点、ご留意いただけると助かります。
他に、簡単かつ精緻に分析するアイディアがあれば、是非教えていただけると嬉しいです。

まとめ

ストレングスファインダー®は、自分自身の強みや、周囲の人の特徴を理解する上で、便利なツールだと感じました。みなさんも、職場のメンバーでストレングスファインダー®を受診して結果を分析すると、色々な気づきが得られると思いますので、機会があれば是非試してみてください。
ただ、テスト問題および、結果の解説の日本語のわかりづらさは、勿体ないと感じました。もう少し日本人にとって理解しやすい文章になれば、もっと需要は増えると思います。今後のアップデートに期待したいところです!

最後まで読んでいただき、ありがとうございました。

*1:ストレングスファインダー®公式サイト:https://www.gallup.com/cliftonstrengths/ja/

*2:さあ、才能(じぶん)に目覚めよう 新版 ストレングス・ファインダー2.0

*3:ストレングス・リーダーシップ―さあ、リーダーの才能に目覚めよう

exe化したPyrhonプログラムが実行エラーになった場合の対処法|Pyinstaller FileNotFoundError

こんにちは。先日、Pythonプログラムをexeファイル化した時に、なかなかうまくいかず苦戦したので、エラーの内容と対処方法を記事に残しておきます。同様のエラーに遭遇された方の参考になれば幸いです。

exeファイルとは

拡張子が「.exe」になっている実行ファイルのことで、クリックするとプログラムが自動的に実行されます。Windows環境で動作します。

通常、Pythonのプログラムを実行するには、Pythonインストール済のPCを用意する必要があります。しかし、Pythonプログラムをexeファイル化することで、Pythonが未インストールのPCでも、プログラムを実行することが出来ます。

f:id:dskevin:20210214172036p:plain:h80
Pythonのexeファイルのアイコン

Pythonプログラムをexeファイル化する方法

Pythonプログラムのexeファイルを作成するには、Pyinstallerというライブラリを使用します。最初に、コマンドプロンプトを開いて、以下のコマンドを実行して、Pyinstallerをインストールします。

pip install pyinstaller

次に、exe化したいPythonのプログラムファイル(.py)が存在するフォルダに移動します。

cd 作業フォルダのパス

その後、以下のコマンドを実行します。

pyinstaller プログラムファイル名 -–onefile

「--onefile」というオプションを指定することで、実行ファイルを1つのexeファイルにまとめてくれます。実行後、以下の様なメッセージが表示されれば、exeファイルの作成は完了です。

INFO: Building EXE from EXE-00.toc completed successfully.

遭遇したエラー

出来上がったexeファイルを実行したところ、次のようなエラーが表示されました。

FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\userpc\\AppData\\Local\\Temp\\_MEI105442\\wordcloud\\stopwords'

wordcloudライブラリで使用しているstopwordsというファイルが見つからないようです。「--onefile」というオプションを指定しているので、基本的には関連ファイルを含めて1つのexeファイルにまとめてくれるはずですが、漏れてしまったようです。

対処方法(同梱ファイルの追加)

stopwordsは、wordcloudライブラリのインストールフォルダにあります。
「--add-data」オプションを付けて、以下のように実行する必要がありました。

pyinstaller プログラムファイル名  --onefile --add-data wordcloudのインストールフォルダ\stopwords;wordcloud

※wordcloudのインストールフォルダ例:
 C:\Users\コンピュータ名\anaconda3\Lib\site-packages\wordcloud\

「--add-data」オプションは、exeファイルに同梱するデータを追加で指定することができ、次のように使用します。

--add-data 元データのパス;取り込み先のパス

今回の場合、元データのパスはファイルのパスをそのまま記入し、取り込み先のパスにはwordcloudとしました。エラーメッセージをみて、stopwordsファイルはwordcloudというフォルダの配下に展開されていることを参考にしました。

遭遇したエラー2

作り直したexeファイルを実行したところ、先ほどのエラーは回避できたのですが、別のエラーが表示されました。

FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\userpc\\AppData\\Local\\Temp\\_MEI75162\\janome\\sysdic\\entries_compact0.py'

今度は、janomeライブラリで使用しているファイルが見つからないようです。こちらも、先ほどと同様に、entries_compact0.pyを「--add-data」で追加して再度実行してみました。

ModuleNotFoundError: No module named 'janome.sysdic.entries_compact0_idx'

janomeライブラリのファイルで同梱されないものは、たくさんあるようです…。

f:id:dskevin:20210301200506p:plain:h320
janomeライブラリのsysdicフォルダ

対処方法2(同梱フォルダの追加)

wordcloudのstopwordsファイルに加えて、janomeのsysdicをフォルダごと「--add-data」オプションに指定します。

pyinstaller プログラムファイル名  --onefile --add-data wordcloudのインストールフォルダ\stopwords;wordcloud --add-data janomeのインストールフォルダ\sysdic;janome\sysdic

janomeのインストールフォルダ例:
 C:\Users\コンピュータ名\anaconda3\Lib\site-packages\janome\

これでexeファイルが無事に実行できました。

まとめ

今回、wordcloudとjanomeを使う場合以外にも、PyinstallerでNotFoundErrorが出たら、必要なファイルの同梱が漏れている可能性があります。その場合、「--add-data」オプションで、自分で必要なファイルまたは、フォルダを追加してみましょう。将来的には、Pyinstallerの仕様が改善されて「--onfile」オプションで対応できるようになってほしいです。
今回、最初のエラーが出てから、最終的に解決するまでにトータルで3時間以上かかりました。みなさんに同じ苦労を味わってほしくないため、この記事を書きました。少しでもお役に立てば嬉しいです。

最後まで読んでいただき、ありがとうございました。

【テキストデータの分析】Word Cloudの実行ファイルを公開|頻出単語の抽出・可視化用

こんにちは。今回は、「簡単にテキストデータを分析したい」、「Word Cloudを使ってみたいけど、Pythonをインストールしてプログラム実行するのは大変だし、面倒くさい」という方向けに、実行ファイルを用意しました。この実行ファイルを使えば、Word Cloudを簡単に作成できますので、使い方を紹介します。なお、この実行ファイルはWindows環境で動作します。

実行ファイルのアイコン:

f:id:dskevin:20210214172036p:plain:h160

テキストデータの可視化(Word Cloud)のイメージ:

f:id:dskevin:20210220155828p:plain:h320

1. 実行ファイルのダウンロード

実行ファイルは、Google ドライブ上にzipファイル形式で公開してます。以下のリンクから、zipファイルをダウンロードできます。
wordcloud_kda.zip - Google ドライブ
※ファイルサイズは、400MB以上あります。

ダウンロードの完了後、解凍ソフト等を使用して、zipファイルを展開します。
展開したフォルダには、READMEというフォルダ、exeファイル、sample.txtというサンプルファイルが入っています。また、READMEフォルダの中には、使い方等を記載したREADME.txtが入っています。

wordcloud_kda
 ├─ README
 │  └─ README.txt
 ├─ sample.txt
 └─ wordcloud_kda_vX.X.exe

wordcloud_kda_vX.X.exeの「X.X」の部分は、プログラムの版数が入ります。初版は「1.0」です。

2. 対象ファイルの用意

今回作成した実行ファイルは、テキスト形式(.txt)のファイルに書かれた文章を対象にして、Word Cloudを作成します。そのため、例えば、Excelファイル内のテキストを対象にしたい場合は、内容をメモ帳などにコピーして、テキスト形式のファイルに保存します。
その際、改行や空行が残っていても、Word Cloudの結果には影響ありませんが、絵文字などの環境依存文字が含まれている場合は、念のため取り除くことをオススメします。

3. exeファイルの実行

1. 作業フォルダの作成
デスクトップなど、任意の場所にフォルダを作成します。

2. ファイルの格納
作業フォルダに以下のファイルを格納します。

  • Word Cloudの入力にしたい文章が書かれたテキスト形式(.txt)のファイル
  • プログラム実行ファイル
f:id:dskevin:20210220153420p:plain:h320
作業フォルダのイメージ

プログラムファイルを実行すると、同じフォルダにある全てのテキストファイルを対象に、Word Cloudを作成します。そのため、対象外のテキストファイルは作業フォルダに含めないよう、ご注意ください。

3. 実行
プログラム実行ファイルをダブルクリックします。
初めて実行する場合、Windows OSの設定によって、以下の画面が表示されます。

f:id:dskevin:20210220145907p:plain:h320
警告画面の例

「詳細情報」をクリックすると、実行ボタンが表示されるので、実行ボタンを押します。

f:id:dskevin:20210220150113p:plain:h320
警告画面の例2

Google ドライブ上のファイルが改ざんされることは無いと思いますが、もし不安であれば、念のため実行前に、ファイルをウィルスソフトでスキャンしてください。

2回目以降は、実行ファイルをダブルクリックすると、コマンド画面が起動します。
しばらく待つと、プログラムが動作しWord Cloudを自動で作成します。「Enterキーを押して終了します」と表示された後で、Enterキーを押すとコマンド画面が終了します。

f:id:dskevin:20210220152018p:plain:h320
プログラム実行イメージ

4. 出力ファイルの確認
プログラムを実行して正常に動作した場合、作業フォルダに出力結果のファイルが配置されています。

f:id:dskevin:20210220151849p:plain:h320
プログラム実行後の作業フォルダのイメージ
  • wordcloud_元のファイル名.csv: 単語の出現回数のリスト
  • wordcloud_元のファイル名.png: Word Cloudの画像ファイル
f:id:dskevin:20210220153545p:plain:h320
単語の出現回数のリスト例
f:id:dskevin:20210220155828p:plain:h320
Word Cloudの例

これで作業は完了です。

まとめ

Word Cloud作成用の実行ファイルの使い方について紹介しました。これを使えば、Pythonのインストールとプログラミングは不要で、Word Cloudが作成できます。
前回、コピー&ペーストだけでWord Cloudを作成するという主旨の記事を投稿しましたが、それでも手間だなと感じる方も多いと思い、改めて記事を投稿しました。少しでもお役に立てれば幸いです。

なお、プログラムのソースコードは以下のgithubで公開しています。興味がある方はこちらもご確認ください。
GitHub - kevins-data-analytics/wordcloud_kda

プログラムの更新があれば、google drive上の実行ファイルおよびgithub上のソースコードを更新して公開していきたいと思います。

また、実行ファイルを使ってWord Cloudを作成する様子を、動画にしてアップロードしています。必要に応じて、こちらもご参照ください。
youtu.be

最後まで読んでいただき、ありがとうございました。