Pythonによるデータ分析・機械学習ブログ

Pythonによるデータの前処理・グラフ化、機械学習、統計解析、画像処理、Webスクレイピング、自然言語処理の基礎について紹介していきます。

MENU

【第23回】リスト内包表記による処理時間の高速化

はじめに

 ビックデータに対するデータ分析を行う際に、データを処理する時間が長くなる傾向があります。処理時間が長いことはそれだけ結果を出すのに時間がかかることから、デメリットと言えます。ましてやアルゴリズムを考案する際に試験的に実行して動作確認を行う際にも時間がかかるとかなり繁雑ですよね。よって、データ処理時間を短くすること、つまりは処理の高速化が重要になってきます。

 処理の高速化の一つに、リスト内包表記という方法があります。具体的にはfor文でループしながらappendでリストに追加する処理をリスト内だけで完結させる処理になります。

 本記事では処理の高速化を目的としたリスト内包表記の手法を紹介します。

Aidemy Premium

 

1. 処理時間の比較

まずは簡単なリスト内表記を用いて処理時間の比較を行いたいと思います。

ここでの処理は以下のように0から10000000まで値をdataリストの格納を対象とします。リスト内包表記をすると、以下の様な表記になります。

それでは処理時間の計測をしていきます。上記の処理を10回試行して、その1回あたりの平均処理時間を算出しています。以下の結果を見てわかる通り、通常のfor文のループ処理は1.55秒、リスト内包表記は0.75秒となっており、リスト内包表記にすることで半分の時間で済んでいることがわかります。

 

2. リスト内包表記:条件

さて、リスト内包表記でもif文による条件を設けることができます。if文だけの場合、以下の例のようにfor文の後に記述します。この例では、0から19までの数字の内、偶数の値だけ抽出してリストに格納しています。一方、if, else文の場合は、for文の前に記述します。この例では、0から19までの数字の内、偶数の場合は値をそのまま格納し、奇数の場合は0を格納する処理となっています。

 

3. リスト内包表記:2重ループ

続いて2重ループの表記について紹介します。通常の2重ループ表記とリスト内包表記を合わせて以下に記述します。ここでは2つの例を紹介します。見た目がかなりスッキリしていますね。

まずは一つ目です。

二つ目です。

 

オススメ書籍

Pythonによるあたらしいデータ分析の教科書

Python3エンジニア認定データ分析試験の教科書にもなっている書籍で、データ分析に必要なPythonの基礎手法を身に付けることができます。具体的には、numpyとpandasを用いたデータの前処理、matplotlibを用いたデータのグラフ化、scikit-learnを用いた機械学習の基礎記述方法を身に付けることができます。これ一つで基礎はバッチリで、実務でも十分活用できると思います。個人的には見やすい書籍でした。

データサイエンス教本 Pythonで学ぶ統計分析・パターン認識・深層学習・信号処理・時系列データ分析

こちらの書籍は初心者から少し記述できるようになった人、かつ数学的な理論と一緒にPythonの記述方法を理解したい方にオススメです。統計分析、パターン認識、深層学習、信号処理、時系列データといった幅広く実務で使用する手法を学びたい方にもオススメです。

東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~

こちらの基礎を抑えながら実務で必要なPython記述法を学べる書籍です。基礎を一つ一つ抑えるというよりも実務で活用できるように必要な知識を身に付けられると感じました。これ一冊あれば十分かなと思いました。

 

スキル修得&転職

 近年、DXの進展に伴うデジタル人材の需要の高まりに追いついていない状況が続いていると経済産業省がホームページで記載している通り、DX人材、IT人材が不足しているのが現状です。さらにコンピュータの性能向上やAI技術の発展により、よりDX人材、IT人材の需要が高まってきます。さらには、今後の長期間安定して職がある業種とも考えられます。

以下の求人では、IT業界の転職や、IT未経験だけどIT人材を志望する就活を支援してくれます。無料で会員登録もできるので、まずは登録だけでもして様子を見てみてはいかがでしょうか?

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

 

おわりに

 本記事では処理の高速化を目的としたリスト内包表記の手法を紹介しました。処理速度が速いことに越したことはありません。リスト内包表記を用いて処理速度を高速化しましょう。