Python {Article004}

ようこそ「Python」へ...

MS AccessのデータベースをPython Pandasに取り込んでMatplotlibで棒グラフを描くには【Python】

ここではPythonを使用してMicrosoft AccessのデータベースをPandasに取り込む手順を解説します。 さらに、PandasのDataFrameに取り込んだデータをMatplotlibで棒グラフとして描きます。 棒グラフのタイトル、ラベル、凡例等の設定方法についても説明します。 棒グラフのタイトルを日本語で表示させる方法についても解説します。 描画した棒グラフをカスタマイズして保存する方法についても述べます。 MS AccessのデータベースをPandasに取り込むには、Pyodbc、Pandasのライブラリが必要になります。 また、棒グラフを描画するにはMatplotlib、Numpy(オプション)のライブラリも必要になります。

説明文の左側に図の画像が表示されていますが縮小されています。 画像を拡大するにはマウスを画像上に移動してクリックします。 画像が拡大表示されます。拡大された画像を閉じるには右上の[X]をクリックします。 画像の任意の場所をクリックして閉じることもできます。

Pyodbc、Pandas、Mapplotlib、Numpyをインストールする

  1. Windowsのコマンドプロンプトを開く

    click image to zoom!
    図1
    Windowsの「スタート」ボタンをクリックしたら「Windows システム ツール」をクリックして展開します。 そして、「コマンドプロンプト」をクリックします。これでコマンドプロンプトのウィンドウが開きます。
  2. Pyodbc、Pandas、Matplotlib、Numpyをインストールする

    cd C:\Users\XPS8910\AppData\Local\Programs\Python\Python39-32\Scripts
    pip install pyodbc
    pip install pandas
    pip install matplotlib
    pip install numpy
    
    click image to zoom!
    図2
    コマンドプロンプトに「cd C:\Users\...\Python39-32\Scripts」をコピペ(Copy & Paste)してリターンを押します。 コマンドプロンプトに 「pip install pyodbc」、「pip install pandas」、「pip install matplotlib」、「pip install numpy」 を入力してライブラリをインストールします。

