University of Fukui, Department of Applied Physics

Koishi's Page

Python を用いたデータ処理

ここでは Python を使って実験データを処理する方法を説明する。

  • Python を用いた平均値計算の方法
  • Python を用いたグラフ作成の方法
  • Python を用いた複数ファイルからのグラフ作成の方法
  • Python を用いた数式からのグラフ作成の方法

Python を用いた平均値計算の方法

データファイルの の準備

Pythonのプログラムは Google Colaboratory を使用して実行するので、データファイルを Google Colaboratory から読めるようにする。

Google Chrome を開いて、タブを追加する。

Google Drive を開く

(※ Google Drive を使うためにあらかじめ Googleにアクセスして、 大学の Google アカウントでログインを済ませておく必要あり。)

フォルダを作るために「新規」をクリックする。

メニューから「フォルダ」を選択する。

フォルダ名を入力して新規フォルダを作る。

作ったフォルダをダブルクリックしてフォルダを開く

開いたフォルダにデータファイルをドラッグ&ドロップする。

データファイルがアップロードされたことを確認する。

同じフォルダで Google Colaboratory を開く。

ファイル名を適当に変更する。

データファイル読み込みの設定するためにファイルメニューを開く。

しばらくすると下記のような画面になるので「ドライブをマウント」をクリックして、 Google Drive を使えるようにする。

(※ Google Drive へのアクセス許可がない場合は、アクセスを許可するための処理が必要なので、 表示される指示に従ってアクセス許可を行う。)

Google Drive へのアクセス許可が表示されるので、 「Google ドライブに接続」を選ぶ。

しばらくすると、 Google Drive にアクセスするための 「drive」が表示される。

「drive」-「MyDrive」-「jikken2」の順にフォルダを開いて、 test.dat があることを確認する。

操作を間違って「drive」などが表示されなくなったときは、 「contents」を開くと「drive」が表示されるようになる。

プログラムを作るときには、ファイルメニューの表示は不要なので、 ファイルをクリックしてファイルメニューを閉じる。

平均値計算のプログラム作成

データの平均値計算には Python のモジュールである pandas を使用する。

以下に示すデータファイルの読み込むプログラムを実行する。

import pandas as pd
df = pd.read_csv('drive/MyDrive/jikken2/test.dat',sep=r'\s+',header=None,
                 names=['step','time','temp','pres','vol','kerg','perg','terg'])

ここでは pandas の read_csv() を使用して、データファイルを読み込んでおり、 names=[] で各列の名前を指定している。
read_csv()についての詳細は 「Pythonの基礎2」-「ファイル読み込み」を参照のこと。

読み込んだデータは df に入り、「df」だけ入力して実行すると、 読み込んだデータの確認ができる。

以下に示すデータを選択するプログラムを実行する。

df1 = df[df['step']>=1000]

ここでは pandas のマスク機能を使って 1000 ステップ以降のデータを df1 に入れている。
マスク機能については 「Pythonの基礎2」-「比較、マスク」を参照のこと。

df1 に1000ステップ目以降のデータが入っていることを確認する。

以下のプログラムを実行して、各列の平均値を求める。
mean() については 「Pythonの基礎2」-「統計処理」を参照のこと。

df1.mean()

ある列の平均値だけを求める場合は、その列名で列を指定して平均値を求める。
圧力の平均値だけを求めるプログラムを以下に示す。

df1['pres'].mean()

Python を用いたグラフ作成の方法

グラフの表示には Python のモジュールである matplotlib を使用する。

以下に示すグラフを作るための準備のプログラムを実行する。

!pip install japanize-matplotlib
import matplotlib.pyplot as plt
import japanize_matplotlib

ここではグラフを作るための matplotlib をインポートし、 matplotlib で 日本語を使うための japanize_matplotlib をインストールしてインポートしている。

以下のグラフを作るためのプログラムを実行する。

plt.rcParams['font.size'] = 16
df['temp'].plot(figsize=(8,6),xlabel='step',ylabel='温度 (K)')
plt.show()

ここでは1行目で文字のフォントサイズを指定し、 2行目でグラフサイズ、x軸ラベル、y軸ラベルを指定してグラフを作成し、 3行目のグラフの表示を行っている。

Google Colaboratory で作成したグラフは画像として保存できる。
保存するときは、マウスの右クリックメニューから「名前を付けて画像を保存」を選び、 適当な名前を付けてファイルに保存する。
また、画像をドラッグ&ドロップしてどこかのフォルダにコピーすることで、 ファイルとして保存することもできる。

以下に matplotlib で特定の値のデータをグラフにするプログラム例を示す。

import matplotlib.pyplot as plt
plt.rcParams['font.size'] = 16
fig, ax=plt.subplots(figsize=(8,6))
x = [1,2,3]
y = [[3,4,5], [4,5,3]]
ax.plot(x, y[0], 'o-', label='data1')
ax.plot(x, y[1], 'o-', label='data2')
ax.set(xlabel='x',ylabel='y')
ax.legend()
plt.show()

このプログラムでは x:(1,2,3), y:(3,4,5) と x:(1,2,3), y:(4,5,3) のデータをグラフにしており、 得られる図は以下の通りである。

Matplotlib を用いたグラフ作成の詳細は 「Pythonの基礎2」-「Matplotlib の使い方」を参照のこと。

Pandas の DataFrame を用いたグラフ作成例は以下の通りであり、 このプログラムで上記と同じグラフが得られる。

