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

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

ただいまの
回答率

88.60%

AIphaImpact 競馬 馬柱で競馬データを整理

解決済

回答 1

投稿 編集

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

nam19

score 15

 前提・実現したいこと

https://alphaimpact.jp/2017/02/02/horse-table/
のサイトを見て,簡易な馬柱を作成する際にエラーが発生しました.

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

for i, horse in enumerate(self.horse):
TypeError: 'Horse' object is not iterable

 該当のソースコード

class HorseTable(object):
    """
    馬柱クラス
    """

    def __init__(self, race, horses):
        """
        :param race: Raceクラス
        :type race: Race
        :param horses: Horseクラスのリスト. 馬番順に格納
        :type horses: list of Horse
        """
        self.race = race
        self.horses = horses

    def print_table(self):
        """
        簡易馬柱を表示する
        """
        # レース名の表示
        print(self.race.get_race_title())

        # 馬番+馬名の表示
        for i, horse in enumerate(self.horses):
            horse_no = i + 1
            print("{}. {}".format(horse_no, horse.get_name()))

class Race(object):
    """
    レースクラス
    """

    def __init__(self, race_key, program, holding, payback=None):
        """
        :param race_key: レースキー
        :param program: レース情報
        :param holding: 開催情報
        :param payback: 払戻情報
        """
        self.race_key = race_key
        self.program = program
        self.holding = holding
        self.payback = payback

    def get_race_title(self):
        """
        レース名を取得する
        """
        return self.program["レース名"]


class Horse(object):
    """
    馬クラス
    """

    def __init__(self, horse_id, horse_profile, horse_race, race_results):
        """
        :param horse_id: 血統登録番号
        :param horse_profile: 馬属性情報
        :param horse_race: 馬毎レース情報
        :param race_results: 過去戦績のリスト
        """
        self.horse_id = horse_id
        self.horse_profile = horse_profile
        self.horse_race = horse_race
        self.race_results = race_results

    def get_name(self):
        """
        馬名を取得する
        """
        return self.horse_profile["馬名"]
#馬
horse_id = DataFrame(keiba_data_set[['血統登録番号']])
horse_profile = DataFrame(keiba_data_set[['馬名','性別','年齢','所属','脚質']])
horse_profile = pd.get_dummies(horse_profile,columns=['性別','所属'])
horse_profile['脚質'] = horse_profile['脚質'].map({'逃げ':1, '先行':2, '中団':3,'後方':4,'差し':5,'追込':6,'マクリ':7})
horse_race = DataFrame(keiba_data_set[['馬番','騎手名','騎手コード','馬体重','負担荷重','人気','賞金','単勝オッズ']])
race_results = DataFrame(keiba_data_set[['着差タイム','走破タイム(秒)','通過順1角','通過順2角','通過順3角','通過順4角','あがり3Fタイム','確定着順']])

#レース
race_key = DataFrame(keiba_data_set[['レース名']])
program = DataFrame(keiba_data_set[['レース名','距離','頭数','トラックコード','クラスコード','1着本賞金']])
holding = DataFrame(keiba_data_set[['年','月','日','場所','天候','馬場状態']])

#出力
instance_race = Race(race_key,program,holding)
instance_horse = Horse(horse_id,horse_profile,horse_race,race_results)
instance_HorseTable = HorseTable(instance_race,instance_horse)
instance_HorseTable.print_table()

 試したこと

出力でのエラーなのか
classに何を渡せば解決するのかがわかりません

 補足情報

