技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

データサイエンスの勉強(データをざっくり眺める)

データサイエンスの育成講座(3) - 技術をかじる猫 この辺の続き

データダウンロードと解凍

ファイルのダウンロードと解凍…って何回やるかは不明だが。

import requests, zipfile
from io import StringIO
import io

target_url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/00356/student.zip'
req = requests.get(target_url, stream=True)

zip_val = zipfile.ZipFile(io.BytesIO(req.content))
zip_val.extractall()

ファイルの読み込み

import numpy as np
import numpy.random as random
import scipy as sp
import pandas as pd
from pandas import Series, DataFrame

student_data_math = pd.read_csv('student-mat.csv')
student_data_math.head()
school;sex;age;address;famsize;Pstatus;Medu;Fedu;Mjob;Fjob;reason;guardian;traveltime;studytime;failures;schoolsup;famsup;paid;activities;nursery;higher;internet;romantic;famrel;freetime;goout;Dalc;Walc;health;absences;G1;G2;G3
0 GP;"F";18;"U";"GT3";"A";4;4;"at_home";"teacher...
1 GP;"F";17;"U";"GT3";"T";1;1;"at_home";"other";...
2 GP;"F";15;"U";"LE3";"T";1;1;"at_home";"other";...
3 GP;"F";15;"U";"GT3";"T";4;2;"health";"services...
4 GP;"F";16;"U";"GT3";"T";3;3;"other";"other";"h...

え!?
まさか…

student_data_math = pd.read_csv('student-mat.csv', sep=';')
student_data_math.head()
school sex age address famsize Pstatus Medu Fedu Mjob Fjob ... famrel freetime goout Dalc Walc health absences G1 G2 G3
0 GP F 18 U GT3 A 4 4 at_home teacher ... 4 3 4 1 1 3 6 5 6 6
1 GP F 17 U GT3 T 1 1 at_home other ... 5 3 3 1 1 3 4 5 5 6
2 GP F 15 U LE3 T 1 1 at_home other ... 4 3 2 2 3 3 10 7 8 10
3 GP F 15 U GT3 T 4 2 health services ... 3 2 2 1 1 5 2 15 14 15
4 GP F 16 U GT3 T 3 3 other other ... 4 3 2 1 2 5 4 6 10 10

5 rows × 33 columns

CSV じゃねーのかよ!?

気を取り直して、情報の状態。
各データ型とどれくらいデータが詰まってるか?(null フィールド検出)

student_data_math.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 395 entries, 0 to 394
Data columns (total 33 columns):
school        395 non-null object
sex           395 non-null object
age           395 non-null int64
address       395 non-null object
famsize       395 non-null object
Pstatus       395 non-null object
Medu          395 non-null int64
Fedu          395 non-null int64
Mjob          395 non-null object
Fjob          395 non-null object
reason        395 non-null object
guardian      395 non-null object
traveltime    395 non-null int64
studytime     395 non-null int64
failures      395 non-null int64
schoolsup     395 non-null object
famsup        395 non-null object
paid          395 non-null object
activities    395 non-null object
nursery       395 non-null object
higher        395 non-null object
internet      395 non-null object
romantic      395 non-null object
famrel        395 non-null int64
freetime      395 non-null int64
goout         395 non-null int64
Dalc          395 non-null int64
Walc          395 non-null int64
health        395 non-null int64
absences      395 non-null int64
G1            395 non-null int64
G2            395 non-null int64
G3            395 non-null int64
dtypes: int64(16), object(17)
memory usage: 102.0+ KB

質的データ

数値化されていない不連続値データ。状態を表す。

# 質的データ:連続的なあたいのデータで、比率に意味がある
student_data_math['sex'].head()
0    F
1    F
2    F
3    F
4    F
Name: sex, dtype: object

量的データ

数値化されたデータ。比率などに意味を持つ。

student_data_math['absences'].head()
0     6
1     4
2    10
3     2
4     4
Name: absences, dtype: int64

軸別に平均値を出す

といってもそのままですね

S¯=1Ni=1N(xix¯)
student_data_math.groupby('sex')['age'].mean()
sex
F    16.730769
M    16.657754
Name: age, dtype: float64
続きを読む

Elixir の薄い同人本読んでみた

薄くて肌色の本を想像したそこな男よ!残念!技術書でしたー!

タイトル見て「コイツ何言ってんの?」と思った人も居そう。
何をしているかと言うと、下記にでる予定の Elixir 本を先行して読ませてもらっているという!

techbookfest.org

あるんですよ、世の中には 技術専門の同人誌 なんて言うものが。
で、知り合いがそこでサークル参加するので、その本をレビュー兼ねて読ませて頂いてる次第!

twitter.com

内容を概要だけでざっくりと!

  • 実行環境と基礎
  • XXXXXXでのプロジェクト作成、実行の基礎
  • PhoXXXX の基礎
  • XXXves の基礎