import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.size'] = 16
x = [1,2,3]
y = [[3,4,5], [4,5,3]]
df = pd.DataFrame(y).T
df.index = x
df.columns = ['data1','data2']
df.plot(style='o-',xlabel='x',ylabel='y',figsize=(8,6))
plt.show()

Pandas を用いたグラフ作成の詳細は 「Pythonの基礎2」-「Pandas を使ったグラフ作成」を参照のこと。

Python を用いた複数ファイルからのグラフ作成の方法

for 文を使用して、複数のファイルで圧力の平均を求める例を以下に示す。

この例では、温度を 80 K, 90 K, 100 K としてシミュレーションを実行し、 それぞれデータファイルのファイル名を 'test80.dat', 'test90.dat', 'test100.dat' として保存したデータをデータ処理の対象としている。

上記の例でのプログラムを以下に示す。

import pandas as pd
temp = [80, 90, 100]
data = []
for t in temp: # temp による for 文 で temp の各要素が t に入って繰り返し処理を行う
  # read_csv() のファイル名では f文字列で {t} を使ってtest80.dat などを作る
  df = pd.read_csv(f'drive/MyDrive/jikken2/test{t}.dat',sep=r'\s+',header=None,
                   names=['step','time','temp','pres','vol','kerg','perg','terg'])
  df1 = df[df['step'] >= 1000]    # 1000 ステップ以降のデータを df1 に代入
  data.append(df1['pres'].mean()) # df1 の 'pres' の平均値を data に追加
print(data) # data を表示

得られた各ファイルでの圧力と温度でグラフを作る例を以下に示す。

上記の例でのプログラムを以下に示す。

import matplotlib.pyplot as plt
plt.rcParams["font.size"] = 16        # フォントサイズを指定
fig, ax=plt.subplots(figsize=(8,6))   # グラフのサイズを指定
ax.plot(temp,data,'o-',label='data1') # temp, data でグラフを作成
ax.set(xlabel='x',ylabel='y')
ax.legend()
plt.show()

上記の例を応用することで、条件が複数ある場合のデータ処理も行うことができる。 条件が2種類の場合は for の2重ループ、3種類の場合は for の3重ループとなる。

以下の例では、温度を 80 K, 90 K, 100 K としてソフトコアポテンシャルで実行した結果を 'soft80.dat', 'soft90.dat', 'soft100.dat' に保存し、LJポテンシャルで実行したい結果を 'lj80.dat', 'lj90.dat', 'lj100.dat' に保存したデータをデータ処理の対象としている。

import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.size"] = 16 
temp = [80, 90, 100]
system = ['soft', 'lj']
fig, ax=plt.subplots(figsize=(8,6))   # グラフの準備
for sys in system: # system による for 文
  data = []
  for t in temp:   # temp による for 文
    df = pd.read_csv(f'drive/MyDrive/jikken2/{sys}{t}.dat',sep=r'\s+',header=None,
                    names=['step','time','temp','pres','vol','kerg','perg','terg'])
    df1 = df[df['step'] >= 1000]         # 1000 ステップ以降のデータを df1 に代入
    data.append(df1['pres'].mean()*1e-9) # 'pres' の平均値を GPa で data に追加
  ax.plot(temp, data, 'o-', label = sys) # データをプロット
ax.set(xlabel = 'T (K)', ylabel = 'p (GPa)')
ax.legend() # ラベルの表示
plt.show()

Python を用いた数式からのグラフ作成の方法

numpy を使って、数式からグラフを作る例を以下に示す。

以下のプログラムは numpy 配列 x を値を [0.1, 0.2, 0.4, 0.8, 1.0] で指定して作成し、 y = 1/x の計算を行って x, y でグラフを作成している。

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.size"] = 16
x = np.array([0.1, 0.2, 0.4, 0.8, 1.0])
y = 1.0/x
fig, ax = plt.subplots(figsize=(8,6))
ax.plot(x, y, 'o-')
plt.show()

以下のプログラムでは、数式 y = a/x の a の値を a = 1.0, 2.0, 3.0 と変えたときの値でデータを3つ作り、グラフを作成している。

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.size"] = 16
x = np.array([0.1, 0.2, 0.4, 0.8, 1.0])
fig, ax = plt.subplots(figsize=(8,6))
for a in [1.0, 2.0, 3.0]:
  y = a/x
  ax.plot(x, y, 'o-', label=f'{a}/x')
ax.legend()
ax.set(xlabel='x', ylabel='y')
plt.show()
  • 実験課題
    • 課題1 相転移の確認
    • 課題2 圧縮率因子
    • 課題3 ポテンシャルパラメータ依存性
    • 課題4 状態方程式
  • ソフトのダウンロードと説明
    • ダウンロード
    • ソフトの概要
    • ソフトの使用方法
    • 各メニューの説明
    • 各ダイアログの説明
    • 右クリックメニューの説明
  • Excelを用いたデータ処理
    • Excelを用いた平均値計算の方法
    • Excelを用いたグラフ作成の方法
  • Google スプレッドシートを用いたデータ処理
    • スプレッドシート を用いた平均値計算の方法
    • スプレッドシート を用いたグラフ作成の方法
  • Python を用いたデータ処理
    • Python を用いた平均値計算の方法
    • Python を用いたグラフ作成の方法
  • レポートについて
    • レポートの構成
    • レポート作成時の注意点
  • 過去のページ
    • Excelを用いたデータ処理(2014)

Copyright (C) T. Koishi