1. Python とデータサイエンス

本講義では、Pythonによるハンズオン演習を含めながら、 データサイエンスと機械学習の基礎を学びます。 まずは、Google Colabに慣れながら、Pythonのおさらいから始めましょう。

1.1. データサイエンスとは

データ・サイエンスは、数学やコンピュータ科学を駆使し、データから価値を創出し、社会課題に答えを出す技法です。近年、ICT技術の急激な進歩にともない、大量のデータの収集が容易になり、あらゆる分野で活用が期待されている学問領域です。

求められるスキルセット

  • 数学、統計学、コンピュータ科学

  • コンピュータ力(UNIX、Python, pandas, matplotlib)

  • ビジネス分析力(仮説探索、仮説検証)

  • プレゼンテーション

参考資料: http://www.datascientist.or.jp/symp/2019/pdf/1115-1155_skill.pdf

本講義

本講義は、数学やコンピュータ科学を学んできたという前提の上で、 データ分析に必須となるコンピュータ力を高めていきます。 特に、Python でデータ分析ができるかどうかは、 pandas と matplotlib を使いこなせるかどうかにかかっています。 かなり練習しないと使えませんので、ぜひしっかり練習してください。

1.1.1. データサイエンスの目的

データサイエンスのアウトプットは2つに大別されます。

  • レポーティング: 人間に対し、意思決定が的確に行えるようにエビデンスを提供すること

  • 人工知能(AI): コンピュータに対し、未来が予測できるようにモデルを構築すること

なぜ、近年データサイエンスが注目されているか?

  • リアルタイム性: 従来はデータ分析に大きな時間がかかっていたが、現在はビックデータ収集からデータ分析までリアルタイムで処理が行える

  • 標準化: データを扱うことが統一され、バラバラでなく、統一した基準で議論が可能になる

  • 共有性: データ共有が進み、多くの人が等しくデータの民主化が促進される

データサイエンスと人工知能(AI)

データサイエンスは、広い領域にまたがっています。 統計学を専門にする教員とコンピュータ科学を専門にする教員では、 重要視する内容が少しずつ異なります。 この講義は、PyTorch等を駆使して人工知能(AI)を開発してきた経験から、 「人工知能(AI)の基礎を学ぶ」ことに力点をおいています。

1.2. データサイエンスを学ぶ環境

Colabとは、Google 社が提供するクラウド版のJupyter Notebook です。 環境設定することなしに、Python と豊富なライブラリ、さらに高性能なGPUが利用可能です。 データサイエンスや機械学習の入門には大変によい環境が提供になっています。

https://colab.research.google.com/

はじめて Colab を使うときは、Google アカウント( Gmail アカウント ) が必要になります。 Googleアカウントは複数作成できるので、授業用のアカウントを作っておくと便利です。

1.2.1. テキストセル

Colab は、コードセルとテキストセルがあります。 テキストセルには、マークダウン記法によって、コードの説明やメモを記録します。

よく使うマークダウン記法

# 見出し1
## 見出し2
### 見出し3

* 項目1
* 項目2

1. 項目
2. 項目

マークダウン記法と数式

簡易文書作成記法です。ソフトウェアエンジニアや科学者の間では、標準的な記法になっています。 また、Colabでは Mathjax(Latexによる数式埋め込み)も対応しているため、$\sqrt{2}$のように$で囲むと、 \(\sqrt{2}\)のように数式も記述できます。

colab_math.png

データサイエンティストとしては、数式はLatex記法でかけるようになった方がレポートが綺麗に仕上がります。

コードセル

プログラム(ソースコード)を入力して、実行ボタンを押すことで、実行結果を表示します。

e5b735636e224f438716d2a254082544

本資料では、実行セルに入力すべきコードと実行結果は、次のように記載します。

[ ]:
print("Hello World")

注意すべき点は、実行セルでは、独立していないことです。

前のに実行したセルの結果(変数など)は、次のセルで続けて使うことができます。

[ ]:
x = 1
x + 1
[ ]:
x * 2

注意:コードセルの実行結果

セル内で最後に実行した結果は、print()しなくても、表示されます。

1.2.2. コードセル (UNIXコマンド編)

Colabは、Google社のデータセンターの Linux 上で実行されています。

!lsのように!をつけると、コードセル内でUNIXコマンドを実行することができます。

!uname -a

