ビッグデータを使って統計分析がしたい! 【グラフ表示編】

 
こんにちわ。井上です。

前回のブログで、そろそろグラフを表示したいと書きましたので、今回は基本的なグラフの表示をしていきたいと思います。

グラフを表示するために、matplotlibというグラフ描画ライブラリを利用します。
※anacondaに標準ではいっているライブラリです。

まず描いてみる

とりあえずグラフを描画してみようと思います。
以下のコードを実行します。

import matplotlib.pyplot as plt

def graph_test1():
    x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    y = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    plt.plot(x, y)
    plt.show()

if __name__ == "__main__":
    graph_test1()

実行します。

1

グラフが描画されました。

グラフ種類オプションの設定を何もしないと、折れ線でグラフ描画されるようです。

グラフの種類を設定してみる

グラフの種類を変更するには、先ほどのコードの6行目 plot の部分を変更します。
使う頻度が高そうな種類を以下にあげます。

  • 折れ線グラフ plotもしくは指定なし
  • 棒グラフ(縦)bar
  • 棒グラフ(横)barh
  • 円グラフ   pie
  • 散布図    scatter
  • 他にもたくさん種類がありますので、ユーザーガイドを参考にしてみてください。
    Matplotlib ユーザーガイド

    日本語の設定

    日本語の設定をしていきます。
    これをやらないとX軸、Y軸のラベル名に日本語を設定した場合に文字化けします。

    今回は、IPAexフォントを利用します。
    インストールされていない場合には、ダウンロードしてPCにインストールして下さい。

    インストール後に、matplotlibの設定ファイルを書き換える必要があります。
    ファイルは、
    anacondaをインストールしたフォルダ\Lib\site-packages\matplotlib\mpl-data\matplotlibrc になります。
    font.family を検索し、 font.family : IPAexGothic に書き換えます。
    ※IPAexゴシックをインストールした場合になります。

    次にフォントのキャッシュを削除します。
    matplotlibはフォントをキャッシュしてもっているようなので、削除する必要があります。
    削除するファイルは、
    C:\Users\ユーザー名\.matplotlib\fontList.py3k.cache になります。

    次回起動時に再作成され、フォントが適用されます。

    その他オプションを設定してみる

    今回は棒グラフを書きながら、説明していきます。
    前回利用したデータから、2014年1月のデータを抽出して表示します。

    まずはコードを見てみましょう。

    import matplotlib.pyplot as plt
    import mysql.connector
    
    def graph_test():
    
        con = mysql.connector.connect(host='localhost', 
                                      port=3306, 
                                      db='python_test_mysql', 
                                      user='root', 
                                      passwd='', 
                                      charset="utf8")
                                      
        cur = con.cursor(buffered=True)
        
        sql = "select @i:=@i+1 as rownum,  sum(calc_value) as value"
        sql += " from tbl1,  (select @i:=0) as dummy"
        sql += " where report_date between '2014/1/1' and '2014/1/31'"
        sql += " group by report_date"
        sql += " order by report_date"
    
        cur.execute(sql)
        rows = cur.fetchall()
    
        x = []
        y = []
    
        for row in rows:
            x.append(row[0])
            y.append(int(row[1]))
    
        cur.close()
        con.close()
    
        plt.xlim([0.5, max(x)+1])
        plt.ylim([0, max(y)+5000])
        plt.xlabel("日付")
        plt.ylabel("使用量")
        plt.title("電力使用量")
        plt.legend(loc='upper right')
        plt.bar(x, y, align="center", label="2014年1月")
        plt.show()
    
    if __name__ == "__main__":
        graph_test()
    

    6~22行目:
     MySQLのデータベースからデータを取得します

    27~29行目:
     取得したデータをX軸、Y軸のそれぞれに設定しています

    34行目:
     X軸の開始と終了の値を設定しています。開始の値を1とすると、1つ目のデータのグラフが半分しか表示されません。見た目が格好わるいので、0.5から開始としています。
     終了の値も同様なので、最終値+1しています。

    35行目:
     Y軸の開始と終了の値を設定しています。終了の値を設定しない場合、最大値がグラフの上限となり見にくいので設定しています。

    36, 37行目:
     X軸、Y軸のラベルを設定しています。

    38行目:
     グラフのタイトルを設定しています。

    39行目:
     凡例の表示場所を設定しています。

    40行目:
     引数1 X軸に表示するデータを設定しています。
     引数2 Y軸に表示するデータを設定しています。
     引数3 棒グラフの表示位置を設定しています。
     引数4 凡例に表示する名前を設定しています。
     ※引数1、2は必須項目です。引数3以降は順番を問いません。

    41行目:
     グラフの表示をします。

    表示されるグラフは以下になります。

    2

    今回のまとめ

    いかがでしたでしょうか。

    たくさんあるグラフの種類の中から、今回は棒グラフを作成してみました。
    その他のグラフを作成する際にも、オプションの設定はあまり変わらないと思いますので、参考にしていただければと思います。

    次回は、データの分析をしてみようと思います。

    《関連記事》
    ビッグデータを使って統計分析がしたい! 【準備編】
    ビッグデータを使って統計分析がしたい! 【データ取得編】

    記事をシェア
    MOST VIEWED ARTICLES