非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Python】CSVデータから散布図と近似直線を描画し直線の式と相関係数を求める方法

   

Pythonを使って、CSVファイルのデータを読み込み、散布図と近似直線を描画する方法を紹介します。また、近似直線の式と相関係数R^2を求める方法についても解説します。この記事では、データ分析や可視化を行う際に役立つかと思います。

必要なライブラリ

以下のライブラリを使用します。インストールしていない場合は、事前に以下のコマンドでインストールしてください。

pip install pandas matplotlib numpy scikit-learn
 

 

サンプルデータ(CSVファイル)

まず、以下のようなCSVファイルを用意してください。この例では、data.csv という名前のファイルに、x と y という2列のデータが含まれています。

x,y
1,2
2,4
3,5
4,7
5,11
 

 

Pythonコード

以下のコードを実行することで散布図と近似直線を描画し、直線の式と相関係数R^2を出力します。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# CSVファイルの読み込み
df = pd.read_csv("data.csv")

# データの抽出
x = df['x'].values.reshape(-1, 1)  # xを2次元配列に変換
y = df['y'].values                 # yは1次元のままでOK

# 線形回帰モデルの作成と適用
model = LinearRegression()
model.fit(x, y)

# 回帰直線の計算
y_pred = model.predict(x)

# 決定係数 R^2 の計算
r2 = model.score(x, y)

# 回帰直線の式
coef = model.coef_[0]  # 傾き
intercept = model.intercept_  # 切片
print(f"y = {coef:.2f}x + {intercept:.2f}")
print(f"R^2: {r2:.4f}")

# グラフの描画
plt.figure(figsize=(8, 6))
plt.scatter(x, y, color='blue', label='Data Point')  # 散布図
plt.plot(x, y_pred, color='red', label=f'y = {coef:.2f}x + {intercept:.2f}')  # 回帰直線
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.grid(True)
plt.show()
 

 

出力結果

コンソールの出力

以下のように、回帰直線の式と相関係数が表示されます。

y = 2.10x + -0.50
R^2: 0.9423
 

 

グラフの出力
  • 青い点が散布図。
  • 赤い線が回帰直線。
  • グラフにはタイトルやラベルが付与されています。

 

コード解説

データの読み込みと整形
  • pandas を使ってCSVファイルを読み込み、x と y を抽出します。
  • x は reshape(-1, 1) で2次元配列に変換し、y は1次元のまま保持します。
線形回帰モデルの作成
  • scikit-learn の LinearRegression を使い、データに基づいて回帰モデルを作成します。
近似直線の計算
  • model.predict(x) で近似直線の値を計算し、散布図にプロットします。
相関係数の計算
  • model.score(x, y) でデータの適合度を示す相関係数R^2を取得します。

まとめ

この方法を使えば、わざわざExcelを介さなくてもPythonで簡単にデータの傾向を可視化し近似直線の式とデータの適合度を確認できます。Python内でグラフ描画や係数を取得することができるため、次の処理へもシームレスに対応できます。

 

スポンサーリンク

 - Python