Pythonでcsvファイルを読み込んでグラフにする【Python】

eye catch プログラミング

今回の内容をざっくりと紹介します。

動作環境:Windows11 64ビット Python 3.11.6

目次

最初にサンプルコードを置いておきます。

import pandas as pd
import matplotlib.pyplot as plt

csv = pd.read_csv('hogehoge.csv', header = None) #ファイル名+オプション
x = csv.loc[:, 0]#x軸
y = csv.loc[:, 1]#y軸
labelFontSize = 15#軸のフォントサイズ
Xlabel = 'Label'#x軸のラベル名
Ylabel = 'Label'#y軸のラベル名
font = 'Times New Roman' #お好きなフォントを設定してください

fig, ax = plt.subplots()#グラフを描画するエリアと軸を生成
plt.xlabel(Xlabel, fontfamily = font, fontsize = labelFontSize)#x軸を設定
plt.ylabel(Ylabel, fontfamily = font, fontsize = labelFontSize)#y軸を設定
ax.plot(x, y)#グラフを描画
plt.legend()#凡例を表示
plt.show()#描画したグラフを表示

csvを読み込む

今回はサードパーティのpandasというライブラリを使います。

インストールされていない方はPowershell、コマンドプロンプトなどから以下のコマンドでインストールしてください。

pip install pandas

csvの読み込みは簡単です。

import pandas as pd

csv = pd.read_csv('hogehoge.csv')

以上です。

ちなみにxlsxファイルはread_excel()で読み込めます。

read_csv()にはたくさんのオプションがあるそうで把握しきれていませんが、一部紹介します。

以下のcsvを読み込んでターミナルに表示してみます。

0,0,0,1
0.01,0,0.01,1
0.02,0,0.02,1
0.03,0,0.03,1
0.04,0,0.04,1
import pandas as pd

csv = pd.read_csv('hogehoge.csv')
print(csv)

#結果
#       0  0.1   0.2  1 ←ヘッダーが勝手に生成される
# 0  0.01    0  0.01  1
# 1  0.02    0  0.02  1
# 2  0.03    0  0.03  1
# 3  0.04    0  0.04  1

オプションを設定しないと勝手にヘッダーが生成されるようです。

ヘッダーの有無、任意のヘッダーをつけたい場合はそれぞれ以下のように記述すれば良いようです。

ヘッダーありの場合

以下のcsvを読み込みます。

A,B,C,D
0,0,0,1
0.01,0,0.01,1
0.02,0,0.02,1
0.03,0,0.03,1
0.04,0,0.04,1

0行目をヘッダーに指定してcsvを読み込みます。

import pandas as pd

#0行目がヘッダーの場合
csv_1 = pd.read_csv('hogehoge1.csv', header = 0) #header = 0でヘッダーを指定
print(csv_1)

#       A  B     C  D ←ヘッダーになっている
# 0  0.00  0  0.00  1
# 1  0.01  0  0.01  1
# 2  0.02  0  0.02  1
# 3  0.03  0  0.03  1
# 4  0.04  0  0.04  1

このように0行目以降がデータとして読み込まれます。

ヘッダーなしの場合

以下のcsvを読み込みます。

0,0,0,1
0.01,0,0.01,1
0.02,0,0.02,1
0.03,0,0.03,1
0.04,0,0.04,1

ヘッダーなしの場合は以下の通りです。

csv_2 = pd.read_csv('hogehoge.csv', header = None)

#結果
#       0  1     2  3
# 0  0.00  0  0.00  1
# 1  0.01  0  0.01  1
# 2  0.02  0  0.02  1
# 3  0.03  0  0.03  1
# 4  0.04  0  0.04  1

このように0スタートで列番号が勝手に振られます。

任意のヘッダーをつける場合

以下のようにオプションでnamesを指定すると新たにヘッダーをつけたり、上書きすることができます。csvにヘッダーがある場合はheaderにはその行番号を、ない場合はNoneを指定してください。

csv_2 = pd.read_csv('hogehoge.csv', header = None, names = ['a', 'b', 'c', 'd'])
print(csv_2)

#結果
#       a  b     c  d
# 0  0.00  0  0.00  1
# 1  0.01  0  0.01  1
# 2  0.02  0  0.02  1
# 3  0.03  0  0.03  1
# 4  0.04  0  0.04  1

軸に使うデータを分ける

行と列の指定で軸に使うデータを分けます。

ヘッダーの番号、名前などで列を指定すればその列だけ抽出できます。

print(csv_1["A"])

# 0    0.00
# 1    0.01
# 2    0.02
# 3    0.03
# 4    0.04
# Name: A, dtype: float64

行も指定する場合は以下のとおり。

print(csv_1["A"].loc[3])

#結果
#0.03

なお、行番号、列番号は0スタートです。

csvのデータは先程つかったものと同様のものを使います。

import pandas as pd

csv = pd.read_csv('hogehoge.csv', header = None)
x = csv[0]
y = csv[1]
print(x,y)

#結果
# 0    0.00
# 1    0.01
# 2    0.02
# 3    0.03
# 4    0.04
# Name: 0, dtype: float64 0    0
# 1    0
# 2    0
# 3    0
# 4    0
# Name: 1, dtype: int64

あとはグラフにプロットするだけです。

グラフにプロットする

グラフのプロットはmatplotlibライブラリのpyplotモジュールを使います。

インストールされていない場合はpandasと同様にインストールしてください。

import pandas as pd
import matplotlib.pyplot as plt

csv = pd.read_csv('hogehoge.csv', header = None)
x = csv[0]
y = csv[1]

fig, ax = plt.subplots()#グラフを描画するエリアと軸を生成
ax.plot(x, y)#描画
plt.show()#表示

流れとしては、

  1. グラフを描画するエリアと軸を作る
  2. 描画する
  3. 描画したグラフを表示する

といった感じです。plt.show()を書き忘れるとグラフが表示されません。

plt.xlabel('hogehoge', fontfamily = 'hogehoge', fontsize = number)#軸ラベル,軸ラベルのフォント,軸ラベルのフォントサイズ
plt.ylabel('hogehoge', fontfamily = 'hogehoge', fontsize = number)
ax.set_title("hogehoge")#グラフタイトル
plt.legend(['hogehoge'])#凡例

plt.show()の前にこれらのオプションを追記すれば最低限グラフに必要な要素はそろうかと思います。

他にも2段組みにしたり、グラフの種類を変えたりできるみたいなのでぜひ調べてみてください。

実際のグラフはこんな感じです。

おわりに

今回はcsvを読み込んでグラフを描画する方法を紹介しました。

標準ライブラリのcsvライブラリやNumpyモジュールを使う方法もあるようですが、私はpandasが使いやすかったです。

もっと良い方法や間違いがありましたら遠慮なく教えてさい。

最後まで読んでくださりありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


コメント

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