ホーム»プログラミング» 【プログラミング】[Python]ライブラリを使って簡単なグラフを表示する方法
a

【プログラミング】[Python]ライブラリを使って簡単なグラフを表示する方法

プログラミング
<strong>komori</strong>
komori

こんにちは。

今回はPythonのライブラリを使ってグラフを表示してみようと思います。

視覚的に分かりやすいものが作れるようになると学習中の達成感にもつながります。

<strong>Deviko</strong>
Deviko

身近なグラフをPythonでつくれるようになるとグッと親近感が湧くわね♡

<strong>komori</strong>
komori

最近、人気のデータ分析では色々なグラフを使ったりして比較を行うことも多いです。

そのため、プログラムの書き方を抑えて使えるととても便利です。

先ずは簡単なものから使えるようになっていきましょう。

この記事は下記の方に特にオススメです。

  • Pythonをもっと実用的な場面で使いたいけど、難しいことは出来ない
  • Pythonのライブラリを使ってどんな事が出来るかを知りたい
  • 会社などでグラフィカルな資料作成をしてみたい。またはデータ分析に興味がある

環境を準備する:Python外部ライブラリをインストール

Pythonライブラリについて

Pythonではライブラリと言われる特殊な機能を持つプログラムをまとめたものがあります。

また、ライブラリの中でもPythonに既にインストールされている標準ライブラリと個別にインストールが必要な外部ライブラリが存在します。

ライブラリは沢山あるため全てを覚える必要はありません。
目的とするプログラムを作る際にインターネットで調べれば殆どのものは見つかることでしょう。

例えば、エクセルファイルを読み書きしたいインターネットのWebサイトから情報を収集したいとか、メール送信を自動化したいなどの何がしたいかと言った点から調べていくと良いと思います。


今回のグラフを表示するために便利な外部ライブラリがありますので、まずはこちらをインストールしてきましょう。

Pythonライブラリのインストール方法

外部ライブラリのインストール方法については、ターミナル(Windowsの場合にはコマンドプロンプト)にて、pipコマンドを使ってください。

今回の記事で紹介しているグラフ表示とデータフレーム処理で使っているライブラリのインストールするために下記を実行してください。

macならアプリ検索で「ターミナル」と入力、Windows場合は「コマンド プロンプト」と入力してアプリを起動してください。

◆matplotlib(マットプロットリブ)をインストール

pip install matplotlib

◆seaborn(シーボーン)をインストール

pip install seaborn

◆pandas(パンダス)をインストール

pip install pandas

全てインストールが出来たら完了です。

これでライブラリは使用可能になりましたので、次から実際のPythonコードでライブラリを使う方法をみていきましょう。

Pythonでグラフを表示する(折れ線グラフ)

<strong>komori</strong>
komori

先ずは今回書いてみたコード全文を見てみましょう。

部分ごとの解説は後ほど行います。

入力コード

import matplotlib.pyplot as plt
import japanize_matplotlib #matplotlib を日本語表示に対応するモジュールインポート
import seaborn as sns

sns.set(style='darkgrid',font='Yu Gothic')

x1 =['2022/6','2022/7','2022/8','2022/9','2022/10']
y1 =[20,22,19,20,23]
x2 =['2022/6','2022/7','2022/8','2022/9','2022/10']
y2 =[19,21,20,21,19]
x3 =['2022/6','2022/7','2022/8','2022/9','2022/10']
y3 =[22,19,20,22,21]
x4 =['2022/6','2022/7','2022/8','2022/9','2022/10']
y4 =[21,20,21,22,18]

plt.figure(figsize=(15,5))
plt.title('各スタッフ出勤状況比較')
plt.xlabel('月')
plt.ylabel('出勤日数')
plt.plot(x1, y1,label ='Aさん')
plt.plot(x2, y2,label ='Bさん')
plt.plot(x3, y3,label ='Cさん')
plt.plot(x4, y4,label ='Dさん')
plt.legend()
plt.show()

実行結果

<strong>Deviko</strong>
Deviko

色んな場面でよく見かける折れ線グラフよね。

