こんにちは、すのくろです。
Pythonは、その柔軟性と強力なライブラリのおかげで、データサイエンス、機械学習、そしてもちろんデータの視覚化において最も人気のあるプログラミング言語の一つです。
名前くらいは知っていて、 使ってみたいという方も多いのではないでしょうか?
私は学生の研究活動をしていた頃から、今の社会人での開発業務で、何かデータをまとめる時には、Excelだけでなく、Pythonも日々の業務で使っています。
この記事では、Pythonを活用した効率的なグラフ作成のための基本から応用まで、自分がPythonを使ってグラフ描画などを効率的に行う中で必要不可欠だと思う情報をまとめました。
初心者でも理解できるように、Python環境のセットアップから始め、基本的なグラフの作成方法、そしてMatplotlibやSeabornなどのライブラリを使ったグラフのカスタマイズ方法までを段階的に解説します。
また、グラフをPDFで保存する方法や、AI技術を活用した業務効率化のコツも紹介します。
是非、参考になれば幸いです!
Python環境のセットアップ
Pythonを活用したデータ分析やグラフ作成を始めるためには、適切な開発環境のセットアップが必要です。
このセクションでは、Pythonでのプログラミング環境を構築するための3つの主要な方法を紹介します!
・Anacondaをインストールして使う方法
・Visual Studio Codeをインストールして使う方法
・Google Colab でPythonを利用する方
それぞれの特徴を挙げると下記の通りです。
項目 | Anaconda | Visual Studio Code | Google Colab |
---|---|---|---|
商用利用 | ほぼ不可能(200人未満の企業では可) | 可能 | 可能(利用規約に注意) |
手軽さ | やや手間(インストール必要) | やや手間(インストール必要、拡張機能の追加が必要) | 非常に手軽(ブラウザベース、インストール不要) |
使いやすさ | 高い(豊富なライブラリと環境管理) | 高い(多機能エディタ、デバッグツールなど) | 高い(直感的なノートブックインターフェイス) |
個人的にPCで使う場合はAnaconda(+JupyterNotebook)、
Python以外も取り組む予定がある方や商用利用したい方はVisual Studio Code、
Googleと連携させたり、インストールせずに使いたい、iPadでも簡単に使いたいという方はGoogle Colabが選択肢になると思います。
Anacondaをインストールして使う方法
Anacondaは、科学計算やデータ科学に特化したPythonのディストリビューションであり、データ分析や機械学習、データ視覚化に必要なライブラリやツールを一括でインストールできます。
一気に分析などに必要なものをすべて準備できるためかなり便利です。
ただ、一つ注意点を挙げるとAnacondaは従業員の総数が200人未満の共通支配下にある事業体でしか商用利用できません。
この注意点を加味して利用していただきたいです。
下記が使用手順になります。
- Anacondaの公式サイトにアクセスします。
- お使いのオペレーティングシステム(Windows、macOS、Linux)に合わせてインストーラーをダウンロードします。
- ダウンロードしたインストーラーを開き、画面の指示に従ってインストールを進めます。インストール中には、AnacondaをシステムのPATH環境変数に追加するオプションに注意してください。
- インストール後、Anaconda Navigatorを起動して、インストールされているパッケージの確認や新しい環境の作成ができます。
詳しくはこちらの参考記事をご覧ください!
Visual Studio CodeでのPython開発環境構築
Visual Studio Code (VS Code) は、軽量で強力なソースコードエディタであり、Python開発にも広く利用されています。
無償で使えるので、仕事でも使えます。
後は昨日も多く、色んなカスタマイズもできるので、極めれば使いやすいエディタです。
参考記事は下記です。
Google ColabでのPythonの使い方
Google Colabの準備と使い方についてのガイドは以下の通りです。
Google Colabは、ブラウザ上でPythonコードを書き、実行できる無料のサービスで、特にデータ分析や機械学習の分野で人気があります。
Googleアカウントがあれば誰でも利用でき、設定やインストールが不要であるため、非常に手軽に使用できます。
Google Colabを使う手順としては下記のみです。
- Googleアカウントの作成: Google Colabを使用するにはGoogleアカウントが必要です。まだアカウントを持っていない場合は、Googleアカウント作成ページでアカウントを作成します。
- Google Colabにアクセス: ブラウザでGoogle Colabの公式サイトにアクセスします。
ブラウザで動くので、iPadやスマートフォンからでも動かすことができます!
iPadでPythonを使う方法は下記の記事になります。
この記事内により詳しくGoogle Colabを使う方法が記されているので是非ご確認いただきたいです。
基本的なグラフの種類と作成方法
Pythonを用いたデータ視覚化において、さまざまなグラフを作成することができます。
ここでは、棒グラフ、折れ線グラフと散布図、バブルチャート、縦折れ線グラフ、箱ひげ図、線形回帰式を使ったグラフ、そして3次元グラフの基本的な作成方法を紹介します。
詳細は各関連記事を見ていただければと思います。
これらのグラフを使うことで、データの比較、トレンドの可視化、関係性の調査、分布の概要などが把握できるようになります。
また、ここからの紹介するコードには下記の主要なライブラリである
- numpy
- pandas
- matplotlib
をインポートしている状態が前提です。
下記のコードを使うプログラムで実行しておいてください。
# 数値計算やデータフレーム操作に関するライブラリをインポートする
import numpy as np
import pandas as pd
# 図やグラフを図示するためのライブラリをインポートする。
import matplotlib.pyplot as plt
%matplotlib inline
棒グラフ
棒グラフは、カテゴリーごとの数値の大きさを比較するのに適しています。
例えば下記のようなコードで、Matplotlibを使用して簡単に作成できます。
categories = ['A', 'B', 'C', 'D']
values = [10, 20, 15, 5]
plt.bar(categories, values)
plt.title('カテゴリー別の値')
plt.xlabel('カテゴリー')
plt.ylabel('値')
plt.show()
棒グラフについてデータの下準備からプロット、見た目を整える装飾まで解説した記事はこちらになります。
折れ線グラフ(散布図)
折れ線グラフ(散布図)は、時間の経過に伴うデータポイントの変化を追跡するのに適しています。
散布図は、2つの連続変数間の関係を可視化するのに用いられます。
コードの例は下記です。
x = [1, 2, 3, 4]
y = [10, 20, 25, 30]
plt.plot(x, y) # 折れ線グラフ
plt.scatter(x, y) # 散布図
plt.title('折れ線グラフと散布図の例')
plt.xlabel('X軸')
plt.ylabel('Y軸')
plt.show()
Pythonを使って散布図を作成する具体的な方法はこちらの記事で詳しく解説しています!
散布図+分布
今度は次に少し応用としてmatplotlibではなく、seabornを使った散布図の作成方法について説明します。
numpy, matplotlib, seabornというものを使用して簡単に上記グラフが作成できます。
import seaborn as sns
# ランダムなデータを生成
x = np.random.randint(1, 100, 100)
y = np.random.randint(1, 100, 100)
z = np.random.randint(1, 3, 100)
data = np.array([x,y,z]).T
colname= ["x", "y", "type"]
# データフレームの作成
df = pd.DataFrame(data, columns=colname)
# データの表示(散布図とデータの分布ヒストグラム)
sns.pairplot(df, hue="type")
より詳しい内容はこちらの記事に書いてありますので、参考にしていただければと思います!
バブルチャート
続いては、散布図の応用で、マーカーの大きさに意味を持たせたバブルチャートのグラフ作成方法についてです。
x = np.arange(1,11)
y = np.random.randint(1, 10, 10)
size = np.random.randint(1, 10, 10)*30
group = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
data = np.array([x, y, size]).T
cols = ["x", "y", "size"]
df = pd.DataFrame(data, columns=cols)
df["group"] = group
plt.scatter("x", "y", s="size", data=df)
plt.xlabel('x')
plt.ylabel('y')
より詳しい内容はこちらの記事に書いてありますので、参考にしていただければと思います!
こちらの記事では下記のようなバブルチャートに、色を別で分ける方法や、テキスト装飾を追加する方法等についても解説しています!
縦折れ線グラフ
縦折れ線グラフは、複数の項目ののデータの推移を比較するのに適しています。
アンケート調査などの項目ごとの結果を複数グループで比較するなどの利用に向いています。
このグラフは、matplotlibのplot
関数を使用して作成しますが、複数の線を描画して比較します。
# グラフ用データの作成(例:10行5列のデータ)
data = np.random.randint(1, 10, (10, 5))
colname = ["A", "B", "C", "D", "E"]
df = pd.DataFrame(data, columns=colname)
colors = ["k", "b", "g", "y", "r"]
linestyles =["solid", "dotted", "dashdot", "dashed", "solid"]
# 縦折れ線グラフのプロット
for i in range(len(colname)):
plt.plot(df.iloc[:, i], "o", color=colors[i], mec='k', ls =linestyles[i], label=colname[i])
plt.xlabel("item", rotation=180)
plt.ylabel("value")
plt.xticks(range(10), rotation=90)
plt.yticks(rotation=90)
# plt.legend()
plt.legend(loc='upper center', bbox_to_anchor=(.5, -.15), ncol=5)
縦折れ線グラフのより詳しい内容はこちらの記事に書いてありますので、参考にしていただければと思います!
箱ひげ図
箱ひげ図は、データの分布、中央値、四分位数、外れ値を表示するのに使います。
集団データの実態をうまく読み取りながら折れ線グラフのように表現できるのがメリットです。
data = [[10, 15, 20, 25], [5, 15, 25, 35], [8, 22, 24, 29]]
plt.boxplot(data)
plt.title('箱ひげ図の例')
plt.show()
出力結果
箱ひげ図の、より詳しい内容はこちらの記事に書いてありますので、参考にしていただければと思います!
この記事を参考に進めると、下記のようなグラフまで作れるようになります!
線形回帰式(近似直線)グラフ
線形回帰グラフはある2変数の関係性の分析や将来の予測などに活用されます。
上記の例では、ある2変数(x, y)の関係性が線形的な直線で表せそうだったため
・その傾きなどを計算して、直線を追加
・当てはまりの良さ(R^2値)をテキストに記載
しています。
これらの計算には「LinearRegression」という関数を使用して線形回帰モデルを作成して求めています。
コードの例は下記になります。
from sklearn.linear_model import LinearRegression
# グラフ装飾用カラー
cm = plt.get_cmap("Set1")
# グラフ用データの作成
x = np.arange(1, 101)
y = np.random.randint(1, 30, 100) + x
# グラフ作成
plt.figure(figsize=(6,4), dpi=250)
plt.suptitle("Linear Regression", size=15)
plt.plot(x, y, "o", mec="k", label="y", color=cm(0), alpha=0.8)
# 線形回帰モデル、予測値、R^2の評価
lr = LinearRegression()
X = x.reshape((len(x), 1))
lr_lin = lr.fit(X, y)
y_lin_fit = lr_lin.predict(X)
r2_lin = lr.score(X, y)
# 予測式の描画
plt.plot(X, y_lin_fit, c=cm(0), lw=0.5, ls="--")
plt.text(X.max()*(0.2), y_lin_fit.max()*0.7, '$ R^{2} $=' + str(round(r2_lin, 3)), c=cm(0))
plt.xlabel("x [-]")
plt.ylabel("y [-]")
plt.legend()
# グラフの保存
plt.savefig("forecast.png")
線形回帰式の作成方法やグラフの作り方の、より詳しい内容はこちらの記事に書いてありますので、参考にしていただければと思います!
3次元グラフ
# データの用意
x = np.random.randint(1, 10, 10)
y = np.random.randint(10, 50, 10)
z = np.random.randint(100, 200, 10)
# 3次元散布図
# Figureを追加
fig = plt.figure(figsize = (5, 5))
# 3DAxesを追加
ax = fig.add_subplot(projection='3d')
ax.scatter(x, y, z)
# 軸ラベルを設定
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")
箱ひげ図の、より詳しい内容はこちらの記事に書いてありますので、参考にしていただければと思います!
この記事の中では、x, y, zの散布図の単純なプロットだけでなく局面や格子点の作成についても解説しています!
曲面グラフ ↑
格子点(ワイヤーフレーム)↑
Matplotlibを使ったグラフの装飾とカスタマイズ
以上までで、Pythonで主にMatplotlibで様々な種類のグラフを作成する方法について解説しました。
本章では、Matplotlibの装飾について少し紹介していきます。
これにより、グラフを自分のお好みにカスタマイズしていくことが可能です。
グラフに線の追加
グラフに追加的な線を描画するには、axhline
やaxvline
、plot
関数を使用します。
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.axhline(y=5, color='r', linestyle='--') # 水平線
plt.axvline(x=2, color='g', linestyle=':') # 垂直線
グラフに背景色の追加
グラフの背景色を設定するには、set_facecolor
メソッドを使用します。
fig, ax = plt.subplots()
ax.set_facecolor('#eafff5')
こんな感じで背景色を入れることができます。
また、ある範囲だけ背景色を入れてグラフ中の何かの範囲を視覚的に示したい場合は、axvspan(xmin, xmax)などを使います。
plt.axvspan(3, 4, color="gray", alpha=0.3)
この範囲を使うと下記のようなグラフも作れます。
より詳しい内容はこちらの記事に書いてありますので、参考にしていただければと思います!
グラフに文字の追加
特定のポイントに注釈を加えたい場合は、text
関数を使用してグラフにテキストを追加します。
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.axhline(y=5, color='r', linestyle='--') # 水平線
plt.axvline(x=2, color='g', linestyle=':') # 垂直線
plt.text(2, 8, 'Sample Text', style='italic')
先ほどの線形回帰の式で記載した「R2値」に関しても、データから算出した値をテキストでグラフ内に打ち込んでいます。
詳しい方法については、下記の記事に書いていますので参考にしてください。
グラフのカラーマップ(cmap)の使い方と種類まとめ
装飾で色を変更することが多くあるかと思います。
その時に知っておいてもらいたい考えが「カラーマップ(cmap)」になります。
例えば下記のコードで「cool」というカラーマップを設定できます。
cm = plt.get_cmap("cool")
cm
カラーマップの使い方と種類まとめはこちらの記事で解説していますので、是非ご一読をお願い たいです。
自作カラーマップの作成方法も解説しています。
簡単にテーマに沿ったカラーを設定できるので、非常に便利です。
グラフ装飾のデフォルト設定の変更
Matplotlibでは、rcParams
を通じてグラフのデフォルト設定(フォントサイズ、色、スタイル等)をカスタマイズできます。
変更できる項目の例は、下記の通りです。
- 図のサイズ、解像度の設定
- フォント設定
- 軸周りの設定
- 凡例の設定
- マーカーの設定
具体的な例としては、下記のコードを初めに実行しておくことで、その後に作成するグラフで指定の装飾がデフォルトで反映されるようになります。
いちいち作成したグラフに一つ一つにコードを追加する必要はなく、
下記のコードをプログラム内で一度読み込めば後はずっと反映されるので大変便利です。
# 1. 図のサイズ、解像度の設定
plt.rcParams['figure.figsize'] = (10, 5)
plt.rcParams['figure.dpi']= 160
# 2. フォント設定
plt.rcParams['font.size'] = 14
plt.rcParams['font.family']= 'sans-serif'
plt.rcParams['font.sans-serif'] = 'Arial'
# 3. 軸周りの設定
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'
plt.rcParams['xtick.major.width'] = 1.2
plt.rcParams['ytick.major.width'] = 1.2
plt.rcParams['axes.linewidth'] = 1.2
plt.rcParams['axes.grid']=True
plt.rcParams['grid.linestyle']='--'
plt.rcParams['grid.linewidth'] = 0.3
# 4. 凡例の設定
plt.rcParams["legend.markerscale"] = 2
plt.rcParams["legend.fancybox"] = False
plt.rcParams["legend.framealpha"] = 1
plt.rcParams["legend.edgecolor"] = 'black'
# 5. マーカーの設定
plt.rcParams["lines.markeredgecolor"] = "black"
plt.rcParams["lines.markeredgewidth"] = 0.5
詳しい内容についてはこちらの記事で解説しています!
Pythonでグラフを作成することを多くしていきたいと考えているのなら、
必須の知識と思いますので、ぜひ読んでいただければ幸いです!
Matplotlib公式チートシートの紹介・活用
Matplotlibの公式チートシートは、グラフ作成時のさまざまな機能やコマンドを簡潔にまとめた便利なリソースです。
Matplotlib cheatsheets — Visualization with Python
このチートシートには、グラフの基本的な作成から、装飾、カスタマイズの方法までが含まれており、初心者から上級者まで幅広く利用されています。Matplotlibの公式ウェブサイトまたはGitHubリポジトリで入手できます。
これらの技術を駆使することで、Matplotlibを用いたデータの視覚化をより魅力的かつインパクトのあるものに変えることができます。
データを効果的に伝えるために、これらの装飲とカスタマイズ技法を積極的に利用しましょう。
詳しい内容についてはこちらの記事で解説しています!
グラフの保存方法
基本的なグラフの保存方法
Matplotlibで作成したグラフを保存する方法は、非常にシンプルで直感的です。
主にsavefig()
関数を使用して、さまざまな形式(PNG, JPEG, SVG, PDFなど)でグラフを保存することができます。
# グラフを作成
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
# グラフをPNG形式で保存。ファイル名は 'figure.png'
plt.savefig('figure.png')
コード実行後は、プログラムと同じフォルダ内に画像ファイルが保存されています。
PDFで図をまとめて保存する方法
プロジェクトの報告やドキュメント作成の際に、作成したグラフや図表をPDF形式でまとめて保存することは非常に便利です。
Pythonでは、matplotlib
とPdfPages
を組み合わせることで、複数のグラフを一つのPDFファイルにまとめて出力することができます。
①PDF1枚に対してグラフ一枚を保存する場合
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
with PdfPages('output.pdf') as pdf:
for i in range(5):
fig, ax = plt.subplots()
ax.plot(range(10), [i*j for j in range(10)])
pdf.savefig(fig)
plt.close()
②PDF一枚に複数グラフをまとめる場合
例は下記の通りです。
# PdfPagesをimport
from matplotlib.backends.backend_pdf import PdfPages
data = np.random.randint(10, 50, (5, 10)) # ランダムな数値
cols = ["data_{}".format(n) for n in range(1,11)] # データ列名の作成
# データフレームの作成
df = pd.DataFrame(data, columns=cols)
# pdfインスタンス作成
pdf = PdfPages("all_plots2.pdf")
fig, axes = plt.subplots(nrows=5, ncols=2, figsize=(8, 10))
for i in range(10):
# 複数行列を作る場合
axes[i//2, i%2].plot(df[cols[i]], "o-", markersize=10, markeredgecolor = "black", color='Red')
axes[i//2, i%2].set_ylabel(cols[i])
axes[i//2, i%2].set_title(cols[i])
axes[i//2, i%2].set_yticks([0, 10, 20, 30, 40, 50])
fig.tight_layout()
pdf.savefig(fig)
pdf.close()
実行結果
詳しい内容についてはこちらの記事で解説しています!
まとめ
Pythonを使ったグラフ作成方法は本当に様々!
データの視覚化は、データを理解し、他者に伝えるための非常に強力な手段です。
Pythonを用いることで非常に簡単に様々んグラフを作成してデータを表現できます。
Pythonによるグラフ作成は、効率性と柔軟性から特に有用であることを感じていただけたのではないでしょうか。
継続的な学習と実践のススメ
データ視覚化の分野は常に進化しており、新しいツールや技術が続々と登場しています。
効果的なグラフ作成スキルを維持・向上させるためには、継続的な学習と実践が不可欠です。
自分も日々情報収集をするように癖つけています。
オンラインコース、チュートリアル、コミュニティに参加することで、最新のトレンドを学び、実践的なスキルを磨く良い手段になると思います!
・もっと柔軟で汎用的なPythonのスキルを高めて効率的に業務を行いたい
・高度なPythonを中心としたプログラミングをより体系的に学びたい
と言う方向けに、おすすめのオンラインスクールを2つ厳選して紹介していますので、こちらもよければご覧ください!
自分も一度体系的にPythonを学んだことで、一気に日々の業務や人生が変わったと感じています!
以上、ここまでお読みいただき、ありがとうございました!
コメント