Python - データ分析に関する基礎知識

Odyssey CBTの**Python3 エンジニア認定データ分析試験**の学習を始めました。今回は**データ分析に関する基礎知識**をインプットしておきました。今回は座学が多めです。

https://www.amazon.co.jp/Python%E3%81%AB%E3%82%88%E3%82%8B%E3%81%82%E3%81%9F%E3%82%89%E3%81%97%E3%81%84%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E7%AC%AC2%E7%89%88-%E5%AF%BA%E7%94%B0-%E5%AD%A6/dp/4798176613/ref=pd_lpo_1?pd_rd_w=QISs3&content-id=amzn1.sym.d769922e-188a-40cc-a180-3315f856e8d6&pf_rd_p=d769922e-188a-40cc-a180-3315f856e8d6&pf_rd_r=1GMKW9KCKHMTN89AYCY3&pd_rd_wg=pWePp&pd_rd_r=c24e52d9-a831-4e5f-bc21-cb015b04e238&pd_rd_i=4798176613&psc=1

# 学習内容
Python3認定エンジニア・データ分析試験に向けて「Pythonによるあたらしいデータ分析の教科書」を学ぶ。 各種ツールと知っておくべき数式・アルゴリズムを学習する。Pythonでデータ分析、およびデータ分析をプログラミング・ビジネスに応用できる人材を目指す。 
- 使用ライブラリー - `numpy、pandas、matplotlib、scikit-learn、SciPy` 
- 応用先 - `WEBスクレイピング、自然言語処理、画像処理`

# データ分析の世界
政府や地方自治体、大企業の発表するデータがオープンデータ化されている。 また、膨大なデータを処理できるクラウドソーシングサービス(**BigQuery, Azure, AWS**など)が発展してきた。これらのデータを処理するために**統計解析・多変量解析、機械学習といったアルゴリズム・分析モデル**が活用されている。

データ分析は**工場の異常検知システム・広告出稿の品質管理・天気予報**などに応用されている。 特に深層学習(DL)の発展が目覚ましく、**自動翻訳・会話生成**などへの応用が進んでいる。

# Pythonの活用
データ分析に使われるプログラミング言語は主に**Python・R**となっており、特にPythonでは豊富なライブラリーと外部パッケージを使ったデータ分析が行える。 

### Pythonの活用
- WEBシステム
- IoTデバイスの操作(Raspberry Pieなど)
- データ分析・機械学習

### Pythonが苦手とする分野、その代替オプション：
- Webアプリのフロントエンド処理(→Flutter)
- デスクトップアプリ(→Flutter)
- 速度向上・最適化(→C・Fortran)
- 超大規模な処理(→SQL)

# データサイエンティストとは何か？
**数学、情報工学、事業の専門知識を総合的に持つデータ分析者**のことを指す。具体的には下記の能力が求められる：

- モデル・アルゴリズムの構築と実装ができる
- 新たな解決法・新技術に携わる
- 解決したい実務に取り組んでいる
- データとの向き合い方・解釈を提示できる
- 分析結果を数学的に評価できる

### データ分析エンジニア-基礎技術¶
データサイエンティストの中でもデータ分析エンジニアとは情報工学を基礎知識とし、**データベース技術・データの活用に携わるエンジニア**を指す：

- データの入手・加工(numpy, pandas)
- データの可視化(matplotlib, pandas)
- プログラミング(pythonの基礎)
- インフラレイヤーの実装(サーバーサイドエンジニアリング、データ基盤)

### データ分析エンジニア-付加技術¶
基礎技術に加え、付加技術を身に着けると仕事の幅が広がる

- 機械学習(scikit-learn)
- 数学(線形代数、微積分、統計学)
- 専門知識(データ分析を適用する分野への知見・経験則)

# 機械学習の基礎知識
機械学習(ML、Machine learning)とは大量のデータから非明示的なアルゴリズムによってデータの特性を見つけ、予測に必要なニューラルネットワーク等のパターンを獲得するタスクである。 このパターンの塊を**モデル**という。モデルを作成するには**入力データ**、および**データを処理するアルゴリズム**が必要。

### 機械学習のタスク
- 教師あり学習 - **正解となるラベルがある場合**、正解ラベルを目的変数・それ以外のデータを説明変数とする。定性データの予測には分類・定量データの予測には回帰のアルゴリズムを適用する。**株価予測やチャットボット**などのアルゴリズムほとんどコレ。
- 教師なし学習 - 正解ラベルの代わりに、**与えられたデータに特定のグループ・似た集団があるかを予測**する。クラスタリング・次元圧縮といったアルゴリズムを適用する。**文字の分類などの画像処理**は教師なし学習・次元圧縮で学習している
- 強化学習 - エージェントと呼ばれるオブジェクトが**得られる報酬を最大化**する様な行動を獲得する。餌を探し回るネズミやネコを想像するとわかりやすい。ボストンダイナミックスの**ロボットの挙動の一気通貫学習・ChatGPT等の大規模言語モデルのリワードモデルの最大化**に使われている。

### 機械学習を用いない予測アルゴリズム¶
- ルールベース - **条件分岐をハードコードする**ことでデータの特性を発見する。予測が正しいか否かを事後法的に証明しなければならない。 データの特性を獲得するのに必要なパラメータが多くなるとルールベース手法は使えない
- 統計的プログラミング - **データから得られる統計量**を用いて予測を行う。特にベイズ統計モデリングが**迷惑メールの検出**等に活用されている

# データ分析のタスク¶
Googleのアナリストの場合
- 問いかけ
- 準備
- 処理
- 分析
- 共有
- 行動

### 機械学習(教師あり分類)のタスク
- データ入手
- データ加工(numpy, pandas)
- データ可視化(matplotlib)
- アルゴリズム選択(scikit-learn)
- 学習プロセスを実装(モデリング・ファインチューニング)
- 精度評価(scikit-learn)
- 試験運用
- 結果利用・課題整理

### データ分析に使うツール・パッケージ¶
- Kaggle - Kaggleのサーバー上でJupterNotebookを利用できる。無償
- JupyterLab - Webブラウザー上でPythonコードを実行する。ファイルは.ipynb、内部はJSONとして処理されている。とても便利
- Numpy - 数値計算を行う。配列・行列とベクトルを用いた計算が高速で実行できる
- pandas - Numpyを基盤としデータフレーム構造を提供する。R言語と同じ要領でデータの変換・加工が行える
- Matplotlib - データの可視化を行う。元はMatlabと同じ機能を実装することを目指したパッケージ
- scikit-learn - 機械学習のアルゴリズム・評価に使う指標を実装できる
- scipy - 科学技術計算を高速で実装できる(線形代数・統計的処理など)

データ分析に関する基礎知識がインプットできたので、次回はさっそくNumpyの学習に取り掛かります。