【Python】テキストデータを読み込んでグラフを作ってみた【pandas.DataFrame.plot】

 

こんにちは、うさじんです。
前回の記事では【Excel】の散布図グラフを使ったデータの視覚化を目的としました。
今回は【Python】を使ってデータのグラフ化をやってみました。

前回記事 データを【Excel】の散布図グラフで視覚化する方法

ちょっと前まではPythonを使ってデータグラフの描画は行わなかったのですが、
最近は特殊な分析を行ったりすることやデータの整形を行う場合にPythonを使うことが増えてきました。

忘備録として、手持ちのデータをPythonに読み込んでグラフ化するまでの手順を記述したいと思います。
具体的に以下の手順でグラフ描画まで行いました。

  1. データをpandaでdataframe形式で読み込む
  2. 読み込んだデータをpandas.plotでグラフ化する

私はPythonを使う場合、「Visual Studio Code」を使って「.ipynb」形式でコードを記述しています。
PythonやVSCについては、また今度記事にしたいと思います。

 

うさじん
今回は【Python】をつかってデータを読み込み、グラフ化することが目的です。

【panda】データをpandaでdataframe形式で読み込む

まずはVSCを立ち上げ、現在のターミナルでpandasがインストールされていることを確認します。

python -m pip freeze

未インストールの場合、pandasをインストール

pip install pandas
インストールができましたら実際に、データを読み込みます。
読み込むデータは前回記事で使用した以下のデータです。
図A 4種の正弦波のデータ

A列~E列のデータをCSV形式に保存したデータをサンプルとして使用します。
ファイル名称は「test_data.csv」としています。

import pandas as pd #pandasのインポート
df = pd.read_csv('test_data.csv') #csvの読み込み
print(df) #dfの出力

実行結果

図B 実行結果 print(df)

ただの確認なので仕方ないのですが、print()での出力って見ずらいですね。
個人的にはdfで出力したほうが見やすくて好きです。

しかし、indexの0行に単位文字が入り込んでいます。このままでは使用出来ないので少しコードを変更します。

import pandas as pd #pandasのインポート
df = pd.read_csv('test_data.csv', skiprows=[1]) #csvの読み込み indexの0行をスキップして読み込み
print(df) #dfの出力
実行結果
図D 実行結果 print(df)

うまく0行を削除することができました。
念のため、dataframeのdtypesを出力してデータ型を確認します。
objectであれば文字列として認識されているため、グラフを書くのにデータ型の変換が必要となります。

print(df.dtypes) #dfのデータ型の出力
実行結果
図E 実行結果 print(df.dtypes)

float64として読み込んでいるため、問題なくグラフを作ることが出来ます。
もしデータ型がobjectの場合は以下で修正します。

df=df.astype(float) #データ型の変換 文字データから数値データへ

【pandas】読み込んだデータをpandas.plotでグラフ化する

早速グラフ化を行いたいところですが、気をつけなければいけないことが一つあります。
pandas.plotは日本語に対応していないため、文字化けしまいます。
そのため、japanize_matplotlibのライブラリで日本語を表示させます。
ターミナルでjapanize_matplotlibをインストールし、時刻列を横軸にしたグラフをプロットします。

pip install japanize_matplotlib
import japanize_matplotlib #日本語ライブラリのインポート
df.plot(x=df.columns[0]) #横軸に時刻列、縦軸にデータを表示

実行結果

図F 実行結果 df.plot(x=df.columns[0])

csvの読み込み後、2行目を削除する方法もある

前項で示した、2行目をスキップしてCSVを読み込む方法もありますが、
読み込み後に2行目を削除する方法もあります。

#CSVデータ全体を読み込み
temp = pd.read_csv("test_data.csv")
df=temp.drop(temp.index[[0]]) #読み込んだtempの0行目を削除

こちらは少し記述が多くなります。
CSV全体を読み込むことで0行目が文字となることからdataframeのデータ型がobjectになることが原因です。
astypeで数値データ型に変換する必要があります。

 

うさじん
今回はグラフを整えるまでいかなかったので、また次回の記事にしたいと思います。

最終コード

2行目をスキップする方法

import pandas as pd #pandasのインポート
import japanize_matplotlib #日本語ライブラリのインポート

#データの2行目をスキップして読み込み
df = pd.read_csv("test_data.csv", skiprows=[1])

#結果確認 1列目を横軸に指定
df.plot(x=df.columns[0])

2行目を削除する方法

import pandas as pd #pandasのインポート
import japanize_matplotlib #日本語ライブラリのインポート

#CSVデータ全体を読み込み
temp = pd.read_csv("test_data.csv")
df=temp.drop(temp.index[[0]]) #読み込んだtempの0行目を削除
df=df.astype(float) #データ型の変換 文字データから数値データへ

#結果確認 1列目を横軸に指定
df.plot(x=df.columns[0]) 

参考サイト

サイト名 URL
pandasでcsv/tsvファイル読み込み(read_csv, read_table) | note.nkmk.me https://note.nkmk.me/python-pandas-read-csv-tsv/
pandas.DataFrameの行・列を指定して削除するdrop | note.nkmk.me https://note.nkmk.me/python-pandas-drop/
Pandas:図示 | 経済学のためのPython入門 https://py4basics.github.io/5_pandas_plot.html
PandasのDataFrameをグラフ表示してCSVでダウンロードする | Qiita https://qiita.com/FrozenVoice/items/966d2778086f2b707922

あとがき

あらためて、記事にしてみると、
コード自体はシンプルですが、下調べにかなり時間を要しました。
いやーブログ書くのって大変だ。