プログラミング初心者です.
現在,pythonを用いてcsv形式のデータの分析を行っております.
前提として,csv,numpy,pandasなどのモジュールを使用しないプログラムを組んでおります.
5分ごとに計測する機器が1か月間計測したデータがあり、そのデータの欠損している時刻(ランダムに欠損している)を補完する(時刻のデータのみが時刻通りに補完できていれば可)プログラムを自分なりに組んでみました。
このデータは、あらゆる地点のデータがまとめられたものであり、下のプログラムでは、ある一点のみのデータを抽出して欠損した時刻を補完しているのですが、全地点に関して同様の処理を行うことはできないでしょうか。
補足
・地点にはそれぞれ地点番号が振られています。
・i[0] = 時刻
・i[2] = 地点番号
・要素数は1データにつき10個
・流れとしては、#ある一点のみのデータを配列に格納 の部分を
PYTHON
1data={} 2for i in data2: 3 a=data.get(i[2],[]) 4 a.append(i) 5 data[i[2]]=a
に変え、地点番号をキーとして、データを辞書型に格納して処理を行いたいと考えています。
その他に、プログラムを簡潔に示す方法があればご指摘よろしくお願いします.
以下にプログラムを記します。
PYTHON
1import datetime 2 3filepath = 'aaa.csv' 4 5start =(datetime.datetime.strptime('2018/09/01 00:00', '%Y/%m/%d %H:%M')) 6end = (datetime.datetime.strptime('2018/09/30 23:55', '%Y/%m/%d %H:%M')) 7 8with open(filepath,encoding="shift-jis") as f:#データ読み込み 9 next(f) 10 data2=[] 11 for line in f: 12 line = line.replace('\n','') 13 data = line.split(',') 14 data2.append(data) 15 16for i in data2:#時刻のデータ型変更 17 tmdata=(datetime.datetime.strptime(i[0], '%Y/%m/%d %H:%M')) 18 i[0]=tmdata 19 20data3=[]#ある一点のみのデータを配列に格納 21for i in data2: 22 if i[2] =='1': 23 data3.append(i) 24 25error=0 26error1=0 27error2=0 28i=0 29n=len(data3) 30if data3[0][0] != start:#1つ目のデータの時刻が00:00でない場合の欠損 31 sabun1 = data3[0][0] - start 32 min1 = sabun1/ datetime.timedelta(minutes=5) 33 data3.insert(0,[start,0,0,0,0,0,0,0,0,0]) 34 if min1 != 1: 35 error1=min1 36 a1=1 37 while a1<=min1-1: 38 kesson1=start+datetime.timedelta(minutes=5)*a1 39 data3.insert(a1,[kesson1,0,0,0,0,0,0,0,0,0]) 40 a1 +=1 41 else: 42 error1=1 43 44d=int(n+error1) 45if data3[d-1][0] != end:#最後のデータが23:55でない場合の欠損 46 data3.append([end,0,0,0,0,0,0,1,0,0]) 47 error2=1 48 49d=int(error1+error2) 50while i<8638: #欠損数を求める 51 sabun=data3[i+1][0]-data3[i][0] 52 min=sabun/ datetime.timedelta(minutes=5) 53 if min != 1: 54 error=error+(min-1) 55 a=1 56 while a<=min-1: 57 kesson=data3[i][0]+datetime.timedelta(minutes=5)*a 58 data3.insert(i+a,[kesson,0,0,0,0,0,0,0,0,0]) 59 a+=1 60 i += 1 61 62print(len(data3))
下に示すURLの「一般道路の「断面交通量情報」 (2019年8月分)」がほぼ同じ形式のデータになります.
http://public-data.jartic-raws.durasite.net/opendata.html
プログラムでは2018年9月ですが,用意できたデータは2019年8月のみでした.
回答1件
あなたの回答
tips
プレビュー