質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

データ構造

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

1回答

2033閲覧

データの読み込み方法によって読み込み後の計算速度に差があるのか?

hiragaga

総合スコア11

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

データ構造

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

1クリップ

投稿2021/12/15 09:36

前提・実現したいこと

質問というより疑問ですが,実行のたびにpandas_datareaderを使って日経225先物とTOPIXの株価をstooqからスクレイピングして得たデータを使用して計算していたのですが(以後,方法1と記述),
stooqからスクレイピングをしてcsvに保存したデータを使って,実行のたびにcsvを読み込んでプログラムを計算した(以後,方法2と記述)ところ計算が1.4倍くらい早くなりました.(下にプログラムがあります)

方法1も2もデータはdfにいれて,dfから値を参照しているので,途中でcsvを読み込んだり,スクレイピングをしていないです.最初の読み込みの時間に差が生じるのは読み込み方法が違うのでわかりますが,途中の計算のスピードが変わるのは理解できません.

プログラムでは,日経225先物とTOPIXを使っていて以下のプログラムの後では,dfを使って値を呼び出しています.
深層強化学習で株の売買戦略の計算をしているのですが,具体的にどのような計算で処理速度が変わったかのプログラムがないので情報不足かと思いますが(あまりにも長いので),答えていただけると幸いです.
また,データの読み込み方によって,その後の処理が早くなる方法等あれば知りたいです.

方法2のコード

python

1import pandas as pd 2import datetime__イタリックテキスト__ 3import pandas_datareader 4 5start = datetime.date(2018, 1, 1) 6end = datetime.date(2019, 12, 31) 7date_split = '2018-12-31' 8stockcode1 = "^TPX" 9stockcode2 = "^NKX" 10data1 = pandas_datareader.stooq.StooqDailyReader(stockcode1, start, end).read() 11data2 = pandas_datareader.stooq.StooqDailyReader(stockcode2, start, end).read() 12data1= data1.sort_values(by="Date",ascending=True) 13data2= data2.sort_values(by="Date",ascending=True) 14#片方のデータしかない日付を除去する 15df = pd.merge(data1, data2, on='Date', how='inner')

方法1のコード

python

1import pandas as pd 2 3data_start ='2018-01-01' 4data_end = '2019-12-31' 5data1 = pd.read_csv('NK225.csv') 6data1 = data1.set_index('Date') 7data1 = data1[data_start:data_end] 8data2 = pd.read_csv('TOPIX.csv') 9data2 = data2.set_index('Date') 10data2 = data2[data_start:data_end] 11#片方のデータしかない日付を除去する 12df = pd.merge(data1, data2, on='Date', how='inner') 13

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

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

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

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

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

guest

回答1

0

ベストアンサー

  • データの読み込み方法によって読み込み後の計算速度に差があるのか?

あります。

計算時間は、実行される機械命令数だけではなく、データの配置も影響しますし、実メモリ不足によるページングも影響します。

hiragagaさんのコードでは、実メモリ不足によるページングが影響している可能性が高いです。
それにはPythonのメモリ管理が影響しています。
Pythonのメモリ管理は動的にオブジェクトを割当て、参照カウントによるガーベジコレクションを行っています。この方式では、解放されたメモリの再利用が難しいのと、循環参照によりメモリ未回収が起こってしまい、そのために使われていないメモリが多くなるために実メモリが少なくなりページング時間が増えてしまうのです。

循環参照によりメモリ未回収の対策は公式ドキュメント gc --- ガベージコレクタインターフェースをお読みください。
それでも改善しない分は解放されたメモリの再利用問題です。これは、一旦ファイルに保存し、それ読み込むことで改善されます。つまり、方法2をやりなさいということです。

投稿2021/12/15 11:59

ppaul

総合スコア24670

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

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

hiragaga

2021/12/16 06:18

丁寧に答えていただき誠にありがとうございます.完全に理解できたわけではないですが,とても面白いなと思いました.ありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問