pandasのデータフレームに手間取った
pandas+matplotlibで3D棒グラフを作る - HPCメモ
このページを参考にして、matplotlibによる3Dグラフのことを書こうと思っていましたが、pandasのデータフレームの取り扱いに四苦八苦したので、そのことについて書きます。
3d棒グラフを書くために、4x3のデータフレームを作ろうと思いました。
import pandas as pd df=pd.DataFrame( {u"しりとり":[580, 420, 520], u"りんご":[280, 260, 300], u"ごりら":[300, 320, 280], u"らっぱ":[30, 32, 10]}, index=(u"A", u"B", u"C")) print(df)
ごりら しりとり らっぱ りんご A 300 580 30 280 B 320 420 32 260 C 280 520 10 300
列の名前がソートされてしまいました。
リストを辞書型にしてひもつけているので、こういう結果になるようです。
ソートされると、グラフ作成のときに要素がちゃんと設定されないので、書いた順番に列名を並べる必要があります。
ならば、辞書型にしているのをリストに直して、後から行と列の名前を入れてみればいいと思いつきました。
df=pd.DataFrame( [[580, 420, 520], [280, 260, 300], [300, 320, 280], [30, 32, 10]]) df.index=(u"A", u"B", u"C") df.columns=(u"しりとり",u"りんご",u"ごりら",u"らっぱ") print(df)
ValueError: Length mismatch: Expected axis has 4 elements, new values have 3 elements
要素の数がおかしいとエラー。
どうやら、2重リストのときは行と列が逆になるようです。
df=pd.DataFrame( [[580,280,300,30], [420,260,320,32], [520,300,280,10]]) df.index=(u"A", u"B", u"C") df.columns=(u"しりとり",u"りんご",u"ごりら",u"らっぱ") print(df)
しりとり りんご ごりら らっぱ A 580 280 300 30 B 420 260 320 32 C 520 300 280 10
これで望んでいた形のデータフレームを作成することができました。
Windowsでgcc(MinGW)を使う
WindowsでC言語をコンパイルしたくて、gccを使うことにしました。
今回取り扱うのは、gccのWindowsに移植したバージョンであるMinGWです。
他にもあるようですが、説明しているサイトが多いものにしました。
インストール
まずはインストーラーをダウンロードしました。
Getting Started | MinGW
実行しようとすると、「gcc.exeディスクがありません ドライブディスクがありません ディスクをドライブE:に挿入してください」とエラー。
調べてみると、開発者がEドライブを使用しているためのエラーとのこと……。
Windows8.1でMinGWをインストールしたのですが、動作確認時に分から... - Yahoo!知恵袋
仕方がないので、手元のインストーラーをゴミ箱に放り込んで、新しいインストーラーを使うことにしました。
http://mingw-w64.org/doku.php/start
Downloads→Mingw-buildsからダウンロードできました。
インストーラーを起動すると、settingの項目が並んだ画面が出てきます。
Qt で MinGW-w64 を使用する際に必要になるスレッドモデルと例外機構の選択について | cutlassfish
上のページを参考にして、項目を選んでいきます。
今回はこの組み合わせにしました。
後は、通常通りのインストール手順です。
パスを通す
インストールが終わったら、パスを通して、コマンドプロンプトでコマンドとして認識されるようにしていきます。
C言語入門 - MinGW - gcc の環境設定(パスを通す) - Windows環境 - Webkaru
コントロールパネル→システムとセキュリティ→システム
→システムの詳細設定→環境変数
ユーザー環境変数かシステム環境変数のどちらかのPATHを選択し、「編集」を押します。(分からない場合は、システム環境変数に)
先ほどインストールしたMinGw内のbinフォルダのパスを末尾にコピーします。
;C:\Program Files\mingw-w64\x86_64-5.3.0-win32-seh-rt_v4-rev0\mingw64\bin
※私の場合
複数ある場合は、浅い階層にあるbinのパスを入力してください。
これで、パスを通すことができました。
テスト
Hello worldを書いて、test.cとして保存しておきます。
#include <stdio.h> int main(void) { printf("Hello World!"); return 0; }
パスを通したので、コマンドプロンプトに直でgccが打てます。
$ gcc test.c
もし、ヘッダが見つからない場合は、読み込むよう設定されているフォルダにヘッダを移動させる必要があります。
http://www.teradas.net/archives/12443/
$ a.exe
でHello worldが表示できました。
しかし、実行ファイルを直接実行した場合、すぐにコマンドプロンプトが閉じてしまいます。
これは、どうやらコマンドプロンプトの仕様のようです。
そのため、Hello worldを目視したければ、キーを押すまで終了させないような仕組みが必要となります。
#include <stdio.h> int main(void) { printf("Hello World!"); while(getchar() != '\n'); //キーを押すまでループし続ける return 0; }
これで、じっくりHello worldを眺められるようになりました。
matplotlibのTex表記とグラフの大きさ
ギリシャ文字
matplotlibで、ギリシャ文字を軸ラベルに表記しても認識されませんでした。
y軸にギリシャ文字のρを入れようとしています。
import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 11, 1) y = np.arange(0, 21, 2) plt.plot(x, y) plt.xlabel('time') plt.ylabel(u'ρ') plt.show()
解決方法は、日本語の表記と同じようにフォントを指定する方法と、Tex表記を使う方法があります。
チラシ裏のラクガキ: Python,Matplotlibでギリシャ文字出力方法
適当なフォントを指定してみます。
from matplotlib.font_manager import FontProperties fp = FontProperties(fname=r'C:\WINDOWS\Fonts\Arial.ttf', size=14) #フォント指定 plt.ylabel(u'ρ', fontproperties=fp) #plt.ylabelを差し替え
次に、Tex表記をしてみます。
plt.ylabel(r'$\rho$') #plt.ylabelを差し替え
どちらにしろ、他のラベルや目盛りのフォントを合わせる必要がありそうです。
参考:Python - matplotlibで日本語 - Qiita
グラフの大きさ
話変わって、グラフの大きさを変える方法。
plt.figureのdpi、figsizeオプションで変えることができます。
縦横比を変えないなら、dpi。
デフォルトは80。
そうでなければ、figsize。
デフォルトは(8, 6)。
plt.figure(figsize=(6, 6), dpi=80)
のように表記します。