時系列データを分析する時、csv/tsvファイルからデータを読み込む処理をすることがよくありますよね。 数十MBに収まる容量のファイルならそこまで気にならないかもしれませんが、数百MB程度のファイルになると読み込むだけで数秒〜数十秒かかったりして、コードを実行する度に発生する待ち時間がストレスになってしまいます。 ここでは少しの工夫で読み込みの処理を爆速化出来る方法を紹介します。 実行環境 手元のMBPで実行時間の計測を行います。
![[Python] 時系列CSVの読み込みを爆速化する - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/386651c5b9def5dfaddb5a6a5a8d0c2a58655164/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JTVCUHl0aG9uJTVEJTIwJUU2JTk5JTgyJUU3JUIzJUJCJUU1JTg4JTk3Q1NWJUUzJTgxJUFFJUU4JUFBJUFEJUUzJTgxJUJGJUU4JUJFJUJDJUUzJTgxJUJGJUUzJTgyJTkyJUU3JTg4JTg2JUU5JTgwJTlGJUU1JThDJTk2JUUzJTgxJTk5JUUzJTgyJThCJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz05NDU1YjgzMTE2M2Y0MGNlNDExZjIyODI4ODA5ZTQyNw%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBZdWhzYWsmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTQ1OWNiMmVkYTI2NzcxNmJlMDk3OTI3OGE1YWNmZmY5%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3Dc87d829c63bc940325ee975b99eef88e)
時系列データを分析する時、csv/tsvファイルからデータを読み込む処理をすることがよくありますよね。 数十MBに収まる容量のファイルならそこまで気にならないかもしれませんが、数百MB程度のファイルになると読み込むだけで数秒〜数十秒かかったりして、コードを実行する度に発生する待ち時間がストレスになってしまいます。 ここでは少しの工夫で読み込みの処理を爆速化出来る方法を紹介します。 実行環境 手元のMBPで実行時間の計測を行います。
iperf -c サーバーのIP -u -i 1 -yc [~] 20161006082657,192.168.0.3,65472,サーバーのIP,5001,4,0.0-1.0,132300,1058400 20161006082658,192.168.0.3,65472,サーバーのIP,5001,4,1.0-2.0,130830,1046640 20161006082659,192.168.0.3,65472,サーバーのIP,5001,4,0.0-2.3,296940,1047658 20161006082659,サーバーのIP,5001,192.168.0.3,65472,4,0.0-2.3,296940,1048896,1.547,0,202,0.000,0 こんな感じでCSVフォーマットで標準出力してくれます。 ver3系 ver3系ではCSV出力の機能がオミットされました。 代わ
pythonでcsvを読み込む方法についてまとめました。ライブラリによって微妙に読み込み方が異なるので大変です。 この記事では、以下のdata.csvを読み込む場合を考えます。最初の行がヘッダ行で、それ以降の行がデータ行です。 a,b,c 2,5.6,1 1,7.0,0 3,6.2,1 3,7.9,1 方法1: 標準ライブラリのcsvを使う方法 csv.readerオブジェクトを使って一行ずつ読んでいく方法です。ヘッダ行の部分を特別扱いする必要があります。 import csv def open_with_python_csv(filename): data = [] with open(filename, 'r') as filename: reader = csv.reader(filename) # ヘッダ行は特別扱い header = next(reader) # 中身 for r
トレタのAPI開発を担当している芹沢です。 トレタでは、長時間かかるバッチ処理を複数台のサーバ上で処理させて短時間で処理できるバッチ処理基盤をAWS上で構築しました。この仕組みについて説明します。 目的 短期的には以下の課題を解決するため、長期的には似たような要件が再度発生した時に、同じ手法で解決できることを目的に作りました。 非同期でDBをデータソースとしたデータを加工してCSVファイルとして出力してS3にputしたい データソースはDBに入っているリアルタイムのデータであることが求められる CSVファイルの作成は決められた時間内に完了する必要がある 対象となるデータソースの量は日々増加し続けるが、常に決められた時間内にCSV作成が完了している必要がある 難点 今回の要件で技術的に難しい点は以下の2点です。 DBを直接参照しながら大量のデータを処理する 例えば、データソースとしてDBから
「JMeterの結果CSV、216万行か〜。これくらいだったらJMeterの「グラフ表示」で読み込んで見られるかな〜」 CPU「ブオオオオオオオオン!」 はじめに システムの負荷試験において、Apache JMeterのようなツールを使って試験を実施・結果を出力するケースもあると思います。結果ファイルのサイズがそれほど大きくない場合は、全データを計算する(JMeterでいう「統計レポート」)で問題ありませんが、例えば、長時間負荷をかけたので時系列でデータをグラフ化したい、といったことになると事情が変わってきます。JMeterの結果CSVは手元にあるので、なんとかこれを活用したいところではありますが、数百万行レベルのデータになると、とたんにExcelなどでは辛くなります(というか最大行数的に無理な気がします)。 そこで、ちょうど、弊社木戸がElasticsearchシリーズを連載しているとこ
テキストベースのファイル形式と、それぞれを(主にLinux上で)操作するためのコマンドラインツールのリストを掲載しています。 目次 DSV XML,HTML JSON YAML,TOML INI 設定ファイル おまけ:単一ファイルデータベース用コマンドラインインタフェース(CLI) ライセンス 情報開示 DSV CSV や TSV などを含む DSV(Delimiter-separated values、区切り文字で区切られた値) です。 Awk AwkはPOSIXで標準化されているコマンドラインツールで、DSVデータ処理用プログラミング言語です。Awkに関するリンクは以下のとおりです。 Awk.info — Awkに関する情報が豊富です。 AWK Vs NAWK Vs GAWK —プラットフォーム別実装の比較です。 すでにプログラミング言語を使用してプログラミングをしている場合は、naw
10年以上前に作ったデータで、今でも現役で使っているファイルってあるでしょうか。もちろん、同じ仕事を10年以上続けていれば、そうしたデータもあることでしょう。しかし、データだけがあっても、それを読み書きするアプリケーションがなくなっては元も子もありません。OSはどんどんバージョンアップしていきますので、最新のOSでも常に、そのデータを読み書きするアプリケーションがなくてはなりません。そうして考えると、10年以上前に作ったデータが今も使えるというのは、とても汎用的な形式であることが分かります。 今回は、汎用的なデータ形式の中でも、特に長い年月を生き残っているデータ形式のCSV形式を紹介します。というのも、先日の本連載で、Node.jsでライブラリの作り方を示したときに、簡単な例としてCSVファイルの読み書きを行うプログラムを紹介したのですが、「もっと詳しくCSVライブラリの使い方を知りたい」
Pythonのcsvパッケージは大変便利です。面倒なエスケープ処理をちゃんと行ってくれます。とりわけ、Excelファイルで送られてきたファイルを処理するのに重宝します。なんといっても、dialect='excel'でExcel CSVをちゃんと読めます。 ところが、日本語が絡むと問題は途端に厄介になります。問題の本質は何か。まず、ExcelのTSVの扱いに関して、以下のことが知られています。 Excelのtsvエクスポートはutf-16(BOM付き)である Excelが直接読めるのはBOM付きutf-16のtsvである(カンマ区切りはウィザードが必要) csv(カンマ区切り)出力や読み込みも可能だがおすすめできない(後述) このことからわかるのは、BOM付きutf-16ファイルを扱うのが最善ということです。これを扱う一番の方法は、ioパッケージを使うことです。 さらっと書きましたが、ioパ
Mark NeedhamDecember 2nd, 2014Last Updated: December 2nd, 2014 In my last blog post I showed how to write to a single CSV file using Spark and Hadoop and the next thing I wanted to do was add a header row to the resulting row. Hadoop’s FileUtil#copyMerge function does take a String parameter but it adds this text to the end of each partition file which isn’t quite what we want. However, if we copy
My output is a set of tuples and when I output it using saveAsTextFile, my file looks as follows: (field1_tup1, field2_tup1, field3_tup1,...) (field1_tup2, field2_tup2, field3_tup2,...) In Spark. is there some way I can simply have it output in CSV format as follows (i.e. without the parentheses): field1_tup1, field2_tup1, field3_tup1,... field1_tup2, field2_tup2, field3_tup2,... I could write a s
A couple of weeks ago I wrote how I’d been using Spark to explore a City of Chicago Crime data set and having worked out how many of each crime had been committed I wanted to write that to a CSV file. Spark provides a saveAsTextFile function which allows us to save RDD’s so I refactored my code into the following format to allow me to use that: import au.com.bytecode.opencsv.CSVParser import org.a
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く