Agile-data-science-quick-guide
アジャイルデータサイエンス-はじめに
アジャイルデータサイエンスは、Webアプリケーション開発のためにデータサイエンスとアジャイル手法を使用するアプローチです。 組織に変化をもたらすのに適したデータサイエンスプロセスの出力に焦点を当てています。 データサイエンスには、分析、インタラクティブな視覚化、および現在適用されている機械学習による研究プロセスを記述するアプリケーションの構築が含まれます。
アジャイルデータサイエンスの主な目標は次のとおりです-
'_説得力のある製品へのクリティカルパスを発見して追跡するために、説明的なデータ分析を文書化およびガイドします。_
アジャイルデータサイエンスは、次の一連の原則で構成されています-
連続反復
このプロセスには、作成テーブル、チャート、レポート、および予測による継続的な反復が含まれます。 予測モデルの構築には、洞察の抽出と生成を伴うフィーチャエンジニアリングの多くの反復が必要になります。
中間出力
これは、生成された出力のトラックリストです。 失敗した実験にも出力があるとさえ言われています。 すべての反復の出力を追跡すると、次の反復でより良い出力を作成するのに役立ちます。
プロトタイプ実験
プロトタイプ実験では、実験に従ってタスクを割り当て、出力を生成します。 特定のタスクでは、洞察を得るために反復する必要があり、これらの反復は実験として最もよく説明できます。
データの統合
ソフトウェア開発ライフサイクルには、さまざまなフェーズが含まれており、データは以下に不可欠です-
- 顧客
- 開発者、および
- ビジネス
データの統合は、より良い見通しとアウトプットへの道を開きます。
ピラミッドデータ値
上記のピラミッド値は、「アジャイルデータサイエンス」開発に必要なレイヤーを示しています。 それは、要件に基づいたレコードのコレクションと個々のレコードの配管から始まります。 チャートは、データのクリーニングと集計後に作成されます。 集約されたデータは、データの視覚化に使用できます。 レポートは、データの適切な構造、メタデータ、タグで生成されます。 上から2番目のピラミッド層には、予測分析が含まれます。 予測レイヤーは、より多くの価値が生み出される場所ですが、フィーチャエンジニアリングに焦点を当てた適切な予測の作成に役立ちます。
最上位層には、データの価値が効果的に駆動されるアクションが含まれます。 この実装の最良の例は「人工知能」です。
アジャイルデータサイエンス-方法論の概念
この章では、「アジャイル」と呼ばれるソフトウェア開発ライフサイクルの概念に焦点を当てます。 アジャイルソフトウェア開発方法論は、1〜4週間の短い反復で増分セッションを介してソフトウェアを構築するのに役立ちます。そのため、開発はビジネス要件の変化に合わせて調整されます。
アジャイル手法を詳細に説明する12の原則があります-
顧客満足度
価値のあるソフトウェアを早期かつ継続的に配信することにより、要件に焦点を合わせているお客様に最も高い優先順位が与えられます。
新しい変化を歓迎する
ソフトウェア開発中の変更は許容されます。 アジャイルプロセスは、顧客の競争上の優位性に合わせて機能するように設計されています。
配達
動作中のソフトウェアの配信は、1〜4週間でクライアントに提供されます。
コラボレーション
ビジネスアナリスト、品質アナリスト、開発者は、プロジェクトのライフサイクル全体で協力する必要があります。
動機
プロジェクトは、やる気のある個人の一族で設計する必要があります。 個々のチームメンバーをサポートする環境を提供します。
個人的な会話
対面の会話は、開発チームに情報を送信する最も効率的かつ効果的な方法です。
進捗の測定
進捗状況の測定は、プロジェクトおよびソフトウェア開発の進捗状況を定義するのに役立つキーです。
一定のペースを維持する
アジャイルプロセスは、持続可能な開発に焦点を当てています。 ビジネス、開発者、およびユーザーは、プロジェクトを一定のペースで維持できる必要があります。
モニタリング
アジャイル機能を強化するために、技術的な卓越性と優れた設計に定期的に注意を払うことが必須です。
単純さ
アジャイルプロセスはすべてをシンプルに保ち、完了していない作業を測定するためにシンプルな用語を使用します。
自己組織化された用語
アジャイルチームは自己組織化され、最適なアーキテクチャで独立している必要があります。要件と設計は、自己組織化されたチームから生まれます。
仕事をレビューする
チームが作業の進捗状況を反映できるように、定期的に作業を確認することが重要です。 適時にモジュールを確認すると、パフォーマンスが向上します。
毎日のスタンドアップ
毎日のスタンドアップとは、チームメンバー間の毎日のステータスミーティングを指します。 ソフトウェア開発に関連する更新を提供します。 また、プロジェクト開発の障害に対処することも指します。
オフィスの場所に関係なく、アジャイルチームがどのように設立されても、毎日の立ち上げは必須の慣行です。
毎日のスタンドアップの機能のリストは次のとおりです-
- 毎日のスタンドアップミーティングの所要時間は約15分です。 それはより長い期間延長されるべきではありません。
- スタンドアップには、ステータスの更新に関する議論を含める必要があります。
- 通常、この会議の参加者は、すぐに会議を終了する意図を持って立ちます。
ユーザーストーリー
ストーリーは通常、要件であり、簡単な言語の少数の文で定式化され、反復内で完了する必要があります。 ユーザーストーリーには、次の特性を含める必要があります-
- すべての関連コードには、関連するチェックインが必要です。
- 指定された反復の単体テストケース。
- すべての受け入れテストケースを定義する必要があります。
- ストーリーを定義する際の製品所有者からの受け入れ。
スクラムとは何ですか?
スクラムは、アジャイル手法のサブセットと見なすことができます。 それは軽量プロセスであり、次の機能が含まれています-
- これはプロセスフレームワークであり、一貫した順序で従う必要がある一連のプラクティスが含まれています。 スクラムの最良の例は、反復またはスプリントに従うことです。
- これは「軽量」プロセスであり、プロセスを可能な限り小さくして、指定された期間の生産性を最大限に高めます。
スクラムプロセスは、従来のアジャイルアプローチの他の方法論と比較した際立ったプロセスで知られています。 それは次の3つのカテゴリに分かれています-
- 役割
- アーティファクト
- タイムボックス
役割は、プロセス全体に含まれるチームメンバーとその役割を定義します。 スクラムチームは、次の3つの役割で構成されています-
- スクラムマスター
- プロダクトオーナー
- Team
スクラムアーティファクトは、各メンバーが認識すべき重要な情報を提供します。 この情報には、製品の詳細、計画された活動、完了した活動が含まれます。 スクラムフレームワークで定義されているアーティファクトは次のとおりです-
- 製品バックログ
- スプリントバックログ
- バーンダウンチャート
- インクリメント
タイムボックスは、各反復で計画されるユーザーストーリーです。 これらのユーザーストーリーは、Scrumアーティファクトの一部を形成する製品機能の説明に役立ちます。 製品バックログは、ユーザーストーリーのリストです。 これらのユーザーストーリーは優先順位が付けられ、ユーザーミーティングに転送されて、どのストーリーを取り上げるかが決定されます。
スクラムマスターを選ぶ理由
スクラムマスターは、チームのすべてのメンバーと対話します。 スクラムマスターと他のチームやリソースとの相互作用を見てみましょう。
プロダクトオーナー
スクラムマスターは、次の方法で製品所有者と対話します-
- ユーザーストーリーの効果的な製品バックログを達成するためのテクニックを見つけ、それらを管理します。
- 明確で簡潔な製品バックログアイテムのニーズをチームが理解できるようにします。
- 特定の環境での製品計画。
- 製品の所有者が製品の価値を高める方法を知っていることを確認します。
- 必要に応じてスクラムイベントを促進します。
スクラムチーム
スクラムマスターは、いくつかの方法でチームとやり取りします-
- スクラムの採用における組織の指導。
- 特定の組織へのスクラム実装の計画。
- 従業員と利害関係者が製品開発の要件とフェーズを理解するのを支援します。
- 他のチームのスクラムマスターと協力して、指定されたチームのスクラムの適用の有効性を高めます。
組織
スクラムマスターは、いくつかの方法で組織と対話します。 いくつかは以下に記載されています-
- コーチングおよびスクラムチームは自己組織化と対話し、クロス機能の機能を備えています。
- スクラムがまだ完全に採用されていない、または受け入れられていない分野の組織およびチームを指導する。
スクラムの利点
スクラムは、顧客、チームメンバー、および利害関係者のコラボレーションを支援します。 これには、タイムボックス化されたアプローチと製品所有者からの継続的なフィードバックが含まれており、製品が動作状態にあることを確認します。 スクラムは、プロジェクトのさまざまな役割にメリットをもたらします。
顧客
スプリントまたは反復はより短い期間と見なされ、ユーザーストーリーは優先度に従って設計され、スプリント計画で取り上げられます。 すべてのスプリントの配達、顧客の要件が満たされることを保証します。 そうでない場合、要件は書き留められ、スプリントのために計画され、実行されます。
組織
スクラムおよびスクラムマスターの支援を受けた組織は、ユーザーストーリーの開発に必要な作業に集中できるため、作業の過負荷を軽減し、必要に応じてやり直しを回避できます。 これは、開発チームの効率向上と顧客満足度の維持にも役立ちます。 このアプローチは、市場の可能性を高めるのにも役立ちます。
プロダクトマネージャー
製品管理者の主な責任は、製品の品質を維持することです。 スクラムマスターの助けを借りて、作業を容易にし、迅速な応答を収集し、変更がある場合はそれを吸収することが容易になります。 また、製品マネージャーは、設計された製品がすべてのスプリントの顧客の要件に従って調整されていることを確認します。
開発チーム
タイムボックス化された性質とスプリントの継続時間の短縮により、開発チームは作業が適切に反映され、配信されることに熱心になります。 作業中の製品は、反復のたびに各レベルをインクリメントするか、「スプリント」と呼ぶことができます。 すべてのスプリント用に設計されたユーザーストーリーは、顧客の優先事項となり、反復の価値を高めます。
結論
スクラムは、チームワークでソフトウェアを開発できる効率的なフレームワークです。 アジャイルの原則に基づいて完全に設計されています。 スクラムマスターは、あらゆる可能な方法でスクラムのチームを支援し、協力するためにあります。 彼はあなたが設計された計画に固執し、計画に従ってすべての活動を実行するのを助けるパーソナルトレーナーのように振る舞います。 ScrumMasterの権限は、プロセスを超えて拡張されるべきではありません。 彼/彼女は、あらゆる状況を管理できる可能性があります。
アジャイルデータサイエンス-データサイエンスプロセス
この章では、データサイエンスプロセスと、プロセスを理解するために必要な用語を理解します。
「データサイエンスとは、分析の複雑な問題を解決するための、データインターフェイス、アルゴリズム開発、テクノロジーの融合です」。
データサイエンスは、科学的方法、プロセス、システムを含む学際的な分野であり、従来の研究で機械学習、数学、統計の知識として分類されています。 また、ハッキングスキルと実質的な専門知識の組み合わせも含まれます。 データサイエンスは、数学、統計、情報科学、コンピューターサイエンス、データマイニング、予測分析から原則を引き出します。
データサイエンスチームの一部を形成するさまざまな役割を以下に示します-
お客様
顧客は、製品を使用する人々です。 彼らの関心がプロジェクトの成功を決定し、彼らのフィードバックはデータサイエンスにおいて非常に貴重です。
事業開発
このデータサイエンスチームは、初期の顧客に直接、またはランディングページやプロモーションの作成を通じてサインインします。 ビジネス開発チームは製品の価値を提供します。
プロダクトマネージャー
プロダクトマネージャーは、市場で価値のある最高の製品を作成することを重要視しています。
インタラクションデザイナー
ユーザーが適切な価値を見つけることができるように、データモデルに関する設計の相互作用に焦点を当てています。
データサイエンティスト
データサイエンティストは、新しい機能を作成および公開するために、新しい方法でデータを調査および変換します。 これらの科学者はまた、さまざまなソースからのデータを組み合わせて、新しい価値を生み出します。 彼らは、研究者、エンジニア、ウェブ開発者との視覚化の作成において重要な役割を果たします。
研究者
名前が示すように、研究者は研究活動に関与しています。 データ科学者ができない複雑な問題を解決します。 これらの問題には、機械学習と統計モジュールの集中的な集中と時間が含まれます。
変化への適応
データサイエンスのすべてのチームメンバーは、新しい変更に適応し、要件に基づいて作業する必要があります。 データサイエンスでアジャイル方法論を採用するには、次のようにいくつかの変更を行う必要があります-
- スペシャリストよりもジェネラリストを選択する。
- 大規模なチームよりも小規模なチームの好み。
- 高レベルのツールとプラットフォームを使用します。
- 中間作業の継続的かつ反復的な共有。
注意
'_アジャイルデータサイエンスチームでは、ジェネラリストの小規模なチームが、スケーラブルな高レベルのツールを使用して、反復を通じてデータをより高い価値の状態に改良します。_
データサイエンスチームのメンバーの仕事に関連する次の例を考慮してください-
- デザイナーはCSSを提供します。
- Web開発者は、アプリケーション全体を構築し、ユーザーエクスペリエンスを理解し、インターフェイスの設計を行います。
- データサイエンティストは、Webアプリケーションを含むWebサービスの研究と構築の両方に取り組む必要があります。
- 研究者は、中間結果を説明する結果を示すコードベースで作業します。
- 製品マネージャーは、関連するすべての領域の欠陥を特定して理解しようとします。
アジャイルツールとインストール
この章では、さまざまなアジャイルツールとそのインストールについて学習します。 アジャイル方法論の開発スタックには、次のコンポーネントのセットが含まれます-
イベント
イベントとは、その機能とタイムスタンプとともに発生または記録されるイベントです。
イベントは、サーバー、センサー、金融取引、アクションなどのさまざまな形で発生する可能性があり、ユーザーがアプリケーションで使用します。 この完全なチュートリアルでは、さまざまなツールや言語間のデータ交換を容易にするJSONファイルを使用します。
コレクター
コレクターはイベントアグリゲーターです。 体系的な方法でイベントを収集し、リアルタイムワーカーによるアクションのためにそれらをキューイングするかさばるデータを格納および集約します。
配布文書
これらのドキュメントには、ドキュメントを特定の形式で保存するマルチノード(複数ノード)が含まれます。 このチュートリアルでは、MongoDBに焦点を当てます。
Webアプリケーションサーバー
Webアプリケーションサーバーは、最小限のオーバーヘッドで、視覚化を通じてクライアントを通じてJSONとしてデータを有効にします。 つまり、Webアプリケーションサーバーは、アジャイル手法で作成されたプロジェクトのテストと展開に役立ちます。
最新のブラウザ
これにより、最新のブラウザまたはアプリケーションは、ユーザー向けの対話型ツールとしてデータを表示できます。
ローカル環境設定
データセットを管理するために、Excel、csv、およびその他の多くのファイルを管理するツールを含むPythonのAnacondaフレームワークに焦点を当てます。 インストールしたAnacondaフレームワークのダッシュボードは次のとおりです。 「アナコンダナビゲーター」とも呼ばれます-
ナビゲーターには、データセットの管理に役立つノートブックシステムである「Jupyterフレームワーク」が含まれています。 フレームワークを起動すると、以下で説明するようにブラウザでホストされます-
アジャイルデータサイエンス-アジャイルでのデータ処理
この章では、構造化データ、半構造化データ、非構造化データの違いに焦点を当てます。
構造化データ
構造化データは、行と列を含むテーブルにSQL形式で保存されたデータに関係します。 事前に設計されたフィールドにマップされるリレーショナルキーが含まれています。 構造化データは大規模に使用されます。
構造化データは、すべてのインフォマティクスデータの5〜10パーセントにすぎません。
半構造化データ
Sem構造化データには、リレーショナルデータベースにないデータが含まれます。 分析を容易にするいくつかの組織プロパティが含まれます。 リレーショナルデータベースに保存する同じプロセスが含まれています。 半構造化データベースの例は、CSVファイル、XMLおよびJSONドキュメントです。 NoSQLデータベースは半構造化されていると見なされます。
非構造化データ
非構造化データは、データの80%を表します。 多くの場合、テキストおよびマルチメディアコンテンツが含まれます。 非構造化データの最良の例には、オーディオファイル、プレゼンテーション、およびWebページが含まれます。 機械生成の非構造化データの例は、衛星画像、科学データ、写真とビデオ、レーダーとソナーのデータです。
上記のピラミッド構造は、特にデータの量とデータが散在する比率に焦点を当てています。
準構造化データは、非構造化データと半構造化データの間のタイプとして表示されます。 このチュートリアルでは、アジャイル手法とデータサイエンス研究に有益な半構造化データに焦点を当てます。
半構造化データには正式なデータモデルはありませんが、分析によって開発された、明白で自己記述的なパターンと構造があります。
アジャイルデータサイエンス-SQLとNoSQL
このチュートリアルの完全な焦点は、より少ないステップ数で、より有用なツールを実装して、アジャイル手法に従うことです。 これを理解するには、SQLデータベースとNoSQLデータベースの違いを知ることが重要です。
ほとんどのユーザーはSQLデータベースを認識しており、MySQL、Oracle、または他のSQLデータベースに関する十分な知識を持っています。 過去数年にわたって、NoSQLデータベースは、プロジェクトのさまざまなビジネス上の問題や要件を解決するために広く採用されています。
次の表は、SQLデータベースとNoSQLデータベースの違いを示しています-
SQL | NoSQL |
---|---|
SQL databases are mainly called Relational Database Management system (RDBMS). | NoSQL database is also called documentoriented database. It is non-relational and distributed. |
SQL based databases includes structure of table with rows and columns. Collection of tables and other schema structures called database. | NoSQL database includes documents as major structure and the inclusion of documents is called collection. |
SQL databases include predefined schema. | NoSQL databases have dynamic data and include unstructured data. |
SQL databases are vertical scalable. | NoSQL databases are horizontal scalable. |
SQL databases are good fit for complex query environment. | NoSQL do not have standard interfaces for complex query development. |
SQL databases are not feasible for hierarchal data storage. | NoSQL databases fits better for hierarchical data storage. |
SQL databases are best fit for heavy transactions in the specified applications. | NoSQL databases are still not considered comparable in high load for complex transactional applications. |
SQL databases provides excellent support for their vendors. | NoSQL database still relies on community support. Only few experts are available for setup and deployed for large-scale NoSQL deployments. |
SQL databases focuses on ACID properties – Atomic, Consistency, Isolation And Durability. | NoSQL database focuses on CAP properties – Consistency, Availability, and Partition tolerance. |
SQL databases can be classified as open source or closed source based on the vendors who have opted them. | NoSQL databases are classified based on the storage type. NoSQL databases are open source by default. |
なぜアジャイル向けのNoSQLなのか?
上記の比較は、NoSQLドキュメントデータベースがアジャイル開発を完全にサポートしていることを示しています。 スキーマレスであり、データモデリングに完全に焦点を合わせていません。 代わりに、NoSQLはアプリケーションとサービスを延期するため、開発者はデータをどのようにモデル化できるかについてより良いアイデアを得ることができます。 NoSQLは、データモデルをアプリケーションモデルとして定義します。
MongoDBのインストール
このチュートリアルでは、最高の「NoSQLスキーマ」と見なされるMongoDBの例に重点を置きます。
Mongodb First Mongodb Second Mongodb Third Mongodb Fourth Mongodb Fifth
NoSQLおよびDataflowプログラミング
データがリレーショナル形式で利用できない場合があり、NoSQLデータベースの助けを借りてデータをトランザクションに保つ必要があります。
この章では、NoSQLのデータフローに焦点を当てます。 また、アジャイルサイエンスとデータサイエンスを組み合わせて、どのように機能するかを学びます。
NoSQLをアジャイルで使用する主な理由の1つは、市場の競争で速度を上げることです。 次の理由は、NoSQLがアジャイルソフトウェアの方法論に最適であることを示しています-
より少ないバリア
現在中流になっているモデルを変更すると、アジャイル開発の場合でも実際のコストがかかります。 NoSQLを使用すると、ユーザーはデータの正規化に時間を無駄にすることなく、集計データを使用して作業できます。 主なポイントは、何かを成し遂げ、モデルを完璧なデータにするという目標を達成することです。
スケーラビリティの向上
組織が製品を作成するときは常に、そのスケーラビリティに重点を置きます。 NoSQLは、そのスケーラビリティで常に知られていますが、水平スケーラビリティを備えて設計されていると、より良く機能します。
データを活用する機能
NoSQLは、スキーマのないデータモデルであり、ユーザーは簡単に大量のデータを使用できます。これには、変動性と速度のパラメーターがいくつか含まれています。 テクノロジーの選択を検討するときは、データをより大規模に活用するテクノロジーを常に検討する必要があります。
NoSQLのデータフロー
データモデルがRDBMSスキーマの作成にどのように焦点を合わせているかを示した次の例を考えてみましょう。
スキーマのさまざまな要件は次のとおりです-
- ユーザーIDをリストする必要があります。
- すべてのユーザーには、少なくとも1つのスキルが必須です。
- すべてのユーザーエクスペリエンスの詳細を適切に維持する必要があります。
ユーザーテーブルは3つの別々のテーブルで正規化されています-
- ユーザー
- ユーザースキル
- ユーザー体験
データベースのクエリ中に複雑さが増し、時間の消費はアジャイル手法には適さない正規化の増加に伴い注目されます。 以下で説明するように、同じスキーマをNoSQLデータベースで設計できます-
NoSQLは構造を軽量なJSON形式で保持します。 JSONを使用すると、アプリケーションはネストされたデータを持つオブジェクトを単一のドキュメントとして保存できます。
レコードの収集と表示
この章では、「アジャイル手法」の一部を形成するJSON構造に焦点を当てます。 MongoDBは、広く使用されているNoSQLデータ構造であり、レコードの収集と表示のために簡単に動作します。
ステップ1
この手順には、コレクションおよび指定されたデータモデルを作成するためのMongoDBとの接続の確立が含まれます。 実行する必要があるのは、接続を開始するための「mongod」コマンドと、指定された端末に接続するためのmongoコマンドだけです。
ステップ2
JSON形式でレコードを作成するための新しいデータベースを作成します。 今のところ、「mydb」という名前のダミーデータベースを作成しています。
>use mydb
switched to db mydb
>db
mydb
>show dbs
local 0.78125GB
test 0.23012GB
>db.user.insert({"name":"Agile Data Science"})
>show dbs
local 0.78125GB
mydb 0.23012GB
test 0.23012GB
ステップ3
レコードのリストを取得するには、コレクションの作成が必須です。 この機能は、データサイエンスの研究と出力に役立ちます。
>use test
switched to db test
>db.createCollection("mycollection")
{ "ok" : 1 }
>show collections
mycollection
system.indexes
>db.createCollection("mycol", { capped : true, autoIndexId : true, size :
6142800, max : 10000 } )
{ "ok" : 1 }
>db.agiledatascience.insert({"name" : "demoname"})
>show collections
mycol
mycollection
system.indexes
demoname
アジャイルデータサイエンス-データの可視化
データの視覚化は、データサイエンスにおいて非常に重要な役割を果たします。 データの視覚化は、データサイエンスのモジュールと考えることができます。 データサイエンスには、予測モデルの構築以上のものが含まれています。 モデルの説明と、モデルを使用してデータを理解し、意思決定を行うことが含まれます。 データの視覚化は、最も説得力のある方法でデータを提示するための不可欠な部分です。
データサイエンスの観点から見ると、データの視覚化は、変化と傾向を示す強調表示機能です。
効果的なデータ視覚化のために次のガイドラインを考慮してください-
- 一般的なスケールに沿ってデータを配置します。
- バーの使用は、円と正方形の比較でより効果的です。
- 散布図には適切な色を使用する必要があります。
- 円グラフを使用して比率を表示します。
- サンバーストの視覚化は、階層プロットに対してより効果的です。
アジャイルには、データの視覚化のためのシンプルなスクリプト言語が必要であり、データサイエンスとのコラボレーションでは、「Python」がデータの視覚化に推奨される言語です。
例1
次の例は、特定の年に計算されたGDPのデータ視覚化を示しています。 「Matplotlib」は、Pythonでのデータ視覚化に最適なライブラリです。 このライブラリのインストールは以下に示されています-
これを理解するために、次のコードを検討してください-
import matplotlib.pyplot as plt
years = [1950, 1960, 1970, 1980, 1990, 2000, 2010]
gdp = [300.2, 543.3, 1075.9, 2862.5, 5979.6, 10289.7, 14958.3]
# create a line chart, years on x-axis, gdp on y-axis
plt.plot(years, gdp, color='green', marker='o', linestyle='solid')
# add a title plt.title("Nominal GDP")
# add a label to the y-axis
plt.ylabel("Billions of $")
plt.show()
出力
上記のコードは、次の出力を生成します-
軸ラベル、ラインスタイル、ポイントマーカーを使用してグラフをカスタマイズする方法は多数あります。 優れたデータ視覚化を示す次の例に焦点を当てましょう。 これらの結果は、より良い出力に使用できます。
例2
import datetime
import random
import matplotlib.pyplot as plt
# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]
# plot
plt.plot(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
plt.show()
出力
上記のコードは、次の出力を生成します-
アジャイルデータサイエンス-データエンリッチメント
データの強化とは、生データを強化、改良、改善するために使用される一連のプロセスを指します。 有用なデータ変換(生データから有用な情報)を指します。 データ強化のプロセスは、現代のビジネスまたは企業にとってデータを貴重なデータ資産にすることに焦点を当てています。
最も一般的なデータ強化プロセスには、特定の決定アルゴリズムを使用した、データベース内のスペルミスまたは誤植の修正が含まれます。 データ強化ツールは、単純なデータテーブルに有用な情報を追加します。
単語のスペル修正のために次のコードを考慮してください-
import re
from collections import Counter
def words(text): return re.findall(r'\w+', text.lower())
WORDS = Counter(words(open('big.txt').read()))
def P(word, N=sum(WORDS.values())):
"Probabilities of words"
return WORDS[word]/N
def correction(word):
"Spelling correction of word"
return max(candidates(word), key=P)
def candidates(word):
"Generate possible spelling corrections for word."
return (known([word]) or known(edits1(word)) or known(edits2(word)) or [word])
def known(words):
"The subset of `words` that appear in the dictionary of WORDS."
return set(w for w in words if w in WORDS)
def edits1(word):
"All edits that are one edit away from `word`."
letters = 'abcdefghijklmnopqrstuvwxyz'
splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]
deletes = [L + R[1:] for L, R in splits if R]
transposes = [L + R[1] + R[0] + R[2:] for L, R in splits if len(R)>1]
replaces = [L + c + R[1:] for L, R in splits if R for c in letters]
inserts = [L + c + R for L, R in splits for c in letters]
return set(deletes + transposes + replaces + inserts)
def edits2(word):
"All edits that are two edits away from `word`."
return (e2 for e1 in edits1(word) for e2 in edits1(e1))
print(correction('speling'))
print(correction('korrectud'))
このプログラムでは、修正された単語を含む「big.txt」と照合します。 単語はテキストファイルに含まれる単語と一致し、それに応じて適切な結果を出力します。
出力
上記のコードは、次の出力を生成します-
アジャイルデータサイエンス-レポートの操作
この章では、アジャイル手法の重要なモジュールであるレポート作成について学習します。 アジャイルスプリントは、視覚化によって作成されたチャートページを本格的なレポートに変換します。 レポートでは、チャートはインタラクティブになり、静的ページは動的になり、ネットワーク関連のデータになります。 データ値ピラミッドのレポート段階の特性は以下に示されています-
データサイエンス分析のレポートとして使用したり、結論を出したりできるcsvファイルの作成に重点を置きます。 アジャイルは少ないドキュメントに焦点を当てていますが、製品開発の進捗状況を示すレポートを生成することは常に考慮されます。
import csv
#----------------------------------------------------------------------
def csv_writer(data, path):
"""
Write data to a CSV file path
"""
with open(path, "wb") as csv_file:
writer = csv.writer(csv_file, delimiter=',')
for line in data:
writer.writerow(line)
#----------------------------------------------------------------------
if __name__ == "__main__":
data = ["first_name,last_name,city".split(","),
"Tyrese,Hirthe,Strackeport".split(","),
"Jules,Dicki,Lake Nickolasville".split(","),
"Dedric,Medhurst,Stiedemannberg".split(",")
]
path = "output.csv"
csv_writer(data, path)
上記のコードは、以下に示すように「csvファイル」を生成するのに役立ちます-
csv(カンマ区切り値)レポートの次の利点を考えてみましょう-
- 人にやさしく、手動で簡単に編集できます。
- 実装と解析は簡単です。
- CSVはすべてのアプリケーションで処理できます。
- 小さくて高速です。
- CSVは標準形式に従います。
- データサイエンティストに簡単なスキーマを提供します。
アジャイルデータサイエンス-予測の役割
この章では、アジャイルデータサイエンスにおける予測の役割について説明します。 対話型レポートは、データのさまざまな側面を公開します。 予測は、アジャイルスプリントの4番目のレイヤーを形成します。
予測を行う際には、常に過去のデータを参照し、将来の反復の推論として使用します。 この完全なプロセスでは、データを履歴データのバッチ処理から将来に関するリアルタイムデータに移行します。
予測の役割には次のものが含まれます-
- 予測は予測に役立ちます。 一部の予測は統計的推論に基づいています。 予測のいくつかは評論家の意見に基づいています。
- 統計的推論は、あらゆる種類の予測に関係しています。
- 予測が正確な場合もあれば、不正確な場合もあります。
予測分析
予測分析には、予測モデリング、機械学習、データマイニングなど、現在および過去の事実を分析して将来および未知のイベントに関する予測を行うさまざまな統計手法が含まれます。
予測分析にはトレーニングデータが必要です。 トレーニングされたデータには、独立した機能と依存する機能が含まれます。 依存機能は、ユーザーが予測しようとしている値です。 独立機能とは、依存機能に基づいて予測したいことを記述する機能です。
フィーチャの研究は、フィーチャエンジニアリングと呼ばれます。これは予測を行うために重要です。 データの視覚化と探索的データ分析は、機能エンジニアリングの一部です。これらは*アジャイルデータサイエンス*の中核を形成します。
予測をする
アジャイルデータサイエンスで予測を行う方法は2つあります-
- 回帰
- 分類
回帰または分類の構築は、ビジネス要件とその分析に完全に依存します。 連続変数の予測は回帰モデルにつながり、カテゴリ変数の予測は分類モデルにつながります。
回帰
回帰は、特徴を含む例を考慮し、それにより数値出力を生成します。
分類
分類は入力を受け取り、カテゴリー分類を生成します。
注-統計的予測への入力を定義し、マシンが学習できるようにするデータセットの例は、「トレーニングデータ」と呼ばれます。
PySparkを使用した機能の抽出
この章では、Agile Data ScienceのPySparkで抽出機能を適用する方法について学習します。
Sparkの概要
Apache Sparkは、高速のリアルタイム処理フレームワークとして定義できます。 リアルタイムでデータを分析するための計算を行います。 Apache Sparkは、ストリーム処理システムとしてリアルタイムで導入され、バッチ処理も処理できます。 Apache Sparkは、インタラクティブクエリと反復アルゴリズムをサポートしています。
Sparkは「Scalaプログラミング言語」で書かれています。
PySparkは、PythonとSparkの組み合わせと考えることができます。 PySparkは、Python APIをSparkコアにリンクし、Sparkコンテキストを初期化するPySparkシェルを提供します。 前の章で説明したように、ほとんどのデータサイエンティストは追跡機能にPySparkを使用します。
この例では、countsと呼ばれるデータセットを構築し、特定のファイルに保存するための変換に焦点を当てます。
text_file = sc.textFile("hdfs://...")
counts = text_file.flatMap(lambda line: line.split(" ")) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)
counts.saveAsTextFile("hdfs://...")
PySparkを使用すると、ユーザーはPythonプログラミング言語でRDDを操作できます。 これには、データドリブンドキュメントとコンポーネントの基本をカバーする組み込みライブラリが役立ちます。
回帰モデルの構築
ロジスティック回帰とは、カテゴリー従属変数の確率を予測するために使用される機械学習アルゴリズムを指します。 ロジスティック回帰では、従属変数はバイナリ変数であり、1(trueおよびfalseのブール値)としてコード化されたデータで構成されます。
この章では、連続変数を使用してPythonで回帰モデルを開発することに焦点を当てます。 線形回帰モデルの例では、CSVファイルからのデータ探索に焦点を当てます。
分類の目標は、クライアントが定期預金にサブスクライブする(1/0)かどうかを予測することです。
import pandas as pd
import numpy as np
from sklearn import preprocessing
import matplotlib.pyplot as plt
plt.rc("font", size=14)
from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import train_test_split
import seaborn as sns
sns.set(style="white")
sns.set(style="whitegrid", color_codes=True)
data = pd.read_csv('bank.csv', header=0)
data = data.dropna()
print(data.shape)
print(list(data.columns))
次の手順に従って、「Jupyter Notebook」を使用してAnaconda Navigatorに上記のコードを実装します-
- ステップ1 *-Anaconda NavigatorでJupyterノートブックを起動します。
- ステップ2 *-csvファイルをアップロードして、回帰モデルの出力を体系的に取得します。
- ステップ3 *-新しいファイルを作成し、上記のコード行を実行して目的の出力を取得します。
予測システムの展開
この例では、Pythonスクリプトを使用して住宅価格の予測に役立つ予測モデルを作成および展開する方法を学習します。 予測システムの展開に使用される重要なフレームワークには、Anacondaと「Jupyter Notebook」が含まれます。
予測システムを展開するには、次の手順に従ってください-
- ステップ1 *-次のコードを実装して、csvファイルの値を関連する値に変換します。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import mpl_toolkits
%matplotlib inline
data = pd.read_csv("kc_house_data.csv")
data.head()
上記のコードは、次の出力を生成します-
- ステップ2 *-csvファイルの属性に含まれるデータ型を取得するために、describe関数を実行します。
data.describe()
- ステップ3 *-作成した予測モデルの展開に基づいて、関連する値を削除できます。
train1 = data.drop(['id', 'price'],axis=1)
train1.head()
- ステップ4 *-レコードごとにデータを視覚化できます。 データは、データサイエンス分析およびホワイトペーパーの出力に使用できます。
data.floors.value_counts().plot(kind='bar')
アジャイルデータサイエンス-SparkML
「SparkML」または「MLLib」とも呼ばれる機械学習ライブラリは、分類、回帰、クラスタリング、協調フィルタリングなどの一般的な学習アルゴリズムで構成されています。
なぜSparkML for Agileを学ぶのですか?
Sparkは、機械学習アルゴリズムとアプリケーションを構築するための事実上のプラットフォームになりつつあります。 開発者は、Sparkフレームワークでスケーラブルで簡潔な方法でマシンアルゴリズムを実装するためにSparkに取り組んでいます。 このフレームワークを使用して、機械学習の概念、そのユーティリティ、およびアルゴリズムを学習します。 アジャイルは常にフレームワークを選択します。これにより、短時間で迅速な結果が得られます。
MLアルゴリズム
MLアルゴリズムには、分類、回帰、クラスタリング、協調フィルタリングなどの一般的な学習アルゴリズムが含まれます。
特徴
これには、特徴抽出、変換、次元削減、および選択が含まれます。
パイプライン
パイプラインは、機械学習パイプラインを構築、評価、および調整するためのツールを提供します。
人気のあるアルゴリズム
以下は、いくつかの一般的なアルゴリズムです-
- 基本統計
- 回帰
- 分類
- 推薦システム
- クラスタリング
- 次元削減
- 特徴抽出
- 最適化
推薦システム
推奨システムは、ユーザーが特定のアイテムに提案する「評価」と「嗜好」の予測を求める情報フィルタリングシステムのサブクラスです。
推奨システムには、次のように使用されるさまざまなフィルタリングシステムが含まれます-
協調フィルタリング
これには、過去の行動と他のユーザーが行った同様の決定に基づいてモデルを構築することが含まれます。 この特定のフィルタリングモデルは、ユーザーが取り入れたいアイテムを予測するために使用されます。
コンテンツベースのフィルタリング
同様のプロパティを持つ新しいアイテムを推奨および追加するために、アイテムの個別の特性のフィルタリングが含まれます。
以降の章では、特定の問題を解決し、アジャイル手法の観点から予測パフォーマンスを改善するための推奨システムの使用に焦点を当てます。
予測問題の修正
この章では、特定のシナリオを使用して予測問題を修正することに焦点を当てます。
企業が、オンライン申請フォームを通じて提供される顧客の詳細に従って、ローンの適格性の詳細を自動化することを検討します。 詳細には、顧客の名前、性別、配偶者の有無、融資額、その他の必須の詳細が含まれます。
詳細は、以下に示すようにCSVファイルに記録されます-
予測問題を評価するには、次のコードを実行します-
import pandas as pd
from sklearn import ensemble
import numpy as np
from scipy.stats import mode
from sklearn import preprocessing,model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import LabelEncoder
#loading the dataset
data=pd.read_csv('train.csv',index_col='Loan_ID')
def num_missing(x):
return sum(x.isnull())
#imputing the the missing values from the data
data['Gender'].fillna(mode(list(data['Gender'])).mode[0], inplace=True)
data['Married'].fillna(mode(list(data['Married'])).mode[0], inplace=True)
data['Self_Employed'].fillna(mode(list(data['Self_Employed'])).mode[0], inplace=True)
# print (data.apply(num_missing, axis=0))
# #imputing mean for the missing value
data['LoanAmount'].fillna(data['LoanAmount'].mean(), inplace=True)
mapping={'0':0,'1':1,'2':2,'3+':3}
data = data.replace({'Dependents':mapping})
data['Dependents'].fillna(data['Dependents'].mean(), inplace=True)
data['Loan_Amount_Term'].fillna(method='ffill',inplace=True)
data['Credit_History'].fillna(method='ffill',inplace=True)
print (data.apply(num_missing,axis=0))
#converting the cateogorical data to numbers using the label encoder
var_mod = ['Gender','Married','Education','Self_Employed','Property_Area','Loan_Status']
le = LabelEncoder()
for i in var_mod:
le.fit(list(data[i].values))
data[i] = le.transform(list(data[i]))
#Train test split
x=['Gender','Married','Education','Self_Employed','Property_Area','LoanAmount', 'Loan_Amount_Term','Credit_History','Dependents']
y=['Loan_Status']
print(data[x])
X_train,X_test,y_train,y_test=model_selection.train_test_split(data[x],data[y], test_size=0.2)
#
# #Random forest classifier
# clf=ensemble.RandomForestClassifier(n_estimators=100,
criterion='gini',max_depth=3,max_features='auto',n_jobs=-1)
clf=ensemble.RandomForestClassifier(n_estimators=200,max_features=3,min_samples
_split=5,oob_score=True,n_jobs=-1,criterion='entropy')
clf.fit(X_train,y_train)
accuracy=clf.score(X_test,y_test)
print(accuracy)
出力
上記のコードは次の出力を生成します。
予測パフォーマンスの改善
この章では、多くの属性が含まれる生徒の成績の予測に役立つモデルの構築に焦点を当てます。 焦点は、試験で生徒の不合格結果を表示することです。
プロセス
評価の目標値はG3です。 この値はビニングされ、失敗と成功としてさらに分類されます。 G3値が10以上の場合、学生は試験に合格します。
例
学生の場合、パフォーマンスを予測するためにコードが実行される次の例を考えてください-
import pandas as pd
""" Read data file as DataFrame """
df = pd.read_csv("student-mat.csv", sep=";")
""" Import ML helpers """
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import GridSearchCV, cross_val_score
from sklearn.pipeline import Pipeline
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.svm import LinearSVC # Support Vector Machine Classifier model
""" Split Data into Training and Testing Sets """
def split_data(X, Y):
return train_test_split(X, Y, test_size=0.2, random_state=17)
""" Confusion Matrix """
def confuse(y_true, y_pred):
cm = confusion_matrix(y_true=y_true, y_pred=y_pred)
# print("\nConfusion Matrix: \n", cm)
fpr(cm)
ffr(cm)
""" False Pass Rate """
def fpr(confusion_matrix):
fp = confusion_matrix[0][1]
tf = confusion_matrix[0][0]
rate = float(fp)/(fp + tf)
print("False Pass Rate: ", rate)
""" False Fail Rate """
def ffr(confusion_matrix):
ff = confusion_matrix[1][0]
tp = confusion_matrix[1][1]
rate = float(ff)/(ff + tp)
print("False Fail Rate: ", rate)
return rate
""" Train Model and Print Score """
def train_and_score(X, y):
X_train, X_test, y_train, y_test = split_data(X, y)
clf = Pipeline([
('reduce_dim', SelectKBest(chi2, k=2)),
('train', LinearSVC(C=100))
])
scores = cross_val_score(clf, X_train, y_train, cv=5, n_jobs=2)
print("Mean Model Accuracy:", np.array(scores).mean())
clf.fit(X_train, y_train)
confuse(y_test, clf.predict(X_test))
print()
""" Main Program """
def main():
print("\nStudent Performance Prediction")
# For each feature, encode to categorical values
class_le = LabelEncoder()
for column in df[[school", "sex", "address", "famsize", "Pstatus", "Mjob",
"Fjob", "reason", "guardian", "schoolsup", "famsup", "paid", "activities",
"nursery", "higher", "internet", "romantic"]].columns:
df[column] = class_le.fit_transform(df[column].values)
# Encode G1, G2, G3 as pass or fail binary values
for i, row in df.iterrows():
if row["G1"] >= 10:
df["G1"][i] = 1
else:
df["G1"][i] = 0
if row["G2"] >= 10:
df["G2"][i] = 1
else:
df["G2"][i] = 0
if row["G3"] >= 10:
df["G3"][i] = 1
else:
df["G3"][i] = 0
# Target values are G3
y = df.pop("G3")
# Feature set is remaining features
X = df
print("\n\nModel Accuracy Knowing G1 & G2 Scores")
print("=====================================")
train_and_score(X, y)
# Remove grade report 2
X.drop(["G2"], axis = 1, inplace=True)
print("\n\nModel Accuracy Knowing Only G1 Score")
print("=====================================")
train_and_score(X, y)
# Remove grade report 1
X.drop(["G1"], axis=1, inplace=True)
print("\n\nModel Accuracy Without Knowing Scores")
print("=====================================")
train_and_score(X, y)
main()
出力
上記のコードは、次のように出力を生成します
予測は、1つの変数のみを参照して処理されます。 1つの変数を参照すると、生徒のパフォーマンス予測は以下のようになります-
アジャイルおよびデータサイエンスでより良いシーンを作成する
アジャイル手法は、組織が変化に適応し、市場で競争し、高品質の製品を構築するのに役立ちます。 組織はアジャイル方法論で成熟し、クライアントからの要件の変化が増加していることが観察されています。 組織のアジャイルチームとデータをコンパイルおよび同期することは、必要なポートフォリオに従ってデータをロールアップする上で重要です。
より良い計画を立てる
標準化されたアジャイルパフォーマンスは、計画にのみ依存します。 順序付けられたデータスキーマにより、組織の進捗の生産性、品質、および応答性が向上します。 データの一貫性のレベルは、履歴およびリアルタイムのシナリオで維持されます。
データサイエンスの実験サイクルを理解するために、次の図を考慮してください-
データサイエンスには、要件の分析と、それに基づくアルゴリズムの作成が含まれます。 環境設定とともにアルゴリズムが設計されると、ユーザーは実験を作成し、データを収集して分析を改善できます。
このイデオロギーは、「アクション」と呼ばれるアジャイルの最後のスプリントを計算します。
- アクション*には、最後のスプリントまたはアジャイル手法のレベルのすべての必須タスクが含まれます。 (ライフサイクルに関する)データサイエンスフェーズの追跡は、ストーリーカードをアクションアイテムとして使用して維持できます。
予測分析とビッグデータ
計画の将来は、分析から収集されたデータを使用したデータレポートのカスタマイズに完全にあります。 また、ビッグデータ分析による操作も含まれます。 ビッグデータの助けを借りて、組織のメトリックを効果的にスライシングおよびダイシングすることで、個別の情報を分析できます。 分析は常に優れたソリューションと見なされます。
アジャイルデータサイエンス-アジャイルの実装
アジャイル開発プロセスで使用されるさまざまな方法論があります。 これらの方法論は、データサイエンスの研究プロセスにも使用できます。
以下に示すフローチャートは、さまざまな方法論を示しています-
スクラム
ソフトウェア開発の用語では、スクラムとは、小さなチームで作業を管理し、特定のプロジェクトを管理して、プロジェクトの長所と短所を明らかにすることを意味します。
クリスタルの方法論
クリスタルの方法論には、製品の管理と実行のための革新的な技術が含まれています。 この方法を使用すると、チームは同様のタスクをさまざまな方法で実行できます。 Crystalファミリは、適用が最も簡単な方法論の1つです。
動的なソフトウェア開発方法
この配信フレームワークは、主に現在のナレッジシステムをソフトウェア手法で実装するために使用されます。
未来志向の開発
この開発ライフサイクルの焦点は、プロジェクトに含まれる機能です。 ドメインオブジェクトモデリング、コードおよび所有権の機能開発に最適です。
リーンソフトウェア開発
極端なプログラミング
エクストリームプログラミングは、ソフトウェア品質の向上に焦点を当てた独自のソフトウェア開発方法論です。 これは、顧客がプロジェクトの機能について確信を持てない場合に効果的です。
アジャイル手法はデータサイエンスストリームに定着しており、重要なソフトウェア手法と見なされています。 アジャイルな自己組織化により、部門を超えたチームが効果的に連携できます。 前述のように、アジャイル開発には6つの主要なカテゴリがあり、それぞれを要件に応じてデータサイエンスでストリーミングできます。 データサイエンスには、統計的洞察のための反復プロセスが含まれます。 アジャイルは、データサイエンスモジュールを分解し、効果的な方法で反復とスプリントを処理するのに役立ちます。
アジャイルデータサイエンスのプロセスは、データサイエンスモジュールを実装する方法と理由を理解する素晴らしい方法です。 創造的な方法で問題を解決します。