sagantaf-佐賀んタフ-

なんでも自分の思ったこと、経験したことを書いて生きます。

PC起動の流れ〜電源ONからデスクトップ表示まで〜

電源をポチッと押してから、デスクトップが表示されて人間が触れるようになるまでのPCが起動するプロセス、流れをざっくりまとめておいた。

 

 

①まずは、PCの電源を入れることで電気が供給される

②搭載されているハードウェアが正常か、壊れていないかチェックする

f:id:sagantaf:20180603125951p:plain

③OSの根幹となるカーネルをメモリに読み込む

④ディスクにアクセスするためのファイルシステムをマウントする

f:id:sagantaf:20180603130103p:plain

 

⑤ディスプレイやマウス、キーボードなどのデバイスと接続する=設定をニュートラルに戻す(初期化すると呼ぶ)

f:id:sagantaf:20180603130333p:plain

 

⑥あらかじめ初回に起動することを設定されていた各種プログラム(initプログラム)を起動する

⑦ログイン画面やデスクトップをディスプレイに表示し、ユーザーが扱えるようになる

f:id:sagantaf:20180603130533p:plain

 

 

プログラミングを学ぶにあたって覚えておきたいこと

プログラミングを学ぶにあたって覚えておきたい、意識しておきたいことをまとめておいた。

 

(1)プログラミングは必須スキルになる

プログラミングは今後必須スキルになるため、他人との差別化の要因にはならなくなる。学校の授業で取り入れられるほどになっている。

 

(2)様々な仕事と似ている

プログラミングは仕事でのタスク管理と精通しているところがある。無駄を省き効率的に進めていく方法を考えることは、アルゴリズムを考えることと同じである。だから、一般的な仕事にも役に立つ。

 

(3)自分で作れるかどうか

イデアだけではなく実際に自分の手で動くものを作れることが重要。自分のアイデアを語る上でプロトタイプを元に説明するとしないとでは説得力が違う。大企業では分業が進んでおり自分1人ではプロセスの全てを実施することができない点がデメリット(例:設計だけやって実装=プログラミングは外注する)。IT技術でものづくりをしたいのであれば、まずはものづくり工程を全て自分で実施できることが重要になる。

書籍などでプログラミングを学ぶときは、コピペではなく実際に自分の手で入力して、自分の目で結果を確認することで、脳への習得につながる。読んで理解するだけだと、使えるようにはならない。

 

(4)アルゴリズムの大切さ

アルゴリズムはレシピ、プログラムはレシピ本、とすればイメージしやすい。アルゴリズムを学ぶことで、何ができて何が難しいか、どういった処理に時間がかかるか、といったWebサービスやアプリケーションなどを作る上で超根本的な部分を理解できる。基本的なアルゴリズムとそれにかかる計算量はそらで語れる、組めるようにしておき、プログミラングの考え方を体で覚えておくことが重要。

 

(5)すべては覚えていられない

IT技術は奥が深すぎて真面目に学ぼうとすると、途方も無い時間がかかるし、そんなに覚えていられない。PC起動の流れや、通信プロトコルの仕組みといった要素技術を知っておくこともコンピュータの動きを理解する上で重要だけど、プログラミングのようにすぐに使うわけじゃないから記憶に留めておくのが難しい。

根本的なことをまとめておいて、それを読み返せばすぐに実用的な理解につながるようにしておくことで、いざというい時にすぐに役立つ自分専用のリファレンスが出来上がる。
 

(6)自分専用のポケットリファレンスを作る

リファレンスといえば、よくプログラミング言語のポケットリファレンスがある。持ち運びに便利だし、すぐに確認することができる。しかし書籍だと、その時知りたいことが書いてあるとは限らないし、インデックスから探すのに時間がかかることもある。
それよりも(5)のように自分で学んだことをどんどんブログに入れていき、それを自分のポケットリファレンスとしていつでもスマホやPCから確認できるようにしておくことで、自分にとって一番使いやすいポケットリファレンスになる。
 
 

(7)目的にあったプログラミング言語を選ぶ

プログラミング言語は得手不得手がある。Web系であればJavaScriptPHPiOSアプリならSwift、データ分析系であればRやPythonといったように、それぞれ得意分野がある。
得手不得手が合致しないプログラミング言語を使うのはコーディングにもプログラム実行にも時間がかかるため、非効率的かつ役に立ちにくい。
何をやりたいか、を明確にして、その都度使うプログラミング言語を選択することが、効率よく役立つプログラムを作成する上で欠かせない。
あらかじめ自分で知っておく必要はなくて、必要になった時に検索すればよい。

 

 

EOF

今に集中しつつ、将来の目的を見失わない方法が知りたい

 

目の前の目標に集中すると力が付くけど、将来の目的=目指したい方向がズレても気づきにくい。

 

将来の目的を立てて、未来に何々をしたい、とかばかり考えていると、今に集中できなくなる。

 

この"今"と"将来"の間を取れば、力が付くし、方向もズレない。

 

将来の目的、やりたいことを明確にして、それに対する短期的な目標=道しるべを立てたら、あとは今に集中してひたすら立てた目標を目指す。1ヶ月に一度くらい振り返りの時間を設けて、将来の目的から外れていないか確認する。

 