<strong>komori</strong>
komori

折れ線グラフは時系列で数値の増減や比較する時によく使われるグラフです。

今回はサンプルとしてAさん・Bさん・Cさん・Dさんの出勤状況のデータを作って、グラフに表示してみました。

グラフ表示に必要なライブラリをインポート

import matplotlib.pyplot as plt
import japanize_matplotlib #matplotlib を日本語表示に対応するモジュールインポート
import seaborn as sns
<strong>komori</strong>
komori

ライブラリとは特定の機能をまとめたプログラムであり、Pythonライブラリのインストール方法で取得したライブラリを使うためのコードとなります。


「 import ライブラリ名 as ●● 」といった書き方になります。
ライブラリ名に入力したものを●●として使っていきますよと宣言する様なイメージです。

ライブラリ名を覚える必要はありませんが、参考までに今回使用しているライブラリの参照ページを掲載しておきます。

ライブラリ名参照ページ
matplotlibhttps://matplotlib.org/stable/api/pyplot_summary.html?highlight=pyplot#module-matplotlib.pyplot
seabornhttps://seaborn.pydata.org/api.html
pandashttps://pandas.pydata.org/docs/index.html

コード全文から該当する箇所のみを抜粋して見てみましょう。

入力コード

import matplotlib.pyplot as plt
import japanize_matplotlib #matplotlib を日本語表示に対応するモジュールインポート
import seaborn as sns

sns.set(style='darkgrid',font='Yu Gothic')

コード内の1行目、import matplotlib.pyplot as pltは、ライブラリの「matplotlib.pyplot」とインポートして、「Plt」として使えるようにします。といったコードになっています。

3行目のimport seaborn as snsも1行目同様にライブラリの「seaborn」とインポートして、「sns」として使えるようにします。といったコードになっています。

2行目・4行目はそれぞれのライブラリが日本語表示に対応するための基本設定コードです。

<strong>komori</strong>
komori

冒頭に書いておけばOKです。

これで今回使用するライブラリを使うための準備ができました。

続いてグラフの中身となるデータを作ってきましょう。

グラフにするデータを作る

<strong>Deviko</strong>
Deviko

今度はグラフのもととなるデータを作っていくのね。

今回はサンプルとして職場の出勤状況を比較するグラフを表示したいので、4名のスタッフの2022年6月から10月までの出勤日数をデータにしてみました。

入力コード

#Aさんの出勤状況データ
x1 =['2022/6','2022/7','2022/8','2022/9','2022/10']
y1 =[20,22,19,20,23]

#Bさんの出勤状況データ
x2 =['2022/6','2022/7','2022/8','2022/9','2022/10']
y2 =[19,21,20,21,19]

#Cさんの出勤状況データ
x3 =['2022/6','2022/7','2022/8','2022/9','2022/10']
y3 =[22,19,20,22,21]

#Dさんの出勤状況データ
x4 =['2022/6','2022/7','2022/8','2022/9','2022/10']
y4 =[21,20,21,22,18]
<strong>komori</strong>
komori

グラフ上のX(横)軸に月のデータを変数に代入し、Y(縦)軸には出勤した日数をデータとして変数に代入しています。

注:X軸は全て共通なのでサンプルの様に4つわけて作る必要はありませんが、今回は敢えてそれぞれのデータを作成しています。

ライブラリの準備(インポート)やデータの作成が完了しました。

いよいよグラフを表示するために必要なコードを書いていきましょう。

グラフを表示するコードを書く

<strong>komori</strong>
komori

準備が整いましたので、仕上げとしてデータをグラフに落とし込んで表示してみましょう。

上から順番にグラフ全体に関わる設定を書き、それぞれのデータをセットし、最後にグラフに出力するためのコードといった流れで書いています。

入力コード

#グラフ全体表示に関する設定コード
plt.figure(figsize=(15,5))
plt.title('各スタッフ出勤状況比較')
plt.xlabel('月')
plt.ylabel('出勤日数')

