2009-06-18 16 views
0

私はx/y軸上で整数を取る非常に簡単なチャートコンポーネントを持っています。私の問題は、このグラフでdate/floatを表現する必要があることです。だから私は比例した日付をスケールで配布することができました。言い換えれば、次の日付があるとします:01/01/2008、02/01/2008、31/12/2008。アルゴリズムは0、16.667、および100(1か月= 16.667%)を返します。Pythonでスケールに比例的に日付を配分する方法

timedeltaのクラスのPython 2.5で試してみましたが、これを実現できません。私はダニの数を使うことができると思ったが、私はdatetimeからその情報を得ることさえできない。

私はこのアルゴリズムをPythonでどのように書くことができますか?それ以外のアイデアやアルゴリズムはありますか?

+1

「これを達成できません」とはどういう意味ですか?あなたは、基準日から一様なデルタを提供することができる日数のタイムデルタを持っています。これが最も簡単な方法です。何がうまくいかなかったのですか?特定のコードを入力してください。 –

+0

アルゴリズムが0、16.67、100を返した場合、それは間違っているように見えます。 16.67%は2ヶ月で、1ヶ月ではありません。 –

答えて

0

あなたがしようとしていることを完全に理解しているかどうかはわかりませんが、UNIXエポックから何秒もの時間を処理し、プレーンな古い減算を使って拡大/あなたのプロットの大きさに。

処理中、マップ関数がこのケースを処理します。 http://processing.org/reference/map_.htmlあなたの目的に合わせてこれを適応させることができます。

1

タイムディスタを数値に変換するのはかなり簡単です。

エポックタイムを選択します。エポックに関連するすべての値のデルタを計算します。デルタを数値に変換します。次に、通常どおりに数値をマップします。

変換は簡単です。ような何か:

def f(delta): 
    return delta.seconds + delta.days * 1440 * 60 + 
     (delta.microseconds/1000000.0) 
3

あなたは、日付を扱っている場合は、あなたがメソッドtoordinalを使用することができます。

import datetime 

jan1=datetime.datetime(2008,1,1) 
dec31=datetime.datetime(2008,12,31) 
feb1=datetime.datetime(2008,02,01) 

dates=[jan1,dec31,feb1] 
dates.sort() 

datesord=[d.toordinal() for d in dates] 
start,end=datesord[0],datesord[-1] 

def datetofloat(date,start,end): 
    """date,start,end are ordinal dates 
    ie Jan 1 of the year 1 has ordinal 1 
     Jan 1 of the year 2008 has ordinal 733042""" 
    return (date-start)*1.0/(end-start) 

print datetofloat(dates[0],start,end) 
    0.0 
print datetofloat(dates[1],start,end) 
    0.0849315068493* 
print datetofloat(dates[2],start,end) 
    1.0 

* 16.67%は約2ヶ月間ですので、2月1日の割合は約半分です。

関連する問題