その先、仕事とか、研究にどう使えるの?




さて
プログラミングの基礎はいかがだったでしょうか?

まだ、ここまでの段階だと
プログラミングでどんなことができるかとか

どんなことに役立つのかとか・・
イメージが湧かない方の方が多いのではないかと思います。

なので、実際に仕事で使っているコードも見ながら
プログラミングがどういうものなのかを
改めて体験していただき、その後どうすれば良いか
というところを深く掘り下げて行きたいと思います。

ファイルの読み込み

In [1]:
# 同じ階層に配置してあるファイルの中身を表示する。
with open('sample.py') as _r:
    print(_r.read())
def hello(aa):
    print(aa)

CSVファイルの読み込み

In [2]:
# 結果を格納する変数を用意
res = []
# ファイルの読み込み
with open('sample.csv') as _r:
    for row in _r:
        # 改行を取り除き、カンマで区切って配列にする
        rows = row.replace('\n','').split(',')
        # 結果用の変数に追加
        res.append(rows)

print(res)
[['aaa', 'bbb', 'ccc'], ['ddd', 'eee', 'fff'], ['hhh', 'iii', 'jjj'], ['kkk', 'lll', 'mmm']]
In [3]:
for row in res:
    # タブ区切りで表示
    print('\t'.join(row))
aaa	bbb	ccc
ddd	eee	fff
hhh	iii	jjj
kkk	lll	mmm

webサイトへアクセスして情報取得

In [4]:
import requests

# webサイトへアクセスしてデータを取得
html = requests.get('http://yahoo.co.jp')

# 取得したデータの最初の800文字を表示
print(html.content.decode('utf-8')[0:800])
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="content-style-type" content="text/css">
<meta http-equiv="content-script-type" content="text/javascript">
<meta name="description" content="日本最大級のポータルサイト。検索、オークション、ニュース、メール、コミュニティ、ショッピング、など80以上のサービスを展開。あなたの生活をより豊かにする「ライフ・エンジン」を目指していきます。">
<meta name="robots" content="noodp">
<meta name="google-site-verification" content="fsLMOiigp5fIpCDMEVodQnQC7jIY1K3UXW5QkQcBmVs">
<link rel="canonical" href="https://www.yahoo.co.jp/" />
<link rel="alternate" media="only screen and (max-width: 640px)" href="https://m.yahoo.co.jp/">
<link rel="alternate" href="android-app://jp.co.yahoo.android.yjtop/yahooja

機会学習系のライブラリの利用

In [5]:
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
In [6]:
# データフレームの作成
df = pd.DataFrame([[3,4],[4,5],[6,9],[2,8]],columns=['a','b'])
# データフレームを描画
df.plot()
Out[6]:
<matplotlib.axes._subplots.AxesSubplot at 0x10eed5f28>
In [7]:
df = pd.DataFrame([[3,4],[4,5],[6,9],[2,8]],columns=['1','2'])
# 散布図を描画
plt.scatter(df['1'],df['2'])
Out[7]:
<matplotlib.collections.PathCollection at 0x1122ec438>

scikit learn

In [8]:
import pandas as pd
# 必要なライブラリのインポート
from sklearn import datasets, model_selection, svm, metrics

# 有名なアヤメのデータの読み込み
iris = datasets.load_iris()
In [9]:
# アヤメのデータをデータフレームに変換する。
iris_data = pd.DataFrame(data=iris.data, columns=iris.feature_names)
# 5行だけ表示
iris_data.head()
Out[9]:
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
05.13.51.40.2
14.93.01.40.2
24.73.21.30.2
34.63.11.50.2
45.03.61.40.2
In [10]:
# ラベルデータの読み込み
iris_label = pd.Series(data=iris.target)
# 5行だけ表示
iris_label.head()
Out[10]:
0    0
1    0
2    0
3    0
4    0
dtype: int64
In [11]:
# アヤメのデータを訓練データ、テストデータ、訓練ラベル、テストラベルに分ける。
train_data, test_data, train_label, test_label = model_selection.train_test_split(iris_data, iris_label)
In [12]:
# 訓練データ
train_data.head()
Out[12]:
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
705.93.24.81.8
1257.23.26.01.8
776.73.05.01.7
255.03.01.60.2
516.43.24.51.5
In [13]:
# 訓練ラベル
train_label.head()
Out[13]:
70     1
125    2
77     1
25     0
51     1
dtype: int64
In [14]:
#  訓練データとテストデータの個数
print(len(train_data), '\t',  len(test_data))
112 	 38
In [15]:
# SVM学習器の定義
clf = svm.SVC()

# 訓練データで学習
clf.fit(train_data, train_label)

# テストデータで予測
pre = clf.predict(test_data)

print(type(pre))
print(pre)
<class 'numpy.ndarray'>
[0 0 1 1 0 2 1 0 2 1 2 0 2 2 0 1 0 0 2 1 0 0 0 2 0 2 2 2 1 0 2 0 1 2 2 1 0
 1]
In [16]:
# 正答率
ac_score = metrics.accuracy_score(test_label, pre)
print(ac_score)
0.947368421053

最後に

プログラムを作る上で重要になるのが

「目的」です。

プログラミングの重要な部分は
プログラムに何をさせるかということです。

プログラムは手段であり、目的を達成するために
労力を下げるためのものになります。

プログラムを作る労力が目的を達成する時間を
上回っていたらプログラムを作る必要性はなくなります。

まずは目的を明確にして、ものすごく労力のかかる作業であれば
これをプログラムに落とし込む、ということを考えましょう。

すでに同じ機能を有するプログラムが存在していたら
実はプログラムを作る必要性というのは低いです。

こういうのを車輪の再発明といい、すでに有るものを再度作ろうと
試みるのは、無駄なことが多いです。

pythonでは大量のライブラリがあり
ほとんどの機能はそれで実現できると思います。

なので、プログラムを作る際に無駄なことをしないように、
下調べをしておくのも作業時間を減らす良い方法になります。

あくまでもプログラミングは目的を達成するための手段でしかありません。

恐らく仕事で使えるのは、「問題を解決する能力」の方だと思います。

プログラミングを続けると、
自然とこの「問題を解決する能力」が高まります。

この先は恐らくエラーが多発し、それを回避するために、
いろいろ調べたり、人に聞いたりしながら、コードを修正してゆくこととなるでしょう。

そういった経験の積み重ねが、研究や仕事をこなすための能力を高めてくれることでしょう。

この講座を学習したことが、みなさまの能力向上に一役買って頂けてると
とても幸いです。

pythonの基礎編は以上になりますが、この後は応用編や、
他の言語やミドルウェアや、クラウドサービスの使い方などの
講座も続けていきますので、ぜひそちらもチェックしてみてください。