Matplotlibで棒グラフを描画する

  1. まずはシンプルな棒グラフを描いて見る

    Visual Studio Code(VSC)を起動したら以下のコードを入力して起動します。 VSCをまだインストールしていないときは、「記事(Article001)」をクリックしてインストールしてください。 行1-6ではPythonのライブラリを取り込んでいます。 行9では棒グラフのタイトル、ラベル、凡例などに日本語が使えるように日本語のフォントを設定しています。 この設定を行わないと日本語が表示されません。 ここでは「font.family」に「Yu Gothic」を設定しています。 それぞれのPCの環境に合わせてフォント名を書き換えてください。 行12では棒グラフのX軸のラベルを設定しています。 行13ではY軸の値を設定しています。 行14ではMatplotlibのbar()メソッドを実行して棒グラフを描画しています。 行15ではMatplotlibのshow()メソッドを実行して棒グラフを画面に表示しています。
    # Load the necessary libraries
    import pyodbc as pyo
    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib.style as style
    import numpy as np
    
    # Set the font to support Japanese
    plt.rcParams['font.family'] = 'Yu Gothic'  # Meiryo, Yu Gothic
    
    # Draw simple bar chart
    labels = ['A', 'B', 'C']
    values = [1,4,2]
    plt.bar(labels, values)
    plt.show()
    click image to zoom!
    図3
    図3はplt.show()の実行結果です。シンプルな棒グラフが表示されました。
  2. 棒グラフの色を変えてタイトル、ラベルを追加する

    行4では棒グラフの色を「緑」に変えています。 行7では棒グラフのタイトルを追加しています。 行8-9ではX軸とY軸のラベルを追加しています。
    plt.bar(labels, values)
    
    # Change bar color
    plt.bar(labels, values, color='green')
    
    # Add title, x-y lables
    plt.title('My first bar chart: 初めての棒グラフ')
    plt.xlabel('x axis(x軸)')
    plt.ylabel('y axis(y軸)')
    
    plt.show()
    click image to zoom!
    図4
    図4はplt.show()の実行結果です。 棒グラフの色が「緑」に変わりました。 そして棒グラフにタイトルとX軸、Y軸のラベルが表示されました。
  3. 棒グラフを特定の文字で塗りつぶしてグリッドを追加する

    行2では棒グラフにグリッドを追加しています。 行5-8では棒グラフを特定の文字「/,o,*」で塗りつぶしています。
    # Add grid
    plt.grid(True)
    
    # Add hatch (/, o, *)
    bars = plt.bar(labels, values)
    bars[0].set_hatch('/')
    bars[1].set_hatch('o')
    bars[2].set_hatch('*')
    
    plt.show()
    click image to zoom!
    図5
    図5はplt.show()の実行結果です。 棒グラフにグリッドが追加されています。 さらにA、B、Cの棒グラフが「/,o,*」の文字で塗りつぶされています。
  4. AccessのCategoryテーブルをPandasに取り込む

    行2-5はAccessのデータベース「Stats.accdb」の接続文字列を定義しています。 接続文字列にはバックスラッシュ「\」などの特殊文字が含まれる可能性があるのでrow文字列として定義してください。 データベース「Stats.accdb」は、Pythonのプログラムが格納されている直下の「data/db/article004」フォルダに格納されています。 行8ではPyodbcのconnect()メソッドを実行してAccessの「Stats.accdb」を接続(開く)しています。 行9では「Stats.accdb」データベースのCategoryテーブルからすべてのレコードを抽出するSQLコマンド(SELECT)を記述しています。 Categoryテーブルから取り込むレコードを絞り込むときは、SELECTコマンドに「WHERE」句を追加します。 ここではCategoryテーブルのすべてのレコードを抽出します。 行10ではPandasのread_sql()メソッドを実行して、Categoryテーブルからすべてのレコードを取り込んでPandasのDataFrameに格納しています。 行11ではPyodbcのclose()メソッドを実行してAccessのデータベースを切断(閉じて)しています。 行12ではPandasのDataFrameの内容を表示しています。
    # Access DB Connection String
        con_str = (
            r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};'
            r'DBQ=data/db/article004/Stats.accdb;'
        )
    
    # Connect Access DB Stats.accdb and import Category table
    con = pyo.connect(con_str)
    sql = 'SELECT * FROM Category'
    df = pd.read_sql(sql, con)
    con.close()
    print(df)
    click image to zoom!
    図6
    図6はPanadasのDataFrameの内容を表示した結果です。 「ViewCount」フィールドには当サイトのカテゴリー別のページビュー(ページ閲覧回数)が格納されています。 たとえば、「Paython」に関連するWebページの閲覧回数は9000回ということになります。 次のステップでは、このデータを棒グラフで表示します。
  5. PandasのDataFrameの内容を棒グラフに描画する

    行8ではPandasのDataFrameに格納されているデータをMatplotlibのbar()メソッドを実行して棒グラフを描画しています。 X軸のラベルにはDataFrameの「CategoryName」フィールドを指定しています。 このフィールドにはWebサイトのカテゴリー「Access」「jQuery」「Python」等が格納されています。 Y軸の値にはDataFrameの「ViewCount」フィールドを指定しています。 このフィールドには当サイトのカテゴリー別のページ閲覧回数が格納されています。 行10-12では棒グラフのタイトルとX軸、Y軸のラベルを追加しています。
    con = pyo.connect(con_str)
    sql = 'SELECT * FROM Category'
    df = pd.read_sql(sql, con)
    con.close()
    #print(df)
    
    # Draw simple bar chart from pandas data frame
    plt.bar(df.CategoryName, df.ViewCount)
    
    plt.title('Page View Count by Category(閲覧回数)')
    plt.xlabel('Category(分類)')
    plt.ylabel('Page View Count(閲覧回数)')
    
    plt.show()
    click image to zoom!
    図7
    図7はpl.show()の実行結果です。 PandasのDataFrameに格納されている当サイトのカテゴリー別のページ閲覧回数が棒グラフで表示されました。