4

私はスタックオーバーフローに比較的慣れていないので、ご容赦ください。また、タイトルや曖昧な表現等についてお詫び申し上げます。

だから、ここに私がやろうとしていることがあります:

シーズン全体の NBA ゲームのプレイを含む生データ ファイルを .CSV 形式で取得しています。

ゲームに基づいたコードは、ゲームに適したタイトルの新しいファイルを作成します。次に、各行を読み取ります。

各行には、ゲーム ID、行番号 (無関係)、残り時間、および「プレイ情報」が含まれます。

以下に例を示します (例 1)。

以下にある (例 2) に記載する必要がある情報には、コートに 10 人のプレーヤーがいます。

  • プレーが記録された時間
  • 期間
  • 期間の残り時間
  • イベントの種類
  • アシストがあれば
  • アシストを記録した選手
  • ファウルがある場合
  • だまされた人

「プレーヤー」の見出しは、最初のプレーが誰のために記録されたかを示します (つまり、プレーヤーが「ショット」を行った場合、そのプレーヤーの名前が記録されます)。プレーが記録されたチームも書かれています。

例 1:

GameID, LineNumber, TimeRemaining,  Entry

20071030HOULAL, 1,  0:48:00,        Start of 1st Quarter
20071030HOULAL, 2,  0:48:00,        Jump Ball Brown vs Yao
20071030HOULAL, 3,  0:47:42,        [LAL] Walton Jump Shot: Missed
20071030HOULAL, 4,  0:47:41,        [LAL] Brown Rebound (Off:1 Def:0)
20071030HOULAL, 5,  0:47:29,        [LAL] Bryant Jump Shot: Missed
20071030HOULAL, 6,  0:47:28,        [HOU] Alston Rebound (Off:0 Def:1)
20071030HOULAL, 7,  0:47:06,        [HOU] Yao Jump Shot: Missed

例 2:

a1(away),a2(away), a3(away), a4, a5, h1, h2, h3, h4, h5, period,time,team, etype, assist, away, block, entered, home, left, num, opponent, outof, player, points,possession, reason, result, steal

(csv ファイルの各行に保存されている値を表します - サンプル データを含めるには混乱しすぎます)

問題はこれです:

各チームには、選手名簿があります。私のコードは、プレーヤー名簿を取得し、プレーヤーの姓のみを使用して名簿を作成します (これがプレーヤー名の記録方法です)。

最初の問題は、コートにいる各チームの 10 人のプレーヤーすべてを集計するときに発生します。

アキュムレータを使用して、10 人のプレーヤーがすべて記録されるまでプレイ データを保存し、その後、10 人のプレーヤーを追加してプレイ データを書き込みます。

問題は、コートにいるプレーヤーとして指定された変数に対してチェックが実行されると、一部のプレーヤーが「スキップ」されることです。

たとえば、ヒューストンでプレーするルーサー ヘッドのプレーが記録されていますが、a1, a2, a3, a4or a5(現在のゲームのアウェイ チーム) には記録されません。

firstPlayerこれは、プレイが記録された人物でありsecondPlayer、たとえばアシストが記録された追加のプレーヤーである「チェック」をセットアップする方法です。

if team == homeTeam:
    if h1 == ' ' and firstPlayer != h2 and firstPlayer != h3 and firstPlayer != h4 and firstPlayer != h5:
        h1 = firstPlayer
    if h2 == ' ' and firstPlayer != h1 and firstPlayer != h3 and firstPlayer != h4 and firstPlayer != h5:
        h2 = firstPlayer
    if h3 == ' ' and firstPlayer != h1 and firstPlayer != h2 and firstPlayer != h4 and firstPlayer != h5:
        h3 = firstPlayer
    if h4 == ' ' and firstPlayer != h1 and firstPlayer != h2 and firstPlayer != h3 and firstPlayer != h5:
        h4 = firstPlayer
    if h5 == ' ' and firstPlayer != h1 and firstPlayer != h2 and firstPlayer != h3 and firstPlayer != h4:
        h5 = firstPlayer               

if team == visitingTeam:
    if a1 == ' ' and firstPlayer != a2 and firstPlayer != a3 and firstPlayer != a4 and firstPlayer != a5:
        a1 = firstPlayer
    if a2 == ' ' and firstPlayer != a1 and firstPlayer != a3 and firstPlayer != a4 and firstPlayer != a5:
        a2 = firstPlayer
    if a3 == ' ' and firstPlayer != a1 and firstPlayer != a2 and firstPlayer != a4 and firstPlayer != a5:
        a3 = firstPlayer
    if a4 == ' ' and firstPlayer != a1 and firstPlayer != a2 and firstPlayer != a3 and firstPlayer != a5:
        a4 = firstPlayer
    if a5 == ' ' and firstPlayer != a1 and firstPlayer != a2 and firstPlayer != a3 and firstPlayer != a4:
        a5 = firstPlayer

if etype != 'sub':  <<<<----This type of event is diffent
    if team == homeTeam and secondPlayer != ' ':
        if h1 == ' ' and secondPlayer != h2 and secondPlayer != h3 and secondPlayer != h4 and secondPlayer != h5:
            h1 = secondPlayer
        if h2 == ' ' and secondPlayer != h1 and secondPlayer != h3 and secondPlayer != h4 and secondPlayer != h5:
            h2 = secondPlayer 
        if h3 == ' ' and secondPlayer != h1 and secondPlayer != h2 and secondPlayer != h4 and secondPlayer != h5:
            h3 = secondPlayer 
        if h4 == ' ' and secondPlayer != h1 and secondPlayer != h2 and secondPlayer != h3 and secondPlayer != h5:
            h4 = secondPlayer 
        if h5 == ' ' and secondPlayer != h1 and secondPlayer  != h2 and secondPlayer != h3 and secondPlayer != h4:
            h5 = secondPlayer

    if team == visitingTeam and secondPlayer != ' ':
        if a1 == ' ' and secondPlayer != a2 and secondPlayer != a3 and secondPlayer != a4 and secondPlayer != a5:
            a1 = secondPlayer
        if a2 == ' ' and secondPlayer != a1 and secondPlayer != a3 and secondPlayer != a4 and secondPlayer != a5:
            a2 = secondPlayer
        if a3 == ' ' and secondPlayer != a1 and secondPlayer != a2 and secondPlayer != a4 and secondPlayer != a5:
            a3 = secondPlayer
        if a4 == ' ' and secondPlayer != a1 and secondPlayer != a2 and secondPlayer != a3 and secondPlayer != a5:
            a4 = secondPlayer
        if a5 == ' ' and secondPlayer != a1 and secondPlayer != a2 and secondPlayer != a3 and secondPlayer != a4:
            a5 = secondPlayer

それが本当に私が抱えている唯一の問題だと思います。

ただし、文字列を検索して情報を取得するためのより良い方法を見つけたいと思います。

プレーヤーを取得するために、文字列の前半を 1 つの変数に割り当て、後半を別の変数に割り当てます。次に、文字列を分割して(sep = ' ')、リストに入れます。

次に、各文字列をチェックして==、プレーが記録されたチームに応じて、名簿内のプレーヤーのいずれかに単語が含まれているかどうかを確認します。

最初の文字列の場合、そのプレーヤーにfirstPlayer 変数が割り当てられ、2 番目の 文字列の場合、そのプレーヤーにsecondPlayer変数が割り当てられます。

(イベント タイプ)を検索するときはetype、次のような式で文字列を検索します。

if 'Shot' in string:
   etype = 'shot'
   player = firstPlayer
   if 'Assist' in string:
       assist = secondPlayer

...など、さまざまなイベントの種類について。

この質問に答えるために追加情報が必要な場合はお知らせください。

4

0 に答える 0