#個別のデータのセットとラベル名をつけるためのコード
plt.plot(x1, y1,label ='Aさん')
plt.plot(x2, y2,label ='Bさん')
plt.plot(x3, y3,label ='Cさん')
plt.plot(x4, y4,label ='Dさん')

#凡例を表示するためのコード
plt.legend()

#出力するコード
plt.show()
<strong>Deviko</strong>
Deviko

ライブラリの準備
データの作成
グラフの表示

分けて見てみると書き方は簡単ね♡

Pythonでグラフを表示するコード(折れ線グラフ2)

<strong>komori</strong>
komori

さて、先ほどは一つのグラフに4つのデータが表示されていて各スタッフの出勤状況を比較しやすいグラフとして表示しましたね。

今度はそれぞれ個別のグラフにして別々に表示するコードを書いてみます。

入力コード

import matplotlib.pyplot as plt
import japanize_matplotlib #matplotlib を日本語表示に対応するモジュールインポート
import seaborn as sns

sns.set(style='darkgrid',font='Yu Gothic')

#グラフの元となるデータ
x1 =['2022/6','2022/7','2022/8','2022/9','2022/10']
y1 =[20,22,19,20,23]
x2 =['2022/6','2022/7','2022/8','2022/9','2022/10']
y2 =[19,21,20,21,19]
x3 =['2022/6','2022/7','2022/8','2022/9','2022/10']
y3 =[22,19,20,22,21]
x4 =['2022/6','2022/7','2022/8','2022/9','2022/10']
y4 =[21,20,21,22,18]

#グラフ全体設定
plt.figure(figsize=(18,13))

#グラフ左上
plt.subplot(2, 2, 1)
plt.title('Aさん出勤状況')
plt.xlabel('月')
plt.ylabel('出勤日数')
plt.plot(x1, y1)

#グラフ右上
plt.subplot(2, 2, 2)
plt.title('Bさん出勤状況')
plt.xlabel('月')
plt.ylabel('出勤日数')
plt.plot(x2, y2,color="orange")

#グラフ左下
plt.subplot(2, 2, 3)
plt.title('Cさん出勤状況')
plt.xlabel('月')
plt.ylabel('出勤日数')
plt.plot(x3, y3,color="green")

#グラフ右下
plt.subplot(2, 2, 4)
plt.title('Dさん出勤状況')
plt.xlabel('月')
plt.ylabel('出勤日数')
plt.plot(x4, y4,color="red")

実行結果

<strong>Deviko</strong>
Deviko

Aさん、Bさん、Cさん、Dさんの出勤状況がそれぞれのグラフで表示されているわね♡

<strong>komori</strong>
komori

1つめのコードと違っている点は、グラフを出力するための部分のみです。

ライブラリのインポート部分やデータの作成に使ったコードはそのままですので説明は割愛します。

グラフを表示するコードを書く

<strong>komori</strong>
komori

コードが長くなっていますが、それぞれのグラフの設定部分でコードを書いているためです。

コードは上から「グラフの全体設定」をおこない、表示領域を4分割にしてそれぞれの出勤状況データをグラフにして表示している様なイメージです。

入力コード

#グラフ全体設定
plt.figure(figsize=(18,13))

#グラフ左上
plt.subplot(2, 2, 1)
plt.title('Aさん出勤状況')
plt.xlabel('月')
plt.ylabel('出勤日数')
plt.plot(x1, y1)

#グラフ右上
plt.subplot(2, 2, 2)
plt.title('Bさん出勤状況')
plt.xlabel('月')
plt.ylabel('出勤日数')
plt.plot(x2, y2,color="orange")

#グラフ左下
plt.subplot(2, 2, 3)
plt.title('Cさん出勤状況')
plt.xlabel('月')
plt.ylabel('出勤日数')
plt.plot(x3, y3,color="green")

#グラフ右下
plt.subplot(2, 2, 4)
plt.title('Dさん出勤状況')
plt.xlabel('月')
plt.ylabel('出勤日数')
plt.plot(x4, y4,color="red")

グラフの表示位置を決定しているコードは下記です。

plt.subplot(2, 2, 1)の()内の引数は、
行数・列数・位置となっていて、左上から番号を割り振られています。