こうすれば良いんだろうけど、中々続かなそう

続けるにはどうすれば良いんだ…

 

「継続力」関連の本がたくさん出てそうだから、読んでみることにする。

【Python】NumPyメモ

Numpyのメモ

 

asfarray

数値をfloatタイプに変換する

文字列で読み込んだデータを数値に変換する時などに利用する

 
Input
# データリストのひとつひとつが空白区切りで格納されている場合
data_list=["4 3 2 1",  "1 2 3 4",  "7 6 5 4"]
# 空白で区切って要素を取り出してみると、
all_values = data_list[1].split(' ')
# タイプは文字列=strになっている
print(type(all_values[1]))

Output

<class 'str'>

 

Input 

# このままだと数値として処理ができないので、asfarrayを使って数値に変換したりする
data_array = np.asfarray(all_values)
print(data_array)
print(data_array[0])
print(type(data_array[0]))

Output

[1. 2. 3. 4.]
1.0
<class 'numpy.float64'>

→floatタイプになっていることがわかる

 

 

 

 

データサイエンスの基本的なプロセス

データサイエンスといっても、幅広い。

統計解析やデータマイニング機械学習など違いがよく分からない言葉がたくさんある。

 

ただ、どんなことでもデータを分析するのであれば、プロセスは似たようなものになるはず。

 

そこで、「データサイエンティスト養成読本」を読んで得た「データサイエンスの基本」と「データ分析業務のプロセス」についてまとめた。

改訂2版 データサイエンティスト養成読本 [プロになるためのデータ分析力が身につく! ] (Software Design plus)

改訂2版 データサイエンティスト養成読本 [プロになるためのデータ分析力が身につく! ] (Software Design plus)

 

 

 

データサイエンスの基本要素

まずは、データサイエンスの超基本的な構成要素の理解から。

Inputデータ

 →センサー技術の発展によりInputとなるデータが多様化した

 →データは多様であるほど、様々な分析を施せるため、分析対象が高品質になった、といえる

分析するアプリ・ツールが稼働するハードウェア

 →クラウドサービスの台頭により一気に低コスト化した

 →分析するための土台が安く手に入るようになった

分析アプリ・ツール

 →データ操作技術の発達により、様々な分析ツールが生まれ簡単にデータ分析をできるようになった

f:id:sagantaf:20180430174954p:plain

 

 

データ分析業務のプロセス

①目的設定

 まずは何においても「何が知りたいのか、なぜデータ分析をしたいのか」を明確にすることから始まる。ここが曖昧だと、データ分析をしても、分析すること自体が目的になってしまい、価値の無い分析結果が生まれてしまう。

 

②データ把握
 目的を明確にしたら、まずは基本統計量を算出する。基本統計量とは、Inputとなるデータの平均や標準偏差のことを指す。
 データの傾向、欠損値の有無、外れ値の有無を把握することで分析の見通しが立つため、このデータ把握は重要になる。データの特性を把握しておかないと、どういう分析が適しているか判断できない。
 データの特性を表示するには、例えばPythonのライブラリであるpandasの.describe()関数を使う。平均や標準偏差を一気に出力してくれる。
 
Sample
     import pandas as pd
     data = pd.read_csv("random.csv")
     data.describe()
 

f:id:sagantaf:20180526141304p:plain

 
→kaggleのLearnのMachineLearningの”Staring Your ML project”にて使い方が分かる:https://www.kaggle.com/dansbecker/starting-your-ml-project
 
 
③データの視覚化
 統計量を算出した後は、その数値を視覚化する。視覚化には、ヒストグラム・箱ひげ図・散布図などが使われる。相関係数を算出したり、回帰直線を引いたりして視覚化することで、より直感的な理解ができるようになる。
 
 
④多変量解析
いよいよアルゴリズムを当てはめて、解析を実行する。多変量解析には、予測と分類がある。
 予測 - どんな要因・要素が結果に影響するか、という因果関係を明確にするもの
  → 線形回帰モデル、ロジスティック回帰モデル、決定木モデルなど
 分類 - 多数の変数で記述されたデータの類似関係を明確にするもの
  → 次元縮約、クラスタリングなど

解析した後は、その結果の精度などを確認し、モデルの良し悪しを判断する。また、適用するモデル(アルゴリズム)を変えてみる等、試行錯誤して検証を繰り返す。

 
試行錯誤する際は、なるべく分かりやすい部分から進めていき、シンプルなモデルを構築したら、その知見を生かして複雑なモデルを構築していくことで、解析をスムーズに実施できる。

 

 

データ分析プロセスのフレームワーク

 

データ解析プロセスのフレームワークとして、CRISP-DMがある。

上記、①目的設定、②データ把握、③データの視覚化、④多変量解析 を体系的にまとめたものになっている。

要素としては、以下の6つある。

 1:Business Understanding

 2:Data Understanding

 3:Data Preparation

 4:Modeling

 5:Evaluation

 6:Deployment

 