本講義では、ファイル操作などでは、UNIXコマンドを使います。 !が先頭についていたら、UNIXコマンドなんだなと、理解してください。

Web上の「吾輩は猫である(テキスト版)」をColab上にダウンロードしてきて表示します。

http://www.cl.ecei.tohoku.ac.jp/nlp100/data/neko.txt

[ ]:
!wget http://www.cl.ecei.tohoku.ac.jp/nlp100/data/neko.txt
!head neko.txt

Colab は、使いやすいユーザインターフェースを備えていますが、ユーザインターフェースからは全ての操作はできません。UNIXコマンドを使いこなすと、細かい操作ができるようになります。 UNIXコマンドは、Colabに限らず、 クラウドなどのコンピューティング基盤を使いこなす必須スキルといえます。 本講義を通して、少しずつ覚えていきましょう。

本講義で使う主なUNIXコマンド

コマンド

説明

head

ファイルの先頭を表示して確認する

wget

URLからファイルをダウンロード

unzip

ZIPファイルを展開する

1.3. データサイエンスとPython

本講義では、Pythonを用いて手を動かしながら、データサイエンスと機械学習の基礎を学びます。

高度なプログラミング能力は必要はありませんが、最低限のPython言語の理解がないと、 ソースコードが読めなくてわからなくなります。

必須

  1. 演算子、変数と関数

  2. 条件分岐、繰り返し (for文)

  3. リスト、辞書などのデータ操作

(知っていれば)理解が深まる

  1. ラムダ式や高階関数 (2年前期)

  2. オブジェクト指向と演算子オーバーロード (2年後期)

Pythonの理解が怪しいときは、Pythonチュートリアル(Web版)を頼りにして、復習しておきましょう。

もしPythonに自信がなければ

2年生向けのPythonプログラミング講義ノートも公開しています。ぜひこちらも役立ててください。

1.3.1. Python 理解チェック

次のPythonコードを(コードセルを実行しなくても)実行結果が予想できるか試してみましょう。

[ ]:
# 変数(代入)、加算
x = 1
y = x + 1
x + y
[ ]:
# 変数(代入)、等号
x = 2
x == y
[ ]:
# 関数
from math import sqrt
sqrt(2.0)
[ ]:
# 関数定義
def f(x):
    return x+1
f(1)
[ ]:
# 繰り返し, range()
for n in range(0, 10):
    print(n)
[ ]:
# リスト
a = [0, 1, 2, 3]
a[0] + a[-1]
[ ]:
# 辞書
d = {'apple': 100, 'orange': 120}
d['apple']
[ ]:
# 応用問題
a = []
for n in range(0, 10):
    if n % 2 == 0:
        a.append(n)
sum(a)

1.3.2. ワンランク上のPythonスキル

ここから先は、ちょっと難しいかもしれません。

「はじめてみる」ということはないと思いますが、こういう書き方があると覚えましょう。

[ ]:
## リスト内包記法
[n+1 for n in range(0, 10) if n % 2 == 0]
[ ]:
## 高階関数 map
list(map(f, range(0, 10)))
[ ]:
## ラムダ式, map
list(map(lambda x: x+1, range(0, 10)))
[ ]:
## クラス (2年後期で不評でしたが)
class C(object):
    c: int
    def __init__(self):
        self.c = 0
    def count(self):
        self.c += 1
    def __repr__(self):
        return str(self.c)
    def __int__(self):
        return self.c
    def __add__(self, another):
        return self.c + int(another)
c = C()
print(type(c)) # cの種類を調べる
c.count()
c

オブジェクトの種類の確認

データサイエンスや機械学習のライブラリでは、 演算子オーバーロードされたオブジェクトが当たり前のように使われます。 変だなと思ったらtype()でオブジェクトの種類を確認してください。

print(type(c))

1.4. コースワーク

コースワークは、次回の講義までの演習課題です。 次回の講義までに取り組んでください。 次回の授業で解説を行いますので、全てできなくてもても構いませんが、 必ず取り組んでください。

演習(素数)

Colabを用いて、1000以下の素数リストを作るPythonプログラムを書いてみよう。

ヒント

色々な解き方があります。

  1. エラトステネスの篩(アルゴリズム)を用いる

  2. 素数かどうか判定する関数を作ってフィルタする

簡単な方でどうぞ

今回は、Python の復習ですが、 もし全く手がつかない人は、2年生向けの解説も参考にしてください。