上のコード場合は1枚の紙を4分割にして、左上の位置に表示するといった意味になります。

※グラフの色に合わせてそれぞれの表示領域を着色しています。

それ以外のコードとして、下記を設定するために書いています。
●plt.title() …グラフのタイトルを付与します。
 例:Aさん出勤状況など

●plt.xlabel() …グラフのX(横)軸のタイトルを付与します。
 例:月など

●plt.ylabel() …グラフのY(縦)軸のタイトルを付与します。
 例:出勤日数など

●plt.plot()
 例:引数はX軸とY軸のデータ(値)を指定、colorはグラフの色を指定しています。

Pythonでグラフを表示する(円グラフ)

<strong>komori</strong>
komori

今度は円グラフを表示するコードを書いてみましょう。

今回は3人の4月~6月の売上金額と合計金額をグラフにしてみます。

コードの書く順番は以下のとおり、それぞれのブロック別に見ていけば読み取りやすくなります。

1.ライブラリのインポートや準備するブロック

2.グラフに表示するデータを作成するブロック


3.それぞれのデータをグラフ化するブロック

入力コード

#円グラフを表示するコード全文
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib #matplotlib を日本語表示に対応するモジュールインポート
import seaborn as sns   
sns.set(style='darkgrid',font='Yu Gothic')

data ={'4月売上金額':[2200,550,2250],
       '5月売上金額':[1450,6500,2000],
       '6月売上金額':[4000,1900,2500],
      }
idx = ['Aさん','Bさん','Cさん']
df = pd.DataFrame(data,index=idx)
colors = ["red", "gold", "green"]

plt.figure(figsize=(25,20))
#4月売上
plt.subplot(1,4,1)
df['4月売上金額'].plot.pie(startangle=90, counterclock=False, colors=colors,labeldistance=0.7,autopct="%1.1f%%")
plt.title('売上割合')

#5月売上
plt.subplot(1,4,2)
df['5月売上金額'].plot.pie(startangle=90, counterclock=False,colors=colors,labeldistance=0.7,autopct="%1.1f%%")
plt.title('売上割合')

#6月売上
plt.subplot(1,4,3)
df['6月売上金額'].plot.pie(startangle=90, counterclock=False,colors=colors,labeldistance=0.7,autopct="%1.1f%%")
plt.title('売上割合')

df['売上合計']= df.sum(axis = 1)#行

#合計
plt.subplot(1,4,4)
df['売上合計'].plot.pie(startangle=90, counterclock=False,colors=colors,labeldistance=0.7,autopct="%1.1f%%")
plt.title('売上割合')

plt.show()
display(df)

実行結果

4月~6月の売上割合をそれぞれ円グラフに、更に3ヵ月合計の割合を円グラフにしたもの

グラフ表示に必要なライブラリをインポート

<strong>komori</strong>
komori

今度はデータフレーム(表)を使ったので、新たに「Pandas(パンダス)」を追加して使っています。
エクセルデータの読み書きができたりするのでとても便利なライブラリです。

入力コード

import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib #matplotlib を日本語表示に対応するモジュールインポート
import seaborn as sns   
sns.set(style='darkgrid',font='Yu Gothic')
<strong>Deviko</strong>
Deviko

赤くなっている文字の部分が新たに追記した部分ね・・・パンダ?♡

pandasの特徴等については以下のとおりです。

特徴
・データ操作のための高速で効率的なデータフレーム (DataFrame) オブジェクト

・メモリ内のデータ構造とその他のフォーマットのデータ間で相互に読み書きするためのツール群。フォーマット例: CSV、テキストファイル、Excel、SQLデータベース、HDF5フォーマットなど

・データの調整および統合された欠損値処理

・ラベルに基づいたスライス、fancyインデクシング、巨大なデータセットのサブセット取得

・データセットに対するsplit-apply-combine操作を可能にするエンジンが提供するpowerful groupを使ったデータの集計および変換

・高性能なデータセットのマージと結合

・時系列データ: 日付範囲生成[4]、周波数変換、移動窓を用いた統計値や線形回帰、シフトと遅延、など