まだ出てないの伏せ字(白目

何がいいって、座学じゃない点。
マジでそのまま打って概要と雰囲気が理解できるのがありがたい。(ゴメン、読み物系技術書は余程理論系でもない限り僕が寝るwww)

でも技術って本来面白いというか、ワクワクするモンだよね。
面白そう、でも知識が浅い、どっから手をつければ良いか分からない。
技術あるあるですわ。

僕も Web はドップリだけど、IoT なんか殆どやってないし、関数型はやってても静的型付けしか経験ないし。
浅くても取っ掛かりとして十分な本てとってもありがたいよね。

Framework 離れて 1 年

何があったかと言うと、ひさびさに非Salesforceもくもく会(下)に参加して、1年以上ぶりに Scala+Playframework を弄ろうとして色々どハマりしたという話。

ポートフォリオアプリや個人サービスを開発したい方向けのWeb開発もくもく会&勉強会 - connpass

最近 Playframework 離れてたし久々にやるかーと思って手をつけて色々どハマりして 2 時間食いつぶしてしまったので、反省も兼ねて。

  • 基本的に更新早いフレームワークは 1 年経ったら半分以上別物と思った方が良さそう。
    具体的には evolution のセットアップが変わっていたり、その割にドキュメントの更新が追いついてなくて、エラーの修正をどうすべきか悩んだ。
  • 当時愛用してた scala-activerecord だけど、気づいたら更新止まってて、最後の対応 scala バージョンが 2.12 だったという(Play2.7 は 2.13 なので、単純に参照できない)。 補足すると 2.13 でリビルドしようとしたが、依存ライブラリもまた対応してなかったとかで色々吐いて来たので利用諦め lllorz
  • 細かいフィルタの挙動、設定とかもちょくちょくハマった。

ここから反省すべきは

  1. 更新の早いフレームワークは手を付ける前に、キャッチアップを先にしないと死ねる。
  2. 昨今のフレームワークは学習コストは下がって来ているのだから、落ち着いてドキュメント読め。

ということでいきなり物を作れるなんてタカを括らず、ドキュメントを読めってことで…

Matplotlib の使い方近辺

# Matplotlib と seaborn (ヘルパー)
import matplotlib as mpl
import seaborn as sns

# pyplot
import matplotlib.pyplot as plt

%matplotlib inline

散布図

# ライブラリ
import numpy as np
import numpy.random as random

random.seed(0)

# x,y
x = np.random.randn(30)
y = np.sin(x) + np.random.randn(30)

# グラフ保大きさ指定
plt.figure(figsize=(10, 6))

# 散布図1
plt.plot(x, y, 'o')

f:id:white-azalea:20190821002604p:plain

続きを読む

データサイエンスの育成講座(3)

東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~

東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~

# データ解析、機械学習系
import numpy as np
import numpy.random as random
import scipy as sp
import pandas as pd
from pandas import Series, DataFrame

%precision 3
'%.3f'

Pandas

代表的なデータ構造の Series から。
ラベルとかの情報を含む配列みたいな感じと認識。

データ型

sample_data = pd.Series([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90 ])
print(sample_data)
0     0
1    10
2    20
3    30
4    40
5    50
6    60
7    70
8    80
9    90
dtype: int64
sample_indexed_data = pd.Series(
    [0, 10, 20, 30, 40, 50, 60, 70, 80, 90],
    index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
)
sample_indexed_data
a     0
b    10
c    20
d    30
e    40
f    50
g    60
h    70
i    80
j    90
dtype: int64
続きを読む

データサイエンスの育成講座(2)

東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~

東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~

と、続きでやってる。
jupiter-notebook があればいい。

一応色々端折る為に anaconda で作成。

# データ解析、機械学習系
import numpy as np
import numpy.random as random
import scipy as sp
import pandas as pd
from pandas import Series, DataFrame

# 可視化系
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns

%matplotlib inline
%precision 3
'%.3f'

Scipy

# Library of linear algebra
import scipy.linalg as linalg
matrix = np.array([[1, -1, -1], [-1, 1, -1], [-1, -1, 1]])
print(f'行列式 : {linalg.det(matrix)}')
行列式 : -4.0
inv_matrix = linalg.inv(matrix)
print(f'逆行列 :\n{inv_matrix}')
print(f'Dot積 : \n{ matrix.dot(inv_matrix) }')
逆行列 :
[[ 0.  -0.5 -0.5]
 [-0.5 -0.  -0.5]
 [-0.5 -0.5  0. ]]
Dot積 : 
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
eig_value, eig_vector = linalg.eig(matrix)
print(f'固有値 : \n{eig_value}')
print(f'固有ベクトル : \n{eig_vector}')
固有値 : 
[-1.+0.j  2.+0.j  2.+0.j]
固有ベクトル : 
[[ 0.577 -0.816  0.428]
 [ 0.577  0.408 -0.816]
 [ 0.577  0.408  0.389]]
続きを読む

暫く積んでた本の着手

Kaggle やり始めて撃沈して、ちまちま勉強していたけど、そもそも基礎がなってない気がしてそれっぽい物を探した痕跡。
最近までずっと Salesforce で Trail 祭りしてたからなぁ(汗

東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~

東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~

利用する系のライブラリ

# データ解析、機械学習系
import numpy as np
import numpy.random as random
import scipy as sp
import pandas as pd
from pandas import Series, DataFrame

# 可視化系
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns

%matplotlib inline
%precision 3
'%.3f'

マジックコマンド

jupiter notebook の機能群

  • %run 外部コマンドの実行
  • %cp ファイルのコピー
  • %time 時間の計測
  • %precision numpy 拡張。表示する場合の有効桁数を指定する。
  • %matplotlib Matplotlib 拡張。グラフなどの表示法を設定できる。inline など。
  • %quickref コマンドの一覧表示など

numpy 近辺

# use array.
example_array = np.array([1, 4,  8, 16, 6, 8, 1, 5])

# tab key on after dot(.) to code complete
example_array.dtype
dtype('int64')
続きを読む