2016-04-14 13 views
0

現在のPythonプログラミング能力をはるかに上回る問題に取り組んでいます。私は、異なるモジュール(csv reader、numpyなど)を1つのスクリプトに結合するのが難しいです。私のデータには、何日間にもわたって(分の解像度で)気象変数の大きなリストが含まれています。私の目的は、毎日午前9時から午後12時の間の風速の傾向をリストで調べることです。風速の勾配が正の場合、風向きと一緒に、新しいcsvファイルにこれが発生した日付を書きたいと思います。配列に線形回帰を実行し、勾配に応じてPythonでcsvに書き込む

データは、数千行に及ぶと、次のようになります。

hd,Station Number,Year Month Day Hours Minutes in YYYY,MM,DD,HH24,MI format in Local time,Year Month Day Hours Minutes in YYYY,MM,DD,HH24,MI format in Local standard time,Year Month Day Hours Minutes in YYYY,MM,DD,HH24,MI format in Universal coordinated time,Precipitation since last (AWS) observation in mm,Quality of precipitation since last (AWS) observation value,Air Temperature in degrees Celsius,Quality of air temperature,Air temperature (1-minute maximum) in degrees Celsius,Quality of air temperature (1-minute maximum),Air temperature (1-minute minimum) in degrees Celsius,Quality of air temperature (1-minute minimum),Wet bulb temperature in degrees Celsius,Quality of Wet bulb temperature,Wet bulb temperature (1 minute maximum) in degrees Celsius,Quality of wet bulb temperature (1 minute maximum),Wet bulb temperature (1 minute minimum) in degrees Celsius,Quality of wet bulb temperature (1 minute minimum),Dew point temperature in degrees Celsius,Quality of dew point temperature,Dew point temperature (1-minute maximum) in degrees Celsius,Quality of Dew point Temperature (1-minute maximum),Dew point temperature (1 minute minimum) in degrees Celsius,Quality of Dew point Temperature (1 minute minimum),Relative humidity in percentage %,Quality of relative humidity,Relative humidity (1 minute maximum) in percentage %,Quality of relative humidity (1 minute maximum),Relative humidity (1 minute minimum) in percentage %,Quality of Relative humidity (1 minute minimum),Wind (1 minute) speed in km/h,Wind (1 minute) speed quality,Minimum wind speed (over 1 minute) in km/h,Minimum wind speed (over 1 minute) quality,Wind (1 minute) direction in degrees true,Wind (1 minute) direction quality,Standard deviation of wind (1 minute),Standard deviation of wind (1 minute) direction quality,Maximum wind gust (over 1 minute) in km/h,Maximum wind gust (over 1 minute) quality,Visibility (automatic - one minute data) in km,Quality of visibility (automatic - one minute data),Mean sea level pressure in hPa,Quality of mean sea level pressure,Station level pressure in hPa,Quality of station level pressure,QNH pressure in hPa,Quality of QNH pressure,# 
hd, 40842,2000,03,20,10,50,2000,03,20,10,50,2000,03,20,00,50,  ,N, 25.7,N, 25.7,N, 25.6,N, 21.5,N, 21.5,N, 21.4,N, 19.2,N, 19.2,N, 19.0,N, 67,N, 68,N, 66,N, 13,N, 9,N,100,N, 4,N, 15,N,  ,N,1018.6,N,1017.5,N,1018.6,N,# 
hd, 40842,2000,03,20,10,51,2000,03,20,10,51,2000,03,20,00,51, 0.0,N, 25.6,N, 25.8,N, 25.6,N, 21.5,N, 21.6,N, 21.5,N, 19.2,N, 19.4,N, 19.2,N, 68,N, 68,N, 66,N, 11,N, 9,N,107,N, 11,N, 13,N,  ,N,1018.6,N,1017.5,N,1018.6,N,# 
hd, 40842,2000,03,20,10,52,2000,03,20,10,52,2000,03,20,00,52, 0.0,N, 25.8,N, 25.8,N, 25.6,N, 21.7,N, 21.7,N, 21.5,N, 19.5,N, 19.5,N, 19.2,N, 68,N, 69,N, 66,N, 11,N, 9,N, 83,N, 13,N, 13,N,  ,N,1018.6,N,1017.5,N,1018.6,N,# 
hd, 40842,2000,03,20,10,53,2000,03,20,10,53,2000,03,20,00,53, 0.0,N, 25.8,N, 25.9,N, 25.8,N, 21.6,N, 21.8,N, 21.6,N, 19.3,N, 19.6,N, 19.3,N, 67,N, 68,N, 66,N, 9,N, 8,N, 87,N, 14,N, 11,N,  ,N,1018.6,N,1017.5,N,1018.6,N,# 
hd, 40842,2000,03,20,10,54,2000,03,20,10,54,2000,03,20,00,54, 0.0,N, 25.8,N, 25.8,N, 25.8,N, 21.6,N, 21.6,N, 21.6,N, 19.3,N, 19.3,N, 19.2,N, 67,N, 67,N, 67,N, 8,N, 4,N, 98,N, 23,N, 9,N,  ,N,1018.6,N,1017.5,N,1018.6,N,# 
hd, 40842,2000,03,20,10,55,2000,03,20,10,55,2000,03,20,00,55, 0.0,N, 25.7,N, 25.8,N, 25.7,N, 21.5,N, 21.6,N, 21.5,N, 19.2,N, 19.3,N, 19.2,N, 67,N, 68,N, 66,N, 8,N, 4,N, 68,N, 15,N, 9,N,  ,N,1018.6,N,1017.5,N,1018.6,N,# 
hd, 40842,2000,03,20,10,56,2000,03,20,10,56,2000,03,20,00,56, 0.0,N, 25.9,N, 25.9,N, 25.7,N, 21.7,N, 21.7,N, 21.5,N, 19.4,N, 19.4,N, 19.2,N, 67,N, 68,N, 66,N, 8,N, 5,N, 69,N, 16,N, 9,N,  ,N,1018.6,N,1017.5,N,1018.6,N,# 
hd, 40842,2000,03,20,10,57,2000,03,20,10,57,2000,03,20,00,57, 0.0,N, 26.0,N, 26.0,N, 25.9,N, 21.8,N, 21.8,N, 21.7,N, 19.5,N, 19.5,N, 19.4,N, 67,N, 68,N, 66,N, 9,N, 5,N, 72,N, 10,N, 11,N,  ,N,1018.6,N,1017.5,N,1018.6,N,# 
hd, 40842,2000,03,20,10,58,2000,03,20,10,58,2000,03,20,00,58, 0.0,N, 26.0,N, 26.1,N, 26.0,N, 21.7,N, 21.8,N, 21.7,N, 19.4,N, 19.5,N, 19.3,N, 66,N, 67,N, 66,N, 8,N, 5,N, 69,N, 13,N, 11,N,  ,N,1018.6,N,1017.5,N,1018.6,N,# 