・パフォーマンスのための高度な最適化。重要なコードはCythonまたはC言語で実装されている[5]。


wikipediaより引用

グラフにするデータを作る

<strong>komori</strong>
komori

グラフにするためのデータを作るためのコードは以下のとおり。

dataの中身4月~6月の売上金額となっており、それぞれの列が’Aさん’、’Bさん’、’Cさん’となるように書いています。

入力コード

data ={'4月売上金額':[2200,550,2250],
       '5月売上金額':[1450,6500,2000],
       '6月売上金額':[4000,1900,2500],
      }
idx = ['Aさん','Bさん','Cさん']
df = pd.DataFrame(data,index=idx)
colors = ["red", "gold", "green"]

この時点でのデータフレーム(表)は以下のとおりです。
コード内の”idx = [‘Aさん’,’Bさん’,’Cさん’]“でリストデータを作っています。
その後に”df = pd.DataFrame(data,index=idx)“で最左列(インデックス)にAさん、Bさん、Cさんのリストデータを指定しています。

4月売上金額5月売上金額6月売上金額
Aさん220014504000
Bさん55065001900
Cさん225020002500
グラフにするデータを表にしたもの。売上合計は後のコードで表にくっつけています。
<strong>Deviko</strong>
Deviko

この時点では合計はついていないのね♡

<strong>komori</strong>
komori

最後の行のコード「colors = [“red”, “gold”, “green”]」はグラフの色をリストデータにしているだけですので書かなくてもOKです。

グラフを表示するコードを書く

<strong>Deviko</strong>
Deviko

グラフを表示する準備・グラフのデータを作るがおわったから、いよいよグラフを表示していくわけね♡

入力コード

plt.figure(figsize=(25,20))
#4月売上
plt.subplot(1,4,1)
df['4月売上金額'].plot.pie(startangle=90, counterclock=False, colors=colors,labeldistance=0.7,autopct="%1.1f%%")
plt.title('売上割合')

#5月売上
plt.subplot(1,4,2)
df['5月売上金額'].plot.pie(startangle=90, counterclock=False,colors=colors,labeldistance=0.7,autopct="%1.1f%%")
plt.title('売上割合')

#6月売上
plt.subplot(1,4,3)
df['6月売上金額'].plot.pie(startangle=90, counterclock=False,colors=colors,labeldistance=0.7,autopct="%1.1f%%")
plt.title('売上割合')

df['売上合計']= df.sum(axis = 1)#行
※Aさん、Bさん、Cさんの行を合計して、"売上合計"の列を表に付け加える。

#合計
plt.subplot(1,4,4)
df['売上合計'].plot.pie(startangle=90, counterclock=False,colors=colors,labeldistance=0.7,autopct="%1.1f%%")
plt.title('売上割合')

plt.show() #グラフを出力する
display(df) #売上合計を追加した表を出力する
<strong>komori</strong>
komori

こちらもコードが長く見えますが、グラフを4つ表示しているためです。
上から順に4月売上、5月売上、6月売上の列を指定して円グラフに表示しています。

円グラフの場合は「.plot.pie」と書いているところもポイントです。

データフレーム(表)の更新

4月売上金額5月売上金額6月売上金額
Aさん220014504000
Bさん55065001900
Cさん225020002500

df[‘売上合計’]= df.sum(axis = 1)#行
上記にてデータフレーム(表)に売上合計の列を付け加えて、中身は各行を足し算した値に指定。
これを実施した後にデータフレーム(表)は以下のとおりとなります。

4月売上金額5月売上金額6月売上金額売上合計
Aさん2200145040007650
Bさん550650019008950
Cさん2250200025006750
一番右側にAさん、Bさん、Cさんの合計金額を列を追加

Pythonでグラフを表示する(縦棒グラフ)

<strong>komori</strong>
komori

続いて縦棒グラフも作ってみましょう。縦棒グラフの場合は「plt.bar」と書きます。

入力コード

import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib #matplotlib を日本語表示に対応するモジュールインポート
import seaborn as sns   
sns.set(style='darkgrid',font='Yu Gothic')


