🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

361閲覧

ある1要素に対する処理を全要素に対して行う方法

TKWTsan

総合スコア8

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/10/31 09:22

編集2019/10/31 09:24

プログラミング初心者です.
現在,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月のみでした.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2019/10/31 09:31

>前提として,csv,numpy,pandasなどのモジュールを使用しないプログラムを組んでおります. 練習目的ならそう明記してください(見る人は気になるので)。練習目的でないのであれば、その方針はおすすめしません。外部ライブラリが使えない条件でもcsvモジュールは役に立つことでしょう。
TKWTsan

2019/10/31 09:43

pythonの基礎的なプログラムの組み方を練習するため、モジュールを使用しないようにしています。説明不足で申し訳ないです。
t_obara

2019/10/31 10:27

でもdatetimeモジュールは利用するのですね。 基礎的なという意図であれば、numpyは十分基礎的な範囲かとは思いますが。
tiitoi

2019/10/31 17:16

numpy、pandas は準標準といってもいいぐらい有名なライブラリですし、実用上は numpy、pandas を使うことになるので、最初からそのライブラリを使ったやり方を覚えたほうがいいと思いますが
guest

回答1

0

自己解決

練習のためnumpyやpandasを使用しないようにしていたのですが、ご指摘のように実用的なことも考え、モジュールを使用したプログラムの作成も練習していきたいと思います。
pandasに欠損値の処理を行う機能があったので、まずpandasの使用を検討してみます。

投稿2019/11/01 02:05

TKWTsan

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問