風速がうまくいけば、下記のフォームのものであろう12時まで午前9時から増加した日付のみが含ま完了したファイル:

date,wind direction,gradient_of_wind_speed, 
2000/3/25,108,0.7, 
2000/4/17,67,0.4, 
... 

勾配の正確な値は重要ではなく、肯定的なものであるため、(1,2,3,4,5 ...)の形式の2番目の配列を構築すると問題ありません線形回帰の配列の2番目の次元として使用します。この課題は、多くの日にデータが欠落していることにあります。そのため、アレイの長さは180(つまり、午前9時から午後12時の間は180分)ですが、実際は可変長です。

この問題は、複数のスクリプト(100以上のファイルに対してこれを実行する必要があることに注意してください)を使って簡単に取り組まれていますか、またはこのチャレンジに1つのスクリプトで取り組む簡単な方法がありますか?

未遂コード:受け取っている

import glob 
import pandas as pd 
import numpy as np 

for file in glob.glob('X:/brisbaneweatherdata/*.txt'): 
    df = pd.read_csv(file) 
    for date, group in df.groupby(['Year Month Day Hours Minutes in YYYY','MM','DD']): 
     morning_data = group[group.HH24.between('09','12')] 
     # calculate your linear regression here 
     gradient, intercept = np.polyfit(morning_data.HH24,morning_data['Wind (1 minute) speed in km/h'], 1) 
     wind_direction= np.average(morning_data.HH24,morning_data['Wind (1 minute) direction in degrees true']) 
     if gradient > 0 : 
      print(date + "," + gradient + "," + wind_direction) 

エラーメッセージ:

runfile('X:/python/linearregression.py', wdir='X:/python') 
X:/python/linearregression.py:1: DtypeWarning: Columns (17,25,27,29,31,33,35,37,55,57,59) have mixed types. Specify dtype option on import or set low_memory=False. 
    import glob 
Traceback (most recent call last): 

    File "<ipython-input-26-ace8af14da2c>", line 1, in <module> 
    runfile('X:/python/linearregression.py', wdir='X:/python') 

    File "C:\Users\kirkj\AppData\Local\Continuum\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 699, in runfile 
    execfile(filename, namespace) 

    File "C:\Users\kirkj\AppData\Local\Continuum\Anaconda2\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 74, in execfile 
    exec(compile(scripttext, filename, 'exec'), glob, loc) 

    File "X:/python/linearregression.py", line 8, in <module> 
    morning_data = group[group.HH24.between('09','12')] 

    File "C:\Users\kirkj\AppData\Local\Continuum\Anaconda2\lib\site-packages\pandas\core\series.py", line 2486, in between 
    lmask = self >= left 

    File "C:\Users\kirkj\AppData\Local\Continuum\Anaconda2\lib\site-packages\pandas\core\ops.py", line 761, in wrapper 
    res = na_op(values, other) 

    File "C:\Users\kirkj\AppData\Local\Continuum\Anaconda2\lib\site-packages\pandas\core\ops.py", line 716, in na_op 
    raise TypeError("invalid type comparison") 

TypeError: invalid type comparison 

答えて

1

私はあなたがあなたのファイルを反復処理するglobを使用して、かなり簡単なスクリプトでこれを行うことができるはずだと思うし、 pandasあなたのデータを読む。ここでは、どのように構造化するのかの基本的な概要を示します。

import glob 
import pandas as pd 
for file in glob.glob('data/*'): 
    df = pd.read_csv(file) 
    for date, group in df.groupby(['year','month','day']: 
     morning_data = group[group.HH24.between('09','12')] 
     # calculate your linear regression here 
     gradient, intercept = np.polyfit(morning_data.HH24,morning_data['wind speed'], 1) 
     if gradient > 0 : 
      print(gradient + "," + wind_direction + "," + gradient) 
+0

あなたの答えはありがたいです。私はグロブに慣れる必要があります。 1つの質問ですが、このコードはそれぞれの日付でいつも見ていますか?午前9時から午後12時の間に集中したいのであれば、これらの時間だけを含む新しいファイルを作成する必要がありますか? –

+1

グロブはかなり簡単ですが、基本的に 'dir'や' ls'のワイルドカードと同じです。新しいファイルを作成しないでください。フィルターをかけるためにパンダを使用します。基本的なアイデアを表示するために私の回答の質問を編集します。 – maxymoo

+0

こんにちは、私はあなたのコードを拡張しようとしましたが、 (無効な型比較)。 –

関連する問題