データサイエンティスト協会の「データサイエンス力」スキルチェックをやってみる(No1〜No3)

データサイエンティスト協会の「データサイエンス力」スキルチェックをやってみる(No1〜No3)

人から「データサイエンティスト」と呼ばれる度に、「あんなの飾りです。偉い人はそれがわからんのですよ。」と思ってました。正直、明確な定義があるわけではないので、名乗ることに罪悪感があるんですよね。あなた、本当にデータサイエンティストなの?って方にも多く巡りあってきましたし。そんな自分の罪悪感を察してか「データサイエンス協会」がデータサイエンティストとしての必要なスキルセットをリストにまとめてくれてました。

 

 

このチェックリストをこなせるならば、データサイエンティストと名乗る大義名分ができる(はず)。というわけで、このチェックリストを地道に考察していってみようと思います。

No.1 ☆「1+4+9+16+25+36をΣを用いて表せる」

スキルレベル☆一つの内容です。各項は1、2、…、6の自乗になっているので以下のように表せます。

    \[\sum_{x=1}^6 x^2\]

こんなので良いのかな?

No.2 ☆「y=log_a(x)」の逆関数を説明できる」

逆関数とは、ある関数についてxで解いた関数です。応用としては、一様分布の乱数を変換して任意の確率分布に従う乱数を発生させる**逆変換法**などがあります。また、逆関数が存在するということは解が一意に求まることも意味します。詳しい説明は以下を参照してみてください。

 

 

では、y=log_{a}(x)の逆関数を求めていきます。

    \[y = \log_{a}(x)\]

    \[a^{y} = x\]

    \[x = \exp_{a}(y)\]

xとyを入れ替えて、y =\exp_{a}(x)y=\log_{a}(x)に対する逆関数になる。対数と指数は逆関数の関係ですね。

No.3 ☆「順列や組合せを式 nPr, nCr を用いて計算できる」

どちらも集合からの抽出する組み合わせを計算します。順列は順番を考慮するのに対して、組み合わせは順序を考慮しない点が異なります。

 

nは全体の数で、rnの中から抽出する数になります。順列で全部で10個あるものから2個抽出するパターンは{}_{8} P _{2}と表記します。組合せの場合は、{}_{10} C _{2}という表記になります。

Pythonで順列と組み合わせを計算してみます。scipyを使うと直感的に計算してくれます。

In [7]:
from scipy.special import perm, comb

#10個の中から、4個を抽出する順列の数
print(perm(10,4))

##10個の中から、4個を抽出する組み合わせの数
print(comb(10,4))
5040.0
210.0

具体的な組み合わせのパターンを知りたい場合は、itertoolsを使います。

In [8]:
#順列のパターン
from itertools import permutations
list(permutations(["a","b","c"], 2))
Out[8]:
[('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')]
In [9]:
#組み合わせのパターン
from itertools import combinations
list(combinations(["a","b","c"], 2))
Out[9]:
[('a', 'b'), ('a', 'c'), ('b', 'c')]

Rの場合はprod関数を使います。

In [10]:
import pyper
r = pyper.R(use_pandas='True')
r("n <- 10") 
r("r <- 4")
print(r.get('prod((n-r+1):n)'))
print(r.get('choose(10, 4)'))
5040
210

具体的な順列パターンを知りたい場合はgtoolsを使います。

In [11]:
r("library(gtools)") 
r("result <-  permutations(n=3,r=2,v=c('a','b','c'),repeats.allowed = F)")
print(r.get("result"))
[['a' 'b']
 ['a' 'c']
 ['b' 'a']
 ['b' 'c']
 ['c' 'a']
 ['c' 'b']]

具体的な組み合わせのパターンはcombnを使います。

In [12]:
r("result <- combn(x=c('a','b','c'),m=2)")
print(r.get("result"))
[['a' 'a' 'b']
 ['b' 'c' 'c']]

縦に組み合わせのパターンが出力されます。

感想

取り敢えず、最初ということで張り切って3つを記事にしてみました。「説明」ってどこまで説明するんだろう?という読解力の方で苦戦しました。。。なんか、3つとか一気にやると記事内容が分散するので、今後は1つずつを記事にしていこうかと思います。「標準正規分布の分散と平均がいくつかわかるか」って記事にするまでもないものもあるみたいだけど、変換方法など載せて行こうと思います。

Tipsカテゴリの最新記事