データの準備#
一般に解析データはCSVファイルで渡されることが多いです。Pythonでは、CSVファイルの読み取りは、 csv
, numpy
, pandas
などで行います。
本項では、pandas
を用いたデータの読み込みを行います。pandas
はデータ分析の基本的なツールであり、データの抽出・整形、統計量の表示などが行えます。ただし、操作にすこし癖があるので、慣れないと四苦八苦する部分もあるかと思います。
この後に続く項目でも pandas.Dataframe
形式でデータが保持されているとします。
pandas
の詳細な使い方については、 公式ドキュメント を参照してください。
pandasによるCSVファイルの読み込み#
まずは、pandas
モジュールを使えるようにします。
import pandas
2020413_raw.csv
という化学プラントデータが、Pythonの実行ディレクトリからみた相対パスで ../data/2020413_raw.csv
にあるとして、これを読み込みます。
次のスクリーンショットのように、一列目が時刻情報のindexです。
import warnings
fname = "../data/2020413_raw.csv"
with warnings.catch_warnings(
record=True
) as w: # データの読み込みでWarningが発生するので捕捉する
df = pandas.read_csv(fname, index_col=0, parse_dates=True, encoding="shift-jis")
w[0].message
pandas.errors.DtypeWarning('Columns (9,19) have mixed types.Specify dtype option on import or set low_memory=False.')
pandasからWarningが出ていますが、こちらは後ほど欠損値処理 の項目で説明するので一旦おいておきます。
read_csv
の引数はそれぞれ次のようになっています。ほかにもいろいろありますが、よく使うのはこの辺だと思います。詳しくは公式ドキュメントを参照してください。
第一引数 : ファイル名
index_col : indexにする列番号(指定しないと自動で連番が振られる)
parse_dates : Trueのとき, 自動でindexを時刻
datetime
に変換。何も指定しないと、文字列のまま。(date_parser と間違えやすいので注意)encoding : ファイルのエンコード情報の指定(shift-jis, utf-8, cp932)
ファイルのエンコード情報が違うと次のようなエラーがでます。ファイル形式やOSに依存するため試行錯誤が必要です。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 0: invalid start byte
pandasデータの表示#
pandasの生データを表示しましょう。全部表示すると邪魔なので、head()
を用いて頭の数行を表示します。
df.head() # `index_col=0`を指定したのでCSVファイル1列目(時刻)がindexになる
気化器圧力_PV | 気化器圧力_SV | 気化器圧力_MV | 気化器圧力_MODE | 気化器液面レベル_PV | 気化器液面レベル_SV | 気化器液面レベル_MV | 気化器液面レベル_MODE | 気化器温度_PV | 気化器ヒータ出口温度_PV | ... | 反応器流入組成(H2O)_PV | 反応器流入組成(HAc)_PV | セパレータ蒸気排出量_MV (Fixed) | セパレータ蒸気排出量_MODE (Fixed) | アブソーバスクラブ流量_MV (Fixed) | アブソーバスクラブ流量_MODE (Fixed) | アブソーバ還流流量_MV (Fixed) | アブソーバ還流流量_MODE (Fixed) | 気化器液体流入量_MV (Fixed) | 気化器液体流入量_MODE (Fixed) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2020-04-13 00:00:00 | 127.983294 | 127.883920 | 18.728267 | AUT | 0.700204 | 0.7 | 21876.987772 | AUT | 120.15955841553482 | 151.274003 | ... | 0.008524 | 0.109444 | 16.1026 | AUT | 15.1198 | AUT | 0.766 | MAN | 2.1924 | AUT |
2020-04-13 00:00:01 | 128.262272 | 127.807691 | 18.728267 | AUT | 0.700865 | 0.7 | 21876.987772 | AUT | 120.07257486304935 | 151.218620 | ... | 0.008512 | 0.109441 | 16.1026 | AUT | 15.1198 | MAN | 0.766 | MAN | 2.1924 | AUT |
2020-04-13 00:00:02 | 127.899077 | 127.991074 | 19.079324 | AUT | 0.699740 | 0.7 | 21918.359526 | AUT | 120.30532712904707 | 151.201067 | ... | 0.008541 | 0.109871 | 16.1026 | AUT | 15.1198 | AUT | 0.756 | MAN | 2.1924 | AUT |
2020-04-13 00:00:03 | 127.622218 | 127.990697 | 18.772228 | AUT | 0.699970 | 0.7 | 21892.166478 | AUT | 120.21948819246609 | 151.220816 | ... | 0.008573 | 0.109775 | 16.1026 | AUT | 15.1198 | AUT | 0.746 | MAN | 2.1924 | AUT |
2020-04-13 00:00:04 | 127.577243 | 127.903788 | 18.605173 | AUT | 0.700939 | 0.7 | 21885.688813 | AUT | 120.30226736316207 | 151.165624 | ... | 0.008547 | 0.109868 | 16.1026 | AUT | 15.1198 | AUT | 0.766 | MAN | 2.1924 | AUT |
5 rows × 117 columns
CSVファイルと同じ内容が表示されています。確かにデータが読み込めているようです。
小括#
pandas
を用いて、CSVファイルからデータを読み込みました。
次の項目では、上で発生した Warning
に関する欠損値処理を行います。