data={
    'Aさん':[65,80,78,63,52],
    'Bさん':[80,45,67,30,97],
    'Cさん':[28,97,80,70,35],
}

idx=["国語","数学","英語","理科","社会"]
df = pd.DataFrame(data,index=idx)

display(df)

plt.figure(figsize=(20,3))
plt.subplot(1,3,1)
plt.title('Aさんの教科別点数')
plt.bar(idx,df['Aさん'],color="red")

plt.subplot(1,3,2)
plt.title('Bさんの教科別点数')
plt.bar(idx,df['Bさん'],color="blue")

plt.subplot(1,3,3)
plt.title('Cさんの教科別点数')
plt.bar(idx,df['Cさん'],color="gold")

ax = df.plot.bar(title="AさんとBさんの比較",figsize=(20,2.5),rot=0, color={'Aさん': 'red', 'Bさん': 'blue','Cさん':'gold'})

実行結果

<strong>Deviko</strong>
Deviko

凄いカラフルなグラフになっているわね♡

<strong>komori</strong>
komori

Aさん、Bさん、Cさんの教科別点数のグラフでは、それぞれの長所や短所も見えてきます。
例えばBさんは文系科目の点数が高く、Cさんは理系の教科が得意そうだ。など

また、最後に3人の点数を比較をしたグラフを表示していますので、それぞれの人の点数を目で見て比較しやすくしています。

グラフを表示するコードを書く

<strong>komori</strong>
komori

グラフ表示部分だけのコードを抜き出すと以下のとおりです。

内容を確認していきましょう。

plt.figure(figsize=(20,3))
plt.subplot(1,3,1)
plt.title('Aさんの教科別点数')
plt.bar(idx,df['Aさん'],color="red")

plt.subplot(1,3,2)
plt.title('Bさんの教科別点数')
plt.bar(idx,df['Bさん'],color="blue")

plt.subplot(1,3,3)
plt.title('Cさんの教科別点数')
plt.bar(idx,df['Cさん'],color="gold")

ax = df.plot.bar(title="AさんとBさんの比較",figsize=(20,2.5),rot=0, color={'Aさん': 'red', 'Bさん': 'blue','Cさん':'gold'})

基本的には他のグラフを表示する方法と違いはなくplt.XXX(x軸,y軸,系列の色)」の’XXX‘部分でグラフの種類を指定していることになります。

赤色で記載している部分はAさん、Bさん、Cさんを比較するグラフを表示する部分になります。

これまでの書き方と比べると少し異なる部分となりますが、本記事はあくまで簡単なグラフ表示をするためのPythonコードをご紹介する内容に留めたいので、ここでは細かく説明はしませんが複数のY軸を持つ縦棒グラフを表示する場合はこういった書き方があるくらいの感覚で見ておいてくださいね。

Pythonでグラフ表示するまとめ

今回はPythonのライブラリ「matplotlib.pyplot」と「seaborn」更に「pandas」を使ってグラフを表示してみました。

Excelなどでグラフを作成することに慣れている方などにとっては、イメージしているより簡単だったのではないでしょうか。

今回実際にご紹介したものも含め、下記のようなグラフを表示することができます。

グラフの種類コードで指定する方法
折れ線グラフplt.plot
ヒストグラムplt.hist
棒グラフplt.bar
円グラフplt.pie
箱ひげ図plt.boxplot
散布図plt.scatter
※グラフ種類を網羅している訳ではございませんので予めご了承下さい。。


本ブログ上ではサンプルデータを用いてグラフを作成してみましたが、応用して実務で使うようなデータなどを取り入れてみると面白いかもしれません。

さいごに今回の記事を書く上で参考にした本は上記となります。

対話形式で読み進められるので、初心者に読みやすい内容となっています。
1年生からシリーズ化しており、今回参考にした2年生は二種類あります。

◆スクレイピングのしくみ
◆データ分析のしくみ(※今回の記事で参考にしたもの)


より詳細にデータ分析を学んでみたい方はこちらを読んでみるのも良いかと思います。

コメント

タイトルとURLをコピーしました