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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

18427閲覧

TypeError: 'numpy.float64' object is not callableのエラーについて

HaTea

総合スコア16

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/06/21 04:34

前提・実現したいこと

選手データを取得しそれによって結果を表示するプログラムの作成をしています。

手順
1.選手データをスクレイピングする
2.データフレームの内にデータを数値化
3.打順通りリストに選手を格納
4.pro_name関数に打順を入れて結果を表示

手順4を実行しようとするとエラーが起こります。
TypeError: 'numpy.float64' object is not callableのエラー文を調べたが分からず。

pro_name関数の中の変数hがhit関数に渡せてい無い様な感じがします。
変数hを上手くhit関数に渡したい。

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

荻野 貴司ヒット 角中 勝也アウト! 只今1アウト ---------------- ランナーなし --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-14-7e748234c16e> in <module> 2 member = [player[i%9] for i in range(0,100)] 3 for i in range(9): ----> 4 pro_name(member) <ipython-input-12-b347acd473e6> in pro_name(pros) 49 print(f'ただいまランナー{state}塁') 50 ---> 51 state, point = hit(state, h) # 塁上の状況の更新。 52 print(f'{point}点入りました') 53 total_point.append(point) TypeError: 'numpy.float64' object is not callable

該当のソースコード

python

1%matplotlib inline 2import random 3import matplotlib.pyplot as plt 4import numpy as np 5import pandas as pd 6import sys 7#野手データ取得 8BASE_URL = ("http://npb.jp/bis/2019/stats/idb1_m.html") 9dfs = pd.io.html.read_html(BASE_URL) 10#カラムの再設定 11df = dfs[0][1:]; df.columns=dfs[0].loc[0,:] 12new_header = df.iloc[0] 13df = df[1:] 14df.columns = new_header 15df

python

1#columnsの表示整え 2df2 = df.rename(columns=lambda s: str(s).replace(" ","")) 3df_i = df2.rename(columns=lambda s: str(s).replace(" ","")) 4del df_i['nan'] 5df3 = df_i.set_index('選手') 6df3

python

1#データの数値化 2df3['長打率'] = '0' + (df3['長打率']) 3df3['出塁率'] = '0' + (df3['出塁率']) 4df3[['試合','打席','打数','得点','安打','二塁打','三塁打','本塁打','塁打', 5 '打点','盗塁','盗塁刺','犠打','犠飛', '四球','故意四','死球','三振', 6 '併殺打','長打率','出塁率']] = df3[['試合','打席','打数','得点','安打','二塁打','三塁打','本塁打','塁打', 7 '打点','盗塁','盗塁刺','犠打','犠飛', '四球','故意四','死球','三振', 8 '併殺打','長打率','出塁率']].apply(pd.to_numeric)

python

1#主要要素の追加 2df3['OPS'] = df3['長打率'] + df3['出塁率'] 3df3['打率(割合)'] = df3['安打'] / df3['打数'] 4#打率評価が出来ない選手に対して1割を割当 5df3.mask(df3.isna(), other= 0.1 )

python

1# bは塁打。ホームランも4塁打として扱えば良い。 2def hit(base_state, b): 3 # どの塁までランナーが到達したか。3塁のあとは4塁,5塁と突き進む。 4 new_state = [b] 5 for e in base_state: 6 new_state.append(e+b) 7 8 # print(new_state) 9 10 # 4塁を超えたランナーをホームインさせる。 11 ret = [] 12 point = 0 13 for e in new_state: 14 if e < 4: 15 ret.append(e) 16 else: 17 point += 1 18 19 # ベース上の状況と、今の打席の点数を返す。 20 return ret, point

python

1#選手毎のデータ読み込み 2base_defn = 3 3def pro_name(pros): 4 state = [] 5 total_point=[] 6 h = 0 7 out = 0 8 point = 0 9 while True: 10 for pro in pros: 11 one_date = df3.loc[[pro],['安打','二塁打','三塁打','本塁打','打率(割合)']] 12 for index, row in one_date.iterrows(): 13 #選手名 14 name = index 15 #安打数 16 a_bat = row[0] + row[1] + row[2] + row[3] 17 #安打数からの単打の割合 18 hit = row[0] / a_bat 19 #安打数からの二塁打の割合 20 two = row[1] / a_bat + hit 21 #安打数からの三塁打の割合 22 thr = row[2] / a_bat + two 23 #打率 24 atta = row[4] 25 coin1 = random.random() 26 coin2 = random.random() 27 #3の数字は後に相手投手の防御率が入る。 28 if coin1 < (atta + 3 - base_defn): 29 if coin2 < hit: 30 print(name+'ヒット') 31 h = 1 32 elif coin2 < two: 33 print(name+'ツーベースヒット') 34 h = 2 35 elif coin2 < thr: 36 print(name+'スリーベースヒット') 37 h = 3 38 else: 39 print(name+'ホームラン!!!!!!!!!!!!!!!') 40 h = 4 41 else: 42 print(name+'アウト!') 43 out += 1 44 print(f'只今{out}アウト') 45 print('-'*16) 46 if not state: 47 print('ランナーなし') 48 else: 49 print(f'ただいまランナー{state}塁') 50 51 state, point = hit(state, h) # 塁上の状況の更新。 52 print(f'{point}点入りました') 53 total_point.append(point) 54 print(f'只今{sum(total_point)}点') 55 if out == 3: 56 return print('チェンジ!!') 57 sys.exit()

python

1player=['荻野 貴司','角中 勝也','清田 育宏','井上 晴哉','加藤 翔平','藤岡 裕大','藤原 恭大','細谷 圭','三木 亮'] 2member = [player[i%9] for i in range(0,100)] 3for i in range(9): 4 pro_name(member)

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

python3.7

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

パッと見て以下のhit変数と

Python

1hit = row[0] / a_bat

以下のhit関数の名前が同じなので提示エラーが発生いると思われます。

Python

1state, point = hit(state, h) # 塁上の状況の更新。

どちらかの名前を変えてみましょう。

投稿2020/06/21 04:52

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HaTea

2020/06/21 04:58

上手くいきました、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問