1:Business Understanding(ビジネス理解)

 データ分析の対象となる業務・ビジネスを理解するフェーズ。①目的設定に該当する。

 レコメンデーション実装なのか業務支援なのか、といった最終的なアウトプットを意識して理解を進めることが必要になる。

 アウトプットが明確になり、何をする必要があるかが分かったら、各ポイントでの目標を設定し、スケジュールに落とし込んでいく。

 

2:Data Understanding(データ理解)

 対象の業務に関連して収集しているデータを理解するフェーズ。②データ把握に該当する。

 データベースの種類や規模(テーブル数)、データ型や用意されているカラムの調査に加え、システム全体の構成からデータのインプットとアウトプットを把握することが必要。

 

3:Data Preparation(データ準備)

 データを抽出し、加工するフェーズ。③データの視覚化を含んだ部分となる。

 いわゆる前処理と呼ばれる部分。ここがデータ解析プロセスの中で一番重要であり、一番時間を必要とする。

 抽出・集約・統合や、データ形式の統一、欠損値の処理など。

 

4:Modeling(モデル化)

 対象データに効果のあるモデルを適用するフェーズ。④多変量解析に該当する。

 一般的には教師ありモデル(決定木、線形回帰)や教師なしモデル(k-means、主成分分析)に分割される。

 この後のEvaluationによって効果的なモデルが見つかるまで、いくつかのモデルの適用を繰り返すことになる。

 

5:Evaluation(検証・評価)

 データ分析の結果から最初に設定した目標を達成するかを検証し評価するフェーズ。④多変量解析に該当する。

 

6:Deployment(サービス実装)

 作成したデータ分析モデルを、今後のデータに適用し、サービスとして実装するフェーズ。

 既存のシステムに適用したり、新規ソフトウェアとして開発する方法がある。

 また、環境・時間の変化によって作成したモデルは最適ではなくなる可能性があるため、常にモニターする必要もある。作成したモデルの予測値と結果のズレが小さいままかどうかをチェックし、アラートを発生させるなど、自動的な監視を導入するなどが考えられる。

 

 

 

 

 

以上、すごく触りの部分だけまとめてみた。この後は、

「データ解析の実務プロセス(森北出版)」を読んで理解を深めていこうと思う。

データ解析の実務プロセス入門

データ解析の実務プロセス入門

 

 

 

  

データサイエンティストになるために何を学ぶか

データ分析業務に就くにあたって、何を学んでおくべきかを調べて、考えてみた。 

 

データサイエンティストに必要なスキル

3種類に分かれるらしい。

・IT系

 データを操るスキル。RDBMSSQLHadoopPythonJavaLinuxコマンドなど。

・分析系

 仮説を立てて検証を繰り返す、論理に当てはめる、といったスキル。統計解析、機械学習アルゴリズムの知識など。

・ビジネス系

 分析対象としているビジネスの理解、ストーリーを作り出す力、コミュニケーション力といった明確に示しづらいスキル。質問力、理解力、説得力、伝達力など。

 

 

 

どんなスキルをどうやって磨いていくか

 

分析系は理論に近く、IT系は実務に近い。分析系を学び、IT系で実践して血肉にするという意味で、二つは同時に習得していくことで、相乗効果が生まれると思う。だから、スキルで分割した学習の方法(分析系の習得にこれをやって、IT系の習得にはこれをやる)ではなくて、技術で分割した学習の方法で進める。

例えば、k-means法について理論からPythonのscikit-learnを使った実装方法までを一気通貫で学ぶ、とか。

ただし、データ分析の実装手段であるIT技術は入れ替わりが早い特徴がある。逆にデータ分析の根本である理論は変わらないので、理論を中心に学習を進める。

× あるひとつの理論の様々な実装方法を習得する

○ 複数の理論に対し、少なくとも1種類の実装方法を習得する

 

一方、ビジネス系は独立しているけど、どんなビジネスマンにも必要なスキルだと思う。インプットを理解し、アウトプットを説明する時、つまり最初と最後に必要になる。

ある程度は書籍で学べるかもしれないけど、抽象的な部分を抜け出せない気がする。

これに関しては実務あるのみ、で顧客の業務を理解し、要望を聞いたり、結果を説明するなど実践したことに対して、反省し次へ活かすプロセス(PDCA)を回すことで習得していく。 

 

 

 

EOF

virtualenvでPython3 環境構築メモ

virtualenvをインストール
$ pip install virtualenv
 
環境を作りたいディレクトリに移動
$ cd 作業ディレクト
 
環境を構築
$ virtualenv 環境名
 
環境名のディレクトリが作成されるので、そこに移動
$ cd 環境名
 
仮想環境を起動
$ source bin/activate
 
pythonのバージョンを確認
$ python -V
 
Python3.6をインストール
$ pyenv install 3.6.1
 
python3に切り替え
$ pyenv global 3.6.1
 
PATHを設定
$ vi ~/.bash_profile
(.bash_profile に export PATH="$HOME/.pyenv/shims:$PATH” を追記)
 
PATHを有効化
$ source ~/.bash_profile
 
python のバージョンを確認
$ python -V
 
3.6.1と表示されるはず!