年    月    日    場所    距離    天候    レース名    馬場状態    トラックコード    頭数    クラスコード    1着本賞金    馬番    馬名    性別    年齢    騎手名    騎手コード    馬体重    負担荷重    人気    賞金    所属    血統登録番号    単勝オッズ    脚質    着差タイム    走破タイム(秒)    通過順1角    通過順2角    通過順3角    通過順4角    あがり3Fタイム    確定着順
14    7    26    札幌    1500    曇    未勝利*    良    0    14    7    500    1    デルマヨタロウ    牡    2    津村明秀    1092    458    54    14    0    美    2012101850    166.4    先行    0.8    90.7    0    4    4    2    36.5    7
14    7    26    札幌    1500    曇    未勝利*    良    0    14    7    500    2    ネコレーヌ    牝    2    井上敏樹    1151    414    51    13    0    美    2012101899    124.2    後方    1    90.9    0    13    14    13    35.6    8
14    7    26    札幌    1500    曇    未勝利*    良    0    14    7    500    3    ピックアンドポップ    牡    2    吉田隼人    1095    470    54    5    0    美    2012102545    12.4    後方    0.8    90.7    0    13    13    13    35.9    6
14    7    26    札幌    1500    曇    未勝利*    良    0    14    7    500    4    サトノアッシュ    牡    2    秋山真一    1019    454    54    1    75    栗    2012101359    3    追込    0.4    90.3    0    10    11    11    35.6    4
14    7    26    札幌    1500    曇    未勝利*    良    0    14    7    500    5    マコトグナイゼナウ    牡    2    藤岡康太    1116    430    54    2    500    栗    2012104840    3.3    逃げ    0    89.9    0    1    1    1    35.9    1
14    7    26    札幌    1500    曇    未勝利*    良    0    14    7    500    6    ブラックバード    牡    2    長岡禎仁    1142    454    51    8    50    栗    2012101504    30.2    中団    0.4    90.3    0    12    8    8    35.9    5
14    7    26    札幌    1500    曇    未勝利*    良    0    14    7    500    7    マイネルシアトル    牡    2    松岡正海    1085    436    54    6    0    栗    2012105276    17.1    後方    1.3    91.2    0    10    11    11    36.5    11
14    7    26    札幌    1500    曇    未勝利*    良    0    14    7    500    8    ムーンビューティ    牝    2    丹内祐次    1091    432    54    10    0    美    2012102528    34.1    先行    1.1    91    0    2    2    2    36.9    9
14    7    26    札幌    1500    曇    未勝利*    良    0    14    7    500    9    ウインアキレア    牝    2    三浦皇成    1122    444    54    4    130    栗    2012100229    7.5    先行    0.2    90.1    0    8    8    4    35.7    3
14    7    26    札幌    1500    曇    未勝利*    良    0    14    7    500    10    ミトノゴールド    牡    2    古川吉洋    1015    470    54    9    0    栗    2012103207    31.6    中団    2.2    92.1    0    4    6    9    37.8    14
14    7    26    札幌    1500    曇    未勝利*    良    0    14    7    500    11    ダンヴィル    牡    2    丸田恭介    1117    450    54    12    0    栗    2012101582    112.2    先行    1.3    91.2    0    4    6    4    36.9    10
14    7    26    札幌    1500    曇    未勝利*    良    0    14    7    500    12    ジョウショーチカラ    牡    2    藤田伸二    705    504    54    11    0    栗    2012100260    109.7    先行    1.5    91.4    0    4    4    4    37.2    12
14    7    26    札幌    1500    曇    未勝利*    良    0    14    7    500    13    ゴールドエッグ    牡    2    丸山元気    1127    452    54    7    0    美    2012103557    27.4    先行    2.1    92    0    2    2    4    37.9    13
14    7    26    札幌    1500    曇    未勝利*    良    0    14    7    500    14    ディープフォルツァ    牡    2    岩田康誠    5203    422    54    3    200    栗    2012104292    5.3    差し    0    89.9    0    9    8    9    35.4    2

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • can110

    2018/11/24 06:26

    ソースコードはコードブロックで囲んでください。

    キャンセル

回答 1

checkベストアンサー

0

コメントに「Horseクラスのリスト. 馬番順に格納」と記載されています。
よってHorseインスタンスのリストを渡せばよいはずです。

race = Race(123,{'レース名':'レースあ'},'開催情報')
horses = [
    Horse(0,{'馬名':'馬あ'},0,['過去戦績のリストあ']),
    Horse(1,{'馬名':'馬い'},1,['過去戦績のリストい'])]
tbl = HorseTable(race,horses)
tbl.print_table()
"""
レースあ
1. 馬あ
2. 馬い
"""

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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