質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Python

    7903questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • CSV

    632questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

  • NumPy

    436questions

    NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

python: 線型回帰分析のグラフ表示での型のエラー

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 168

touho

score 2

 前提・実現したいこと

パイソンでCSVファイルの統計データを読み込み、そのデータをプロットすること、
そして、そのデータを線形回帰分析して、結果得られた直線もプロットすること

この二点を目指しています。
OS: windows10
エディタ・コンパイラ: visual studio code

 発生している問題・エラーメッセージ

Traceback (most recent call last):
  File "c:\Users\~\Desktop\データボックス\自主学習\線形回帰自主ゼミ\身長の推移.py", line 37, in <module>
    result=least_squares(fit_func,param, args=(x,y))
  File "C:\Anaconda3\lib\site-packages\scipy\optimize\_lsq\least_squares.py", line 799, in least_squares
    f0 = fun_wrapped(x0)
  File "C:\Anaconda3\lib\site-packages\scipy\optimize\_lsq\least_squares.py", line 794, in fun_wrapped
    return np.atleast_1d(fun(x, *args, **kwargs))
  File "c:\Users\~\Desktop\データボックス\自主学習\線形回帰自主ゼミ\身長の推移.py", line 15, in fit_func
    residual =y - func(x,b1,b2)
  File "c:\Users\~\Desktop\データボックス\自主学習\線形回帰自主ゼミ\身長の推移.py", line 11, in func
    return b1+b2*x
TypeError: 'numpy.float64' object cannot be interpreted as an integer

 該当のソースコード

import csv

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy.optimize import least_squares

# 最小二乗法のための関数を宣言

def func(x,b1,b2):
  return b1+b2*x

def fit_func(param, x, y):
  b1, b2= param
  residual =y - func(x,b1,b2)
  return residual

# csvファイル読み込み

dframe = pd.read_csv('FEH_00400002_180620142806.csv')
c="高等学校(17歳)"
a = dframe[c] # 分析対象y値の列ベクトル



b=[] # 分析対象xがyに対し単射なことを生かして、分析対象x値を生成
for i in range(len(a)):
  b.append(i)


# 最小二乗法

x=[] # プロット用変数
y=[]
param=[0,0]

result=least_squares(fit_func,param, args=(x,y))

b1, b2=result[0] # 結果の格納
b1_err=np.sqrt(result[1][0,0])
b2_err=np.sqrt(result[1][1,1])

""" 
# チェッカー

print(a)
print(b)
print(b1)
print(b2) 
print(b1_err)
print(b2_err)
print(np.sqrt(result[1]))

"""

# 回帰直線のプロット

plt.figure(figsize=(20, 20)) #グラフのサイズを設定 12 
x1 = np.linspace(0,220,20,30)  # xの値域(0, 1, 2, 3)
y1 = func(x1,b1,b2)              # 直線の式
plt.plot(x1,y1,"r-")      # 直線を引く

y1=b1-b1_err+(b2-b2_err)*(x1) # 予測範囲のプロット
plt.plot(x1,y1,"r-")
y1=b1+b1_err+(b2+b2_err)*(x1)
plt.plot(x1,y1,"r-")

#  散布図のプロット

plt.scatter(b,a,color='black' , marker='o' ,s=10)
plt.grid(which='major ', color=' black ',linestyle='−−') #グリッドの 設定
plt.xticks(fontsize=20) #x 軸の目盛の設定
plt.yticks(fontsize=20) #y 軸の目盛の設定
plt.xlim(0,220)#x の表示範囲を設定
plt.ylim(130,180) #y の表示範囲を設定
plt.xlabel('x年前',fontsize =20) #x 軸のラベルを設定
plt.ylabel('17歳の平均身長',fontsize =20) #y 軸のラベルを設定
plt.title(' 平均身長の伸びについて ',fontsize =20) #グラフタイトルの設定
plt.tight_layout() #グラフレイアウトの自動調整 
plt.savefig('./plot_orion1.eps') #グラフを e p s ファイルに書き出し 
plt.show() #ディスプレイにグラフを表示

 試したこと

http://ni4muraano.hatenablog.com/entry/2017/09/18/215200
これに従い、ライブラリを変更。なんらの変化なし。

リストをnp.array()に入れたり訂正したり。なんらの変化無し。

 補足情報(FW/ツールのバージョンなど)

VSC1.24.1

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hayataka2049

    2018/06/25 03:18

    エラーはtraceback等も省略せず全文掲載してください。特にどの部分でエラーが出たのかわかるように

    キャンセル

  • touho

    2018/06/25 03:21

    こんばんは、ご指摘ありがとうございます。よろしくおねがいします。

    キャンセル

  • hayataka2049

    2018/06/25 03:22

    名前とかは伏せたければ伏せて良いですよ(編集履歴残っちゃうけど)

    キャンセル

  • touho

    2018/06/25 03:23

    確かに…

    キャンセル

回答 1

checkベストアンサー

0

args=(x,y)だとすぐ上で定義した空リストが渡るので、b2*xがiterable*数値と解釈されそうになり、その結果落ちてますね。

>>> [1,2,3]*2
[1, 2, 3, 1, 2, 3]
>>> a = np.float64(2.0)
>>> [1,2,3]*a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'numpy.float64' object cannot be interpreted as an integer

なんの分析なのかいまいちよくわかっていませんが、xとyはそれぞれデータから取ってくるはず。xは説明変数のnumpy配列、yは目的変数のnumpy配列になるように渡せば良いと思いますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/25 03:47

    まさか空データを渡していることに気づかなかったなんて…笑
    指摘なども含め、ありがとうございました!
    解決いたしました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    7903questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • CSV

    632questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

  • NumPy

    436questions

    NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。