Python で日時と流量のデータを扱う

目次

  1. 1. エグゼクティブサマリー
  2. 2. Python 3.12 のインストール
  3. 3. Python の開発環境 Visual Studio Code のインストールと Python 用の設定
  4. 4. Python プログラム実行手順
  5. 5. 必要なライブラリのインストール
  6. 6. 実行のための準備とその確認手順(Windows 前提)
  7. 7. 概要・使い方・実行上の注意
  8. 8. ソースコード
  9. 9. 演習1 CSV の列名と読み込み結果の対応を確認する
  10. 10. 演習2 日時列の型を確認する
  11. 11. 演習3 軸ラベルと描画されるグラフの対応を確認する
  12. 12. まとめ

1. エグゼクティブサマリー

Kaggle で公開されている交通量データ(CSV ファイル)を Python で読み込み,日時列の型変換,データの表示,折れ線グラフによる可視化を行う。

https://www.kaggle.com/coplin/traffic/data

2. Python 3.12 のインストール

3. Python の開発環境 Visual Studio Code のインストールと Python 用の設定

4. Python プログラム実行手順

5. 必要なライブラリのインストール

管理者権限コマンドプロンプトを起動する (手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。

起動後,以下を実行する。

pip install -U --no-user pandas matplotlib

6. 実行のための準備とその確認手順(Windows 前提)

プログラムファイルの準備

「ソースコード」のコードをテキストエディタ(Visual Studio Codeやメモ帳など)に貼り付けて保存する(文字コード:UTF-8)。

実行コマンド

コマンドプロンプトでファイルの保存先ディレクトリに移動し,保存したファイルを指定して実行する。

python a.py

動作確認チェックリスト

確認項目期待される結果
CSV ファイルの読み込みエラーが発生せず H:/a.csv が読み込まれる
日時列の型変換datetime 列が datetime64 型に変換される
データの表示datetime 列と traffic_count 列を持つ DataFrame が表示される
折れ線グラフの表示横軸が日時,縦軸が流量の折れ線グラフが表示される

7. 概要・使い方・実行上の注意

CSV ファイルは datetime(日時)と traffic_count(流量)の 2 列で構成される。各行の形式は以下のとおりである。

2019/3/14 4:00, 12
2019/3/14 5:00, 18
2019/3/14 6:00, 45
2019/3/14 7:00, 80
2019/3/14 8:00, 120

プログラムは以下の順に処理を実行する。pd.read_csv で CSV ファイルを読み込み,列名 datetimetraffic_count を付与する。skipinitialspace=True により,カンマ後の先頭スペースを除去する。次に pd.to_datetime で日時列を datetime 型(日時を表す専用のデータ型)に変換する。変換後のデータを print で表示し,matplotlib で折れ線グラフを描画する。

CSV ファイルのパスはプログラム中で H:/a.csv と指定されている。実行環境に応じてこのパスを変更する必要がある。

8. ソースコード

import pandas as pd
import matplotlib.pyplot as plt

d = pd.read_csv("H:/a.csv", header=None, names=["datetime", "traffic_count"], skipinitialspace=True)
d["datetime"] = pd.to_datetime(d["datetime"], format="%Y/%m/%d %H:%M")
print(d)

plt.plot(d["datetime"], d["traffic_count"])
plt.xlabel("datetime")
plt.ylabel("traffic_count")
plt.show()

9. 演習1 CSV の列名と読み込み結果の対応を確認する

テーマ名:列名の指定と DataFrame の表示

手順:「ソースコード」のプログラムについて,CSV ファイルのパスを実行環境に合わせて書き換えてから実行する(メモ帳を用いる場合は a.py のようなファイル名で保存して実行)。print(d) の出力を確認する。

ヒント:names で指定した列名は datetimetraffic_count の順で各列に対応する。header=None は CSV の 1 行目をデータとして扱う指定である。

考察ポイント:表示された DataFrame の列名と先頭のデータが,CSV ファイルの各行の値と対応しているかを読み取る。

import pandas as pd
import matplotlib.pyplot as plt

d = pd.read_csv("H:/a.csv", header=None, names=["datetime", "traffic_count"], skipinitialspace=True)
d["datetime"] = pd.to_datetime(d["datetime"], format="%Y/%m/%d %H:%M")
print(d)

plt.plot(d["datetime"], d["traffic_count"])
plt.xlabel("datetime")
plt.ylabel("traffic_count")
plt.show()

10. 演習2 日時列の型を確認する

テーマ名:datetime 型への変換

手順:「ソースコード」のプログラムに対し,print(d) の行の前後で print(d["datetime"].dtype) を実行し,型の表示を確認する(メモ帳を用いる場合は a.py のようなファイル名で保存して実行)。pd.to_datetime の行をコメントアウトした場合の表示とも見比べる。

ヒント:pd.to_datetimeformat で指定した書式の文字列を datetime 型に変換する。書式 %Y/%m/%d %H:%M は,CSV の各行の日時の形式に対応する。

考察ポイント:変換の前後で dtype の表示がどう変わるかを読み取る。

import pandas as pd
import matplotlib.pyplot as plt

d = pd.read_csv("H:/a.csv", header=None, names=["datetime", "traffic_count"], skipinitialspace=True)
print(d["datetime"].dtype)
d["datetime"] = pd.to_datetime(d["datetime"], format="%Y/%m/%d %H:%M")
print(d["datetime"].dtype)
print(d)

plt.plot(d["datetime"], d["traffic_count"])
plt.xlabel("datetime")
plt.ylabel("traffic_count")
plt.show()

11. 演習3 軸ラベルと描画されるグラフの対応を確認する

テーマ名:折れ線グラフの軸の対応

手順:「ソースコード」のプログラムを実行し,表示された折れ線グラフの横軸と縦軸を確認する(メモ帳を用いる場合は a.py のようなファイル名で保存して実行)。plt.xlabelplt.ylabel に渡した文字列を別の文字列に書き換えて再実行し,表示の違いを確認する。

ヒント:plt.plot の第 1 引数が横軸,第 2 引数が縦軸に対応する。plt.xlabelplt.ylabel は,それぞれ横軸と縦軸のラベルを設定する。

考察ポイント:横軸の日時の並びと縦軸の流量の変化が,CSV ファイルのデータの並びと対応しているかを読み取る。

import pandas as pd
import matplotlib.pyplot as plt

d = pd.read_csv("H:/a.csv", header=None, names=["datetime", "traffic_count"], skipinitialspace=True)
d["datetime"] = pd.to_datetime(d["datetime"], format="%Y/%m/%d %H:%M")
print(d)

plt.plot(d["datetime"], d["traffic_count"])
plt.xlabel("datetime")
plt.ylabel("traffic_count")
plt.show()

12. まとめ

CSV ファイルの読み込み

pd.read_csv で CSV ファイルを DataFrame として読み込む。names で列名を指定し,skipinitialspace=True で空白を除去する。

日時データの型変換

pd.to_datetime で文字列を datetime 型に変換する。format で日時の書式を指定する。

データの表示

print で DataFrame の内容を表示し,読み込みと型変換の結果を確認する。

折れ線グラフによる可視化

plt.plot で横軸を日時,縦軸を流量とした折れ線グラフを描画する。