少し前に、ThoughtWorks が深センでコミュニティ イベントを開催しました。その際、フロントエンド、サーバーサイド、さらにはデータベース (MongoDB) 開発に JavaScript を使用する Web アプリケーション開発者限定の「Fullstack JavaScript」というタイトルの講演がありました。 1 つの言語を学習する必要がある場合でも、アプリケーション全体を実装できます。
これに触発されて、Python はビッグデータのフルスタック開発言語と言えることに気づきました。 Python はクラウド インフラストラクチャ、DevOps、ビッグ データ処理などの分野で注目の言語だからです。
ドメイン | 人気の言語 |
---|---|
クラウドインフラストラクチャ | Python、Java、Go |
デヴオプス | Python、シェル、Ruby、Go |
ウェブクローラー | Python、PHP、C++ |
データ処理 | Python、R、Scala |
JavaScript を知っていれば完全な Web アプリケーションを作成できるのと同じように、Python を知っていれば完全なビッグ データ処理プラットフォームを実装できます。
最近では、クラウド プラットフォーム、大規模データ、または動的スケーリングをサポートしていない場合は、あえてビッグ データを行っているとは言えず、せいぜいビジネス インテリジェンス (BI) を行っていると他の人に伝える程度です。
クラウドプラットフォームはプライベートクラウドとパブリッククラウドに分けられます。人気のプライベート クラウド プラットフォームである OpenStack は Python で書かれています。以前の追撃者である CloudStack は、最初にリリースされたとき、Java で書かれており、Python よりも優れていると強く強調しました。その結果、2015 年初めに CloudStack の創設者である Citrix が OpenStack Foundation に参加することを発表し、CloudStack は終焉を迎えようとしていた。
面倒で独自のプライベート クラウドを構築したくない場合は、パブリック クラウドを使用してください。AWS、GCE、Azure、Alibaba Cloud、Qingyun はいずれも Python SDK しか提供しませんが、GCE では Python と JavaScript SDK しか提供されません。 Qingyun は Python SDK のみを提供します。さまざまなクラウド プラットフォームが Python を重視していることがわかります。
インフラストラクチャ構築に関して言えば、Hadoop について言及する必要があります。Hadoop は、MapReduce データ処理速度が十分ではないため、もはやビッグ データ処理の第一の選択肢ではありません。しかし、Hadoop の 2 つのコンポーネントである HDFS と Yarn は高速です。ますます人気が高まります。 Hadoop の開発言語は Java であり、正式な Python サポートはありませんが、Hadoop の API インターフェイス (pydoop、hadoopy など) をカプセル化するサードパーティ ライブラリが多数あります。
Hadoop MapReduce の代替となるのは 100 倍高速と言われている Spark です。その開発言語は Scala ですが、開発する多くのデータ サイエンティストを喜ばせたいのは非常に無理があります。 Python をサポートせずに Python で。 GlusterFS、Ceph などの HDFS の代替手段はすべて、Python サポートを直接提供します。 Yarn の代わりとなる Mesos は C++ で実装されており、C++ に加えて Java と Python のサポート パッケージも提供します。
DevOpsの中国語名は「開発」「自主運用保守」と呼ばれます。インターネット時代においては、新しいアイデアを迅速にテストし、できるだけ早く安全かつ確実にビジネス価値を提供できることによってのみ、競争力を維持することができます。 DevOps が提唱する自動化されたビルド/テスト/デプロイメントやシステム測定などの技術的実践は、インターネット時代には不可欠です。
Pythonアプリケーションであればsetuptools、pip、virtualenv、tox、flake8などのツールが存在するため自動構築が非常に簡単です。さらに、ほとんどすべての Linux システムには Python インタープリターが組み込まれているため、自動化に Python を使用する場合、システムにソフトウェアを事前にインストールする必要はありません。
自動テストに関しては、Python ベースのロボット フレームワークがエンタープライズ レベルのアプリケーションで人気の自動テスト フレームワークであり、言語とは何の関係もありません。 Cucumber にも多くの支持者がおり、その Python 版である Lettuce もまったく同じことができます。 Locust は自動パフォーマンス テストでもますます注目を集め始めています。
Chef や Puppet などの古い自動構成管理ツールは Ruby で開発されており、依然として強い勢いを維持しています。しかし、どちらも Python で開発された新世代の Ansible と SaltStack は、前の 2 つよりも軽量で、ますます多くの開発者に歓迎されており、そのことが前任者に大きなプレッシャーを与え始めています。
システムの監視と計測に関しては、従来の Nagios は徐々に衰退し、Sensu などの新興企業が好評を博し、クラウド サービスの形で New Relic がスタートアップの標準になりました。これらはいずれも Python を介して直接実装されませんが、Python には必要なものがあります。これらのツールに接続するのは難しくありません。
上記のツールに加え、CloudifyやDeisなど、DevOpsの機能を一通り提供するPythonベースのPaaSプラットフォームもまだ普及していませんが、すでに大きな注目を集めています。
ビッグデータのデータはどこから来るのでしょうか?自社で大量のデータを生成できる一部の企業を除いて、ほとんどの場合、分析のためにインターネット データをキャプチャするためにクローラーに依存する必要があります。
Web クローラーは Python の伝統的な得意分野であり、最も人気のあるクローラー フレームワークである Scrapy、HTTP ツール キット urlib2、HTML 解析ツール beautifulsoup、XML パーサー lxml などはすべてスタンドアロンで使用できるクラス ライブラリです。
ただし、Web クローラーは、Web ページを開いて HTML を解析するだけではありません。効率的なクローラーは、多数の柔軟な同時操作をサポートでき、多くの場合、数千または数万の Web ページを同時にクロールできる必要があります。従来のスレッド プール方式では、大量のリソースが無駄になります。スレッドの数が数千に達すると、システム リソースが基本的に無駄になります。 Python はコルーチン操作を十分にサポートできるため、これに基づいて、Gevent、Eventlet、Celery などの分散タスク フレームワークなどの多くの同時実行ライブラリが開発されています。 AMQP よりも効率的であると考えられている ZeroMQ も、初めて Python バージョンを提供しました。高い同時実行性のサポートにより、Web クローラーはビッグ データの規模に真に達することができます。
キャプチャされたデータには単語の分割処理が必要ですが、この点では Python も劣りません。有名な自然言語処理パッケージである NLTK や中国語の単語の分割に特化した Jieba は、いずれも単語の分割に強力なツールです。
機会を除いてすべての準備ができています。この東風がデータ処理アルゴリズムです。統計理論からデータマイニング、機械学習、そして近年提唱されているディープラーニング理論に至るまで、データサイエンスは百花繚乱の時代を迎えています。データサイエンティストはどのようなプログラミングを使用していますか?
理論研究の分野では R 言語がデータサイエンティストの間で最も人気があるかもしれませんが、R 言語の問題点も明らかです。R 言語は統計学者が作成したため、その構文は少し奇妙です。また、R言語で大規模分散システムを実現しようとすると、エンジニアリングの道を歩むにはまだ長い時間がかかります。したがって、多くの企業はプロトタイプのテストに R 言語を使用し、アルゴリズムが決定された後、それをエンジニアリング言語に翻訳します。
Python はデータ サイエンティストに人気の言語の 1 つでもあります。 R 言語とは異なり、Python 自体はエンジニアリング言語です。データ サイエンティストが Python で実装したアルゴリズムは製品に直接使用できるため、ビッグ データのスタートアップにとってはコストを節約するのに非常に役立ちます。公式には、データ サイエンティストは Python と R を愛しているため、Spark はデータ サイエンティストを満足させるために、これら 2 つの言語に対して非常に優れたサポートを提供しています。
Python にはデータ処理関連のクラス ライブラリが多数あります。高性能科学計算ライブラリ NumPy および SciPy は、他の高度なアルゴリズムのための非常に優れた基盤を築き、Python の描画を Matlab と同じくらい簡単にします。 Scikit-learn と Milk は、これら 2 つのライブラリに基づいて実装された多くの機械学習アルゴリズムを実装しており、深層学習分野の重要なメンバーです。 Theano は GPU アクセラレーションを使用して、高性能の数学的シンボリック計算と多次元行列計算を実現します。もちろん、エンジニアリング分野で広く使用されているビッグ データ処理ライブラリである Pandas もあります。その DataFrame 設計は R 言語から借用されており、後に Spark プロジェクトに同様のメカニズムを実装するきっかけを与えました。
ちなみに、iPython というツールもあります。あまりにも便利なので、標準ライブラリだと思って導入するのを忘れていました。 iPython は、Python コードの各部分の結果をリアルタイムで確認できる対話型の Python 実行環境です。デフォルトでは、iPython はコマンド ラインで実行され、ipython ノートブックを実行して Web ページ上で実行できます。 matplotlibで描いた図形をiPython Notebookに埋め込んで直接表示することができます。
iPython Notebook のノートブック ファイルは他の人と共有できるため、他の人が自分の環境で作業結果を再現できます。相手が実行環境を持っていない場合は、直接 HTML や PDF に変換することもできます。
アプリケーション開発エンジニア、運用保守エンジニア、データ サイエンティストが皆 Python を好むからこそ、Python はビッグ データ システムのフルスタック開発言語となったのです。
開発エンジニアにとって、Python の優雅さとシンプルさが最大の魅力であることは間違いありません。Python インタラクティブ環境では、これをインポートして Python の禅を読むと、Python がなぜそれほど魅力的なのかがわかります。 Python コミュニティは常に非常にダイナミックであり、NodeJS コミュニティにおけるソフトウェア パッケージの爆発的な成長とは異なり、Python ソフトウェア パッケージの成長率は比較的安定しており、ソフトウェア パッケージの品質も比較的高いです。 Python はスペースに関する要件が厳しすぎると批判する人が多いですが、この要件があるからこそ、大規模なプロジェクトを実行する場合、Python は他の言語よりも有利になります。これを証明するために、OpenStack プロジェクトのコードは合計 200 万行を超えています。
運用およびメンテナンス エンジニアにとって、Python の最大の利点は、ほぼすべての Linux ディストリビューションに Python インタープリタが組み込まれていることです。 Shell は強力ですが、その構文は十分に洗練されておらず、より複雑なタスクを記述するのは困難です。シェルの代わりに Python を使用して複雑なタスクを実行すると、運用および保守担当者は解放されます。
データ サイエンティストにとって、Python はシンプルでありながら強力です。 C/C++ と比較すると、多くの低レベルの作業が必要なく、モデルの検証が迅速に実行できます。Python は、Java と比較して、構文が簡潔で表現力が高く、同じ作業を行うのに必要な作業量は 1/3 です。 Matlab や Octave と比較して、Python のエンジニアリングの成熟度は高くなります。複数のプログラミング専門家が、Python が大学のコンピューター サイエンス プログラミング コースとして使用するのに最適な言語であると表明しています。MIT のコンピューター入門コースでは Python が使用されています。Python を使用すると、プログラミングで最も重要なこと、つまり問題の解決方法を学ぶことができるからです。
ちなみに、Microsoft は PyCon 2015 に参加し、Visual Studio による Python のサポート、Windows での Python C 拡張機能のコンパイルの最適化など、Windows での Python プログラミング エクスペリエンスを向上させるための大きな発表を行いました。 Python が Windows のデフォルト コンポーネントになる将来のシナリオを想像してみてください。
以上がビッグデータのフルスタック開発言語 – Pythonの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。