Pythonで可視化するときのちょっとしたコツ
Abstract
プログラムやツールを使って可視化するときに, ちょっとしたコツを知っていると, 可視化がより簡単になります. 今回は, Pythonで可視化するときの事例を紹介します.
データ
今回用いたデータはこちらです
CSVを生で読むためのツール
Pythonなどのプログラミング言語でCSVを読み込んでしまうとその後は原則としてPackageやLibraryのインターフェースに則って処理を行うことになります. しかし, その前にCSVを生で読んでいると少しの努力でコードを減らせることに気づくことがあります.
とはいえ, csvをメモ帳で開いて読むのは大変です. 普段読んでいるコードの様に色がついている方が読みやすいです. そこで今回は, VSCodeとその拡張機能であるRainbow CSVを入れてみました.
配色テーマはTokyo Hackを使っています.
これでだいぶ読みやすくなったのではないでしょうか? hoverでカラムが出てくれます.
CSVを読んで改善点を探す
実際に見てみるとすぐに対応できそうな部分が見つかります.
例えば, 上記の事例で言うと, headerの部分がプログラムで読み込む場合コードをいくつか追加する必要があります. しかし, この部分は見た目でわかるので, その部分を削除してしまえば, コードを書かずに済みます.
同様に, 今回のデータには「出生数【人】」の行と「出生率【人口千対】」の行があります. 私たちが可視化したいコードは前者なので後者は削除してしまうということもできます.
一度プログラムに読み込んでしまうとこの様な部分はプログラムによって削除をする必要があります.
n = 3
new_df = df.head(n)
nが大きくなると境界を調べるが大変になります. ですが, テキストエディタで開いていれば検索機能ですぐに見つけることが可能です.
また, 今回の事例でいうと「時間軸(年次)」カラムの「年」という言葉とダブルクオートが邪魔です. これらを削除してしまえば, その後の処理を簡単にすることができます. また, 1月-12月の部分はカンマとダブルクオートを削除してすれば, その後の処理が楽です. このようなときにVimやEmacsのキーバインドを使えるようにしておくと便利でおすすめです.
具体的には以下のコードを削除することができます. 普段から可視化用のプログラムを書いているのであれば別ですが, そうでない場合は調べる時間を削減することが可能です.
import re
data_ = data.with_columns(
pl.col('時間軸(年次)').apply(lambda x: int(re.sub('年', '', x))),
pl.col(
'1月',
'2月',
'3月',
'4月',
'5月',
'6月',
'7月',
'8月',
'9月',
'10月',
'11月',
'12月'
).apply(lambda x: int(re.sub(',', '', x)))
)
よく使うコードは残しておく
例えば, PythonでのSeabornを使った可視化の場合, 同じようなコードを書くことが多いです. 以下は私のZennの記事ページですが, 同じ様なコードが書かれていることがわかります. このようなコードは残しておくと便利です.
下記は私が最も使いまわしているコードです.
sns.set()
sns.set_style('whitegrid', {'grid.linestyle': '--'})
sns.set_context('talk', 0.8, {'lines.linewidth': 0})
sns.set_palette('GnBu', 10, 0.9)
こちらもよく使っています.
fig=plt.figure(figsize=(16,9))
ax1 = fig.add_subplot(1, 1, 1)
ax1.set_title('Number of birth vs month')
ax1.set_ylabel('number of births')
for y in reversed(ys):
ax1.plot(x, y, linewidth=3, marker='o')
ax1.legend([y for y in reversed(year_list)])
plt.show()
まとめ
今回は, Pythonで可視化するときのちょっとしたコツを紹介しました. これらを知っていると可視化がより簡単になります. また, 今回はPythonを例に挙げましたが, 他の言語でも同様のことが言えると思います. ぜひ, RやRustといった他の言語でも試してみてください.
Discussion