13

ユーザーあたりの平均収益 (ARPU)、マージン、および顧客が顧客であり続ける年数 (ltvYears) に基づいて、顧客の生涯価値 (LTV) をシミュレートする簡単なスクリプトを作成しました。以下は私のスクリプトです。この行「ltvYears = ltvYears + [ltv_loop]」でエラーをスローします。エラー メッセージは、「TypeError: タプル (「リスト」ではなく) をタプルに連結することしかできません」です。誰かがこれを引き起こしていることを教えてもらえますか? この問題は、"ltvYears = ('f',[])" に起因する可能性があると思われます。型コードを追加して、別のエラー (float と int の乗算) を排除しました。

私は Python を初めて使用するので、このコードには初歩的なミスがある可能性が非常に高いです。

lowYears = 0
highYears = 20
modeYears = 3
ARPU = 65.0*12.0
MARGIN = .30
ltvYears = ('f',[])
ltv = []

def ltv(arpu, years, margin):
    return arpu * years * margin

N = 10000    
for n in range(N):
    #estimate LTV
    ltv_loop = random.triangular(lowYears, highYears, modeYears) 
    ltvYears = ltvYears + [ltv_loop]
    ltv = ltv + [ltv(ARPU, ltvYears, MARGIN)]

show = 0

if (show==1):
    #plot ltv histogram
    plt.hist(ltv,bins=10)
    plt.title("LTV Probability Density")
    plt.xlabel("")
    plt.ylabel("$")
    plt.show()

編集 - これは私の変数のスクリーンショットです。 ここに画像の説明を入力

EDIT2 ---以下のヘルプのおかげで解決策を見つけました。全部で 3 つの問題がありました。

  1. 誤って同じ名前を変数と関数に割り当てました (指摘のために +1 @autopopulated を付けました)
  2. この行は無関係でした "ltvYears = ltvYears + [ltv_loop]"
  3. この行は、2 番目の引数「ltv = ltv + [calculateltv(ARPU, ltv_loop, MARGIN)]」に「ltv_loop」を使用する必要があります。

+1 @DonCallisto と @RikPoggi でアイテム 2 と 3 のヘルプ

4

5 に答える 5

11

ltvYearsはタプルで、次のように定義されています

ltvYears = ('f',[])

したがって、この行になると:

ltvYears = ltvYears + [ltv_loop]

エラーが明確に示すように、Pythonは何をすべきかわかりません:

「TypeError:タプル(「リスト」ではない)をタプルに連結することしかできません」

その行の動作がどうあるべきか明確でないため、解決策を提案するのは困難です。

listおそらく、ltvYears を として定義し、メソッドを呼び出す必要があるだけです.append


編集

ここでOPは言った:

ltvYears = ('f',[])'f'配列に float を含めることを示すために を追加しました。これを行う前は、float と int の乗算に関するエラーが発生していました。

その必要はありません。Python は C ではありません。

ただ行う:

ltvYears = []

以降:

ltvYears.append(ltv_loop)
于 2012-05-08T21:42:07.407 に答える
6

ltvYearsがタプルの場合、次のように連結できます。

ltvYears += (ltv_loop,)
于 2012-05-08T21:48:47.220 に答える
2

あなたのコードから

ltvYears = ltvYears + [ltv_loop]

ltvYearsはタプルなので、そのエラーが発生します。

listこれは、タプルにa を追加できないためです。ltvYearsたぶん、リストにするタイプを変更する必要があります

于 2012-05-08T21:40:00.640 に答える
2

(これは、あなたが尋ねている問題とは別の問題です。それについては @Rik の回答を参照してください。ただし、この問題もあります)

変数と同じ名前の関数を定義しました:

...
ltv = []

def ltv(arpu, years, margin):
    return arpu * years * margin
...

これにより、リスト変数が関数オブジェクトに置き換えられますが、もちろん追加することはできないため、この行は失敗します: ltv = ltv + [ltv(ARPU, ltvYears, MARGIN)].

于 2012-05-08T21:42:40.930 に答える
0

実際には、エラー メッセージが示すのと同じくらい単純です: リストとタプルを連結することはできません。

ltvYearsタプルです。[ltv_loop]リストです。

于 2012-05-08T21:41:40.937 に答える