アジャイルデータサイエンス-クイックガイド
アジャイルデータサイエンスは、Webアプリケーション開発のためのアジャイル手法でデータサイエンスを使用するアプローチです。組織に変化をもたらすのに適したデータサイエンスプロセスの出力に焦点を当てています。データサイエンスには、分析、インタラクティブな視覚化、そして現在適用されている機械学習を使用して研究プロセスを説明するアプリケーションの構築も含まれます。
アジャイルデータサイエンスの主な目標は次のとおりです。
説得力のある製品へのクリティカルパスを発見して追跡するために、説明データ分析を文書化してガイドします。
アジャイルデータサイエンスは、次の一連の原則に基づいて構成されています。
連続反復
このプロセスには、作成テーブル、チャート、レポート、および予測を使用した継続的な反復が含まれます。予測モデルを構築するには、洞察の抽出と生成を伴う機能エンジニアリングを何度も繰り返す必要があります。
中間出力
これは、生成された出力のトラックリストです。失敗した実験にも成果があるとさえ言われています。すべての反復の出力を追跡すると、次の反復でより良い出力を作成するのに役立ちます。
プロトタイプ実験
プロトタイプ実験では、実験に従ってタスクを割り当て、出力を生成します。与えられたタスクでは、洞察を得るために反復する必要があり、これらの反復は実験として最もよく説明できます。
データの統合
ソフトウェア開発ライフサイクルには、以下に不可欠なデータを含むさまざまなフェーズが含まれます。
customers
開発者、および
ビジネス
データの統合は、より良い見通しとアウトプットへの道を開きます。
ピラミッドデータ値
上記のピラミッド値は、「アジャイルデータサイエンス」開発に必要なレイヤーを表しています。それは、要件に基づいたレコードのコレクションと個々のレコードの配管から始まります。グラフは、データのクリーニングと集計の後に作成されます。集約されたデータは、データの視覚化に使用できます。レポートは、適切な構造、メタデータ、およびデータのタグを使用して生成されます。上からピラミッドの2番目の層には、予測分析が含まれます。予測レイヤーは、より多くの価値が生み出される場所ですが、機能エンジニアリングに焦点を当てた優れた予測の作成に役立ちます。
最上位層には、データの価値を効果的に推進するアクションが含まれます。この実装の最も良い例は「人工知能」です。
この章では、「アジャイル」と呼ばれるソフトウェア開発ライフサイクルの概念に焦点を当てます。アジャイルソフトウェア開発手法は、1〜4週間の短い反復での増分セッションを通じてソフトウェアを構築するのに役立つため、開発は変化するビジネス要件に合わせて調整されます。
アジャイル手法を詳細に説明する12の原則があります-
顧客満足度
価値のあるソフトウェアを早期かつ継続的に提供することにより、要件に焦点を合わせているお客様を最優先します。
新しい変更を歓迎する
ソフトウェア開発中の変更は許容されます。アジャイルプロセスは、顧客の競争上の優位性に一致するように機能するように設計されています。
配達
動作するソフトウェアの配信は、1〜4週間以内にクライアントに提供されます。
コラボレーション
ビジネスアナリスト、品質アナリスト、および開発者は、プロジェクトのライフサイクル全体を通じて協力する必要があります。
動機
プロジェクトは、やる気のある個人の一族で設計する必要があります。個々のチームメンバーをサポートする環境を提供します。
個人的な会話
対面での会話は、開発チームとの間で情報を送信するための最も効率的で効果的な方法です。
進捗状況の測定
進捗状況の測定は、プロジェクトおよびソフトウェア開発の進捗状況を定義するのに役立つ鍵です。
一定のペースを維持する
アジャイルプロセスは持続可能な開発に焦点を合わせています。ビジネス、開発者、およびユーザーは、プロジェクトに対して一定のペースを維持できる必要があります。
モニタリング
アジャイル機能を強化するには、技術的な卓越性と優れた設計に定期的に注意を払うことが必須です。
シンプルさ
アジャイルプロセスはすべてをシンプルに保ち、単純な用語を使用して完了していない作業を測定します。
自己組織化された用語
アジャイルチームは自己組織化され、最高のアーキテクチャで独立している必要があります。要件と設計は、自己組織化されたチームから生まれます。
作業を確認する
チームが作業の進捗状況を反映できるように、定期的に作業を確認することが重要です。モジュールをタイムリーにレビューすると、パフォーマンスが向上します。
毎日のスタンドアップ
毎日のスタンドアップとは、チームメンバー間の毎日のステータスミーティングを指します。ソフトウェア開発に関連するアップデートを提供します。また、プロジェクト開発の障害に対処することも指します。
オフィスの場所に関係なく、アジャイルチームがどのように設立されても、毎日のスタンドアップは必須の慣行です。
毎日のスタンドアップの特徴のリストは次のとおりです-
毎日のスタンドアップミーティングの時間は約15分です。それはより長い期間延長されるべきではありません。
スタンドアップには、ステータスの更新に関するディスカッションを含める必要があります。
この会議の参加者は通常、すぐに会議を終えることを意図して立っています。
ユーザーストーリー
ストーリーは通常、要件であり、単純な言語で数文で定式化され、反復内で完了する必要があります。ユーザーストーリーには、次の特性を含める必要があります-
関連するすべてのコードには、関連するチェックインが必要です。
指定された反復の単体テストケース。
すべての受け入れテストケースを定義する必要があります。
ストーリーを定義する際の製品所有者からの受け入れ。
スクラムとは何ですか?
スクラムは、アジャイル手法のサブセットと見なすことができます。これは軽量プロセスであり、次の機能が含まれています-
これはプロセスフレームワークであり、一貫した順序で従う必要のある一連のプラクティスが含まれています。スクラムの最も良い例は、反復またはスプリントに従うことです。
これは「軽量」プロセスであり、指定された期間で生産性の高い出力を最大化するために、プロセスが可能な限り小さく保たれることを意味します。
スクラムプロセスは、従来のアジャイルアプローチの他の方法論と比較した際立ったプロセスで知られています。それは次の3つのカテゴリーに分けられます-
Roles
Artifacts
タイムボックス
役割は、プロセス全体に含まれるチームメンバーとその役割を定義します。スクラムチームは、次の3つの役割で構成されています-
スクラムマスター
プロダクトオーナー
Team
スクラムアーティファクトは、各メンバーが知っておくべき重要な情報を提供します。この情報には、製品の詳細、計画されているアクティビティ、および完了したアクティビティが含まれます。スクラムフレームワークで定義されているアーティファクトは次のとおりです。
製品のバックログ
スプリントバックログ
チャートを焼き尽くす
Increment
タイムボックスは、反復ごとに計画されるユーザーストーリーです。これらのユーザーストーリーは、スクラムアーティファクトの一部を形成する製品機能を説明するのに役立ちます。製品バックログは、ユーザーストーリーのリストです。これらのユーザーストーリーには優先順位が付けられ、ユーザーミーティングに転送されて、どちらを取り上げるべきかが決定されます。
なぜスクラムマスター?
スクラムマスターは、チームのすべてのメンバーと対話します。スクラムマスターと他のチームやリソースとの相互作用を見てみましょう。
プロダクトオーナー
スクラムマスターは、次の方法で製品所有者とやり取りします-
ユーザーストーリーの効果的な製品バックログを達成するための手法を見つけ、それらを管理します。
チームが明確で簡潔な製品バックログアイテムのニーズを理解するのを支援します。
特定の環境での製品計画。
製品の所有者が製品の価値を高める方法を知っていることを確認します。
必要に応じてスクラムイベントを促進します。
スクラムチーム
スクラムマスターはいくつかの方法でチームと対話します-
スクラムの採用について組織を指導する。
特定の組織へのスクラム実装の計画。
従業員と利害関係者が製品開発の要件とフェーズを理解するのを支援します。
他のチームのスクラムマスターと協力して、指定されたチームのスクラムの適用の有効性を高めます。
組織
スクラムマスターは、いくつかの方法で組織と対話します。いくつかを以下に示します-
コーチングおよびスクラムチームは自己組織化と相互作用し、クロスファンクショナル機能を備えています。
スクラムがまだ完全に採用されていない、または受け入れられていないような分野で組織とチームを指導する。
スクラムの利点
スクラムは、顧客、チームメンバー、および利害関係者のコラボレーションを支援します。これには、タイムボックス化されたアプローチと、製品が動作状態にあることを確認する製品所有者からの継続的なフィードバックが含まれます。スクラムは、プロジェクトのさまざまな役割にメリットをもたらします。
お客様
スプリントまたはイテレーションはより短い期間と見なされ、ユーザーストーリーは優先度に従って設計され、スプリント計画で取り上げられます。これにより、すべてのスプリント配信、顧客の要件が確実に満たされます。そうでない場合は、要件が記載され、計画され、スプリントに使用されます。
組織
スクラムとスクラムマスターの助けを借りた組織は、ユーザーストーリーの開発に必要な作業に集中できるため、作業の過負荷を減らし、やり直しを回避できます。これは、開発チームの効率と顧客満足度の向上を維持するのにも役立ちます。このアプローチは、市場の可能性を高めるのにも役立ちます。
プロダクトマネージャー
製品管理者の主な責任は、製品の品質が維持されるようにすることです。スクラムマスターの助けを借りて、作業を容易にし、迅速な対応を収集し、変更があればそれを吸収することが容易になります。製品マネージャーはまた、設計された製品がすべてのスプリントで顧客の要件に従って調整されていることを確認します。
開発チーム
タイムボックス化された性質と短期間でのスプリントの維持により、開発チームは、作業が適切に反映および提供されることを確認することに熱心になります。作業成果物は、反復ごとに各レベルをインクリメントします。つまり、「スプリント」と呼ぶことができます。すべてのスプリント用に設計されたユーザーストーリーが顧客の優先事項になり、反復により多くの価値が追加されます。
結論
スクラムは、チームワークでソフトウェアを開発できる効率的なフレームワークです。それは完全にアジャイルの原則に基づいて設計されています。スクラムマスターは、あらゆる方法でスクラムのチームを支援し、協力するためにあります。彼はパーソナルトレーナーのように振る舞い、設計された計画に固執し、計画に従ってすべての活動を実行するのを支援します。ScrumMasterの権限は、プロセスを超えて拡張されるべきではありません。彼/彼女は潜在的にあらゆる状況を管理する能力があるはずです。
この章では、データサイエンスのプロセスと、プロセスを理解するために必要な用語について理解します。
「データサイエンスは、分析の複雑な問題を解決するためのデータインターフェース、アルゴリズム開発、テクノロジーの融合です」。
データサイエンスは、機械学習、数学、統計の知識として従来の研究に含まれるカテゴリを備えた科学的方法、プロセス、システムを網羅する学際的な分野です。また、ハッキングスキルと実質的な専門知識の組み合わせも含まれています。データサイエンスは、数学、統計、情報科学、コンピュータサイエンス、データマイニング、予測分析から原則を引き出します。
データサイエンスチームの一部を形成するさまざまな役割を以下に示します-
お客様
顧客とは、製品を使用する人のことです。彼らの関心がプロジェクトの成功を決定し、彼らのフィードバックはデータサイエンスにおいて非常に貴重です。
事業開発
このデータサイエンスチームは、直接またはランディングページやプロモーションの作成を通じて、初期の顧客にサインインします。事業開発チームは製品の価値を提供します。
プロダクトマネージャー
プロダクトマネージャーは、市場で価値のある最高の製品を作成することを重要視しています。
インタラクションデザイナー
ユーザーが適切な価値を見つけることができるように、データモデルに関する設計の相互作用に焦点を当てています。
データサイエンティスト
データサイエンティストは、新しい機能を作成および公開するために、新しい方法でデータを調査および変換します。これらの科学者はまた、さまざまなソースからのデータを組み合わせて新しい価値を生み出しています。それらは、研究者、エンジニア、およびWeb開発者との視覚化を作成する上で重要な役割を果たします。
研究者
名前が示すように、研究者は研究活動に関与しています。データサイエンティストができない複雑な問題を解決します。これらの問題には、機械学習と統計モジュールの集中力と時間が含まれます。
変化への適応
データサイエンスのすべてのチームメンバーは、新しい変更に適応し、要件に基づいて作業する必要があります。データサイエンスでアジャイル手法を採用するには、次のようにいくつかの変更を加える必要があります。
スペシャリストよりジェネラリストを選ぶ。
大規模なチームよりも小規模なチームの方が優先されます。
高レベルのツールとプラットフォームを使用する。
中間作業の継続的かつ反復的な共有。
Note
アジャイルデータサイエンスチームでは、ジェネラリストの小さなチームがスケーラブルな高レベルのツールを使用し、反復を通じてデータを洗練して、ますます高い価値の状態にします。
データサイエンスチームのメンバーの作業に関連する次の例を検討してください-
デザイナーは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データベースを認識しており、MySQL、Oracle、またはその他のSQLデータベースについて十分な知識を持っています。過去数年にわたって、NoSQLデータベースは、プロジェクトのさまざまなビジネス上の問題や要件を解決するために広く採用されています。
次の表は、SQLデータベースとNoSQLデータベースの違いを示しています-
SQL | NoSQL |
---|---|
SQLデータベースは、主にリレーショナルデータベース管理システム(RDBMS)と呼ばれます。 | NoSQLデータベースはドキュメント指向データベースとも呼ばれます。これは非リレーショナルであり、配布されています。 |
SQLベースのデータベースには、行と列を持つテーブルの構造が含まれています。データベースと呼ばれるテーブルおよびその他のスキーマ構造のコレクション。 | NoSQLデータベースには主要な構造としてドキュメントが含まれており、ドキュメントを含めることをコレクションと呼びます。 |
SQLデータベースには、事前定義されたスキーマが含まれています。 | NoSQLデータベースには動的データがあり、非構造化データが含まれています。 |
SQLデータベースは垂直方向にスケーラブルです。 | NoSQLデータベースは水平方向にスケーラブルです。 |
SQLデータベースは、複雑なクエリ環境に最適です。 | NoSQLには、複雑なクエリ開発用の標準インターフェイスがありません。 |
SQLデータベースは、階層データストレージには適していません。 | NoSQLデータベースは、階層型データストレージに適しています。 |
SQLデータベースは、指定されたアプリケーションでの大量のトランザクションに最適です。 | NoSQLデータベースは、複雑なトランザクションアプリケーションの高負荷ではまだ比較可能とは見なされていません。 |
SQLデータベースは、ベンダーに優れたサポートを提供します。 | NoSQLデータベースは依然としてコミュニティサポートに依存しています。大規模なNoSQL展開のためにセットアップおよび展開できる専門家はごくわずかです。 |
SQLデータベースは、ACIDプロパティ(アトミック、一貫性、分離、および耐久性)に重点を置いています。 | NoSQLデータベースは、CAPのプロパティ(整合性、可用性、パーティションの許容範囲)に重点を置いています。 |
SQLデータベースは、それらを選択したベンダーに基づいて、オープンソースまたはクローズドソースに分類できます。 | NoSQLデータベースは、ストレージタイプに基づいて分類されます。NoSQLデータベースはデフォルトでオープンソースです。 |
なぜアジャイルのためのNoSQLなのか?
上記の比較は、NoSQLドキュメントデータベースがアジャイル開発を完全にサポートしていることを示しています。スキーマがなく、データモデリングに完全に焦点を合わせているわけではありません。代わりに、NoSQLはアプリケーションとサービスを延期するため、開発者はデータをモデル化する方法についてより良いアイデアを得ることができます。NoSQLは、データモデルをアプリケーションモデルとして定義しています。
MongoDBのインストール
このチュートリアル全体を通して、MongoDBが最良の「NoSQLスキーマ」と見なされているため、MongoDBの例に焦点を当てます。
データがリレーショナル形式で利用できない場合があり、NoSQLデータベースを使用してデータをトランザクションに保つ必要があります。
この章では、NoSQLのデータフローに焦点を当てます。また、アジャイルとデータサイエンスを組み合わせて運用する方法についても学びます。
アジャイルでNoSQLを使用する主な理由の1つは、市場競争でスピードを上げることです。次の理由は、NoSQLがアジャイルソフトウェアの方法論に最適であることを示しています-
より少ない障壁
現在中流にあるモデルの変更には、アジャイル開発の場合でも実際のコストがかかります。NoSQLを使用すると、ユーザーはデータの正規化に時間を浪費する代わりに、集計データを操作できます。重要な点は、モデルを完全なデータにすることを目標に、何かを成し遂げて作業することです。
スケーラビリティの向上
組織が製品を作成するときはいつでも、そのスケーラビリティに重点を置きます。NoSQLはそのスケーラビリティで常に知られていますが、水平方向のスケーラビリティで設計されていると、より適切に機能します。
データを活用する機能
NoSQLはスキーマのないデータモデルであり、ユーザーは変動性と速度のいくつかのパラメーターを含む大量のデータを簡単に使用できます。テクノロジーの選択を検討するときは、データをより大規模に活用するテクノロジーを常に検討する必要があります。
NoSQLのデータフロー
次の例を考えてみましょう。ここでは、データモデルがRDBMSスキーマの作成にどのように焦点を合わせているかを示しました。
以下はスキーマのさまざまな要件です-
ユーザーIDをリストする必要があります。
すべてのユーザーは、少なくとも1つのスキルを必須にする必要があります。
すべてのユーザーエクスペリエンスの詳細を適切に維持する必要があります。
ユーザーテーブルは、3つの別々のテーブルで正規化されます-
Users
ユーザースキル
ユーザー体験
データベースのクエリ中に複雑さが増し、正規化が増えると時間の消費が見られますが、これはアジャイル手法には適していません。以下に説明するように、同じスキーマを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層を形成します。
予測を行うときは、常に過去のデータを参照し、将来の反復の推論として使用します。この完全なプロセスでは、データを履歴データのバッチ処理から将来に関するリアルタイムデータに移行します。
予測の役割には、次のものが含まれます。
予測は予測に役立ちます。一部の予測は、統計的推論に基づいています。いくつかの予測は、専門家の意見に基づいています。
統計的推論は、あらゆる種類の予測に関係しています。
予測が正確な場合もあれば、不正確な場合もあります。
予測分析
予測分析には、予測モデリング、機械学習、データマイニングなど、現在および過去の事実を分析して将来および未知のイベントに関する予測を行うさまざまな統計手法が含まれます。
予測分析にはトレーニングデータが必要です。トレーニングされたデータには、独立した機能と依存する機能が含まれます。依存機能は、ユーザーが予測しようとしている値です。独立機能は、依存機能に基づいて予測したいことを説明する機能です。
機能の研究は機能エンジニアリングと呼ばれます。これは、予測を行うために重要です。データの視覚化と探索的データ分析は、機能エンジニアリングの一部です。これらはのコアを形成しますAgile data science。
予測をする
アジャイルデータサイエンスで予測を行うには2つの方法があります-
Regression
Classification
回帰または分類の構築は、ビジネス要件とその分析に完全に依存します。連続変数の予測は回帰モデルにつながり、カテゴリ変数の予測は分類モデルにつながります。
回帰
回帰は、特徴を含む例を考慮し、それによって数値出力を生成します。
分類
分類は入力を受け取り、カテゴリ分類を生成します。
Note −統計的予測への入力を定義し、マシンが学習できるようにするデータセットの例は、「トレーニングデータ」と呼ばれます。
この章では、アジャイルデータサイエンスにおける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))
次の手順に従って、「JupyterNotebook」を使用してAnacondaNavigatorに上記のコードを実装します-
Step 1 − AnacondaNavigatorを使用してJupyterNotebookを起動します。
Step 2 − csvファイルをアップロードして、体系的な方法で回帰モデルの出力を取得します。
Step 3 −新しいファイルを作成し、上記のコード行を実行して、目的の出力を取得します。
この例では、Pythonスクリプトを使用して住宅価格の予測に役立つ予測モデルを作成してデプロイする方法を学習します。予測システムの展開に使用される重要なフレームワークには、Anacondaと「JupyterNotebook」が含まれます。
次の手順に従って、予測システムを展開します-
Step 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()
上記のコードは次の出力を生成します-
Step 2 − describe関数を実行して、csvファイルの属性に含まれるデータ型を取得します。
data.describe()
Step 3 −作成した予測モデルの展開に基づいて、関連する値を削除できます。
train1 = data.drop(['id', 'price'],axis=1)
train1.head()
Step 4−レコードごとにデータを視覚化できます。このデータは、データサイエンスの分析とホワイトペーパーの出力に使用できます。
data.floors.value_counts().plot(kind='bar')
「SparkML」または「MLLib」とも呼ばれる機械学習ライブラリは、分類、回帰、クラスタリング、協調フィルタリングなどの一般的な学習アルゴリズムで構成されています。
なぜアジャイルのためのSparkMLを学ぶのですか?
Sparkは、機械学習アルゴリズムとアプリケーションを構築するための事実上のプラットフォームになりつつあります。開発者は、Sparkフレームワークにスケーラブルで簡潔な方法でマシンアルゴリズムを実装するためにSparkに取り組んでいます。このフレームワークを使用して、機械学習の概念、そのユーティリティ、およびアルゴリズムを学習します。アジャイルは常にフレームワークを選択します。これにより、短時間で迅速な結果が得られます。
MLアルゴリズム
MLアルゴリズムには、分類、回帰、クラスタリング、協調フィルタリングなどの一般的な学習アルゴリズムが含まれます。
特徴
これには、特徴抽出、変換、次元削減、および選択が含まれます。
パイプライン
パイプラインは、機械学習パイプラインを構築、評価、調整するためのツールを提供します。
人気のあるアルゴリズム
以下はいくつかの一般的なアルゴリズムです-
基本統計
Regression
Classification
レコメンデーションシステム
Clustering
次元削減
特徴抽出
Optimization
レコメンデーションシステム
レコメンデーションシステムは、ユーザーが特定のアイテムに提案する「評価」と「好み」の予測を求める情報フィルタリングシステムのサブクラスです。
レコメンデーションシステムには、次のように使用されるさまざまなフィルタリングシステムが含まれます。
協調フィルタリング
これには、過去の行動や他のユーザーによる同様の決定に基づいたモデルの構築が含まれます。この特定のフィルタリングモデルは、ユーザーが取り込みたいアイテムを予測するために使用されます。
コンテンツベースのフィルタリング
これには、同様のプロパティを持つ新しいアイテムを推奨および追加するために、アイテムの個別の特性のフィルタリングが含まれます。
以降の章では、特定の問題を解決し、アジャイル手法の観点から予測パフォーマンスを向上させるためのレコメンデーションシステムの使用に焦点を当てます。
この章では、特定のシナリオを使用して予測の問題を修正することに焦点を当てます。
企業が、オンライン申請フォームから提供された顧客の詳細に従って、ローンの適格性の詳細を自動化することを望んでいると考えてください。詳細には、顧客の名前、性別、婚姻状況、ローン金額、およびその他の必須の詳細が含まれます。
詳細は以下のように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つの変数を参照すると、生徒の成績予測は次のようになります。
アジャイル手法は、組織が変化に適応し、市場で競争し、高品質の製品を構築するのに役立ちます。組織はアジャイル手法で成熟し、クライアントからの要件の変化が増加していることが観察されています。組織のアジャイルチームとデータをコンパイルおよび同期することは、必要なポートフォリオに従ってデータをロールアップする上で重要です。
より良い計画を立てる
標準化されたアジャイルパフォーマンスは、計画にのみ依存します。順序付けられたデータスキーマは、組織の進捗状況の生産性、品質、および応答性を強化します。データの整合性のレベルは、履歴シナリオとリアルタイムシナリオで維持されます。
データサイエンスの実験サイクルを理解するには、次の図を検討してください。
データサイエンスには、要件の分析と、それに基づくアルゴリズムの作成が含まれます。アルゴリズムが環境設定とともに設計されると、ユーザーは実験を作成し、より良い分析のためにデータを収集できます。
このイデオロギーは、「アクション」と呼ばれるアジャイルの最後のスプリントを計算します。
Actions最後のスプリントまたはアジャイル手法のレベルに必要なすべてのタスクが含まれます。(ライフサイクルに関する)データサイエンスフェーズの追跡は、アクションアイテムとしてストーリーカードを使用して維持できます。
予測分析とビッグデータ
計画の将来は、分析から収集されたデータを使用してデータレポートをカスタマイズすることに完全にあります。また、ビッグデータ分析による操作も含まれます。ビッグデータの助けを借りて、組織のメトリックをスライスおよびダイシングすることで、個別の情報を効果的に分析できます。分析は常により良い解決策と見なされます。
アジャイル開発プロセスで使用されるさまざまな方法論があります。これらの方法論は、データサイエンスの研究プロセスにも使用できます。
以下のフローチャートは、さまざまな方法論を示しています。
スクラム
ソフトウェア開発の用語では、スクラムとは、プロジェクトの長所と短所を明らかにするために、小さなチームで作業を管理し、特定のプロジェクトを管理することを意味します。
結晶の方法論
クリスタルの方法論には、製品の管理と実行のための革新的な技術が含まれています。この方法を使用すると、チームはさまざまな方法で同様のタスクを実行できます。クリスタルファミリーは、適用するのが最も簡単な方法の1つです。
動的なソフトウェア開発方法
この配信フレームワークは、主にソフトウェア方法論で現在の知識システムを実装するために使用されます。
未来主導の開発
この開発ライフサイクルの焦点は、プロジェクトに関連する機能です。これは、所有権のためのドメインオブジェクトモデリング、コード、および機能開発に最適です。
リーンソフトウェア開発
エクストリームプログラミング
エクストリームプログラミングは、ソフトウェア品質の向上に焦点を当てた独自のソフトウェア開発方法論です。これは、お客様がプロジェクトの機能について確信が持てない場合に有効になります。
アジャイル手法はデータサイエンスストリームに根付いており、重要なソフトウェア手法と見なされています。アジャイルな自己組織化により、部門の枠を超えたチームが効果的に連携できます。前述のように、アジャイル開発には6つの主要なカテゴリがあり、それぞれが要件に応じてデータサイエンスでストリーミングできます。データサイエンスには、統計的洞察のための反復プロセスが含まれます。アジャイルは、データサイエンスモジュールの分解に役立ち、反復とスプリントを効果的に処理するのに役立ちます。
アジャイルデータサイエンスのプロセスは、データサイエンスモジュールが実装される方法と理由を理解するための素晴らしい方法です。それは創造的な方法で問題を解決します。