ためすう

numpy.reshape を使ってみる

2019-08-12

やったこと

配列を新しい形に変えるため、numpy.reshape を使ってみます。

確認環境

$ ipython --version
6.1.0
$ jupyter --version
4.3.0
$ python --version
Python 3.6.2 :: Anaconda custom (64-bit)
import numpy as np
np.__version__

出力結果

'1.16.4'

調査

import numpy as np
a = np.arange(10, 22)
print(a)
print(a.reshape((4, 3)))

出力結果

[10 11 12 13 14 15 16 17 18 19 20 21]
[[10 11 12]
 [13 14 15]
 [16 17 18]
 [19 20 21]]

参考

pandas.DataFrame.dropna で欠損値を削除する

2019-08-11

やったこと

pandas の droopna を使い欠測値をカウントします。

確認環境

$ ipython --version
6.1.0
$ jupyter --version
4.3.0
$ python --version
Python 3.6.2 :: Anaconda custom (64-bit)
pd.__version__

出力結果

'0.20.3'

調査

import pandas as pd
df = pd.DataFrame({'A':[1,2,3,4,5], 'B':[1,2,None,None,5], 'C':[None, None, 3, None, 4]})
print(df.dropna())
print('---')
print(df.dropna(axis=1))

出力結果

   A    B    C
4  5  5.0  4.0
---
   A
0  1
1  2
2  3
3  4
4  5

参考

pandas.DataFrame.isnull で欠損値をカウントする

2019-08-11

やったこと

pandas の isnull を使い欠測値をカウントします。

確認環境

$ ipython --version
6.1.0
$ jupyter --version
4.3.0
$ python --version
Python 3.6.2 :: Anaconda custom (64-bit)
pd.__version__
'0.20.3'

調査

import pandas as pd
df = pd.DataFrame({'A':[1,2,3,4,5], 'B':[1,2,None,None,5], 'C':[None, None, 3, None, 4]})
print(df.isnull().sum())
print('---')
print(df.isnull().sum(axis=1))

出力結果

A    0
B    2
C    3
dtype: int64
0    1
1    1
2    1
3    2
4    0
dtype: int64

参考

Matplotlib を使ってみる

2019-08-10

やったこと

Matplotlib を使って、グラフを描画してみます。

確認環境

$ ipython --version
6.1.0
$ jupyter --version
4.3.0
$ python --version
Python 3.6.2 :: Anaconda custom (64-bit)

調査

import matplotlib.pyplot as plt
%matplotlib inline

x = np.arange(0, 10, 0.1)
y = np.sin(x)
plt.plot(x, y)

%matplotlib inline は、Jupyter Notebook でグラフを表示するようにします。

画像

matplotlib.png

参考

Rails で String#inquiry を使ってみる

2019-08-10

やったこと

Rails の ActiveSupport で拡張されている String#inquiry を使ってみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

調査

実行結果

$ rails c
Running via Spring preloader in process 57768
Loading development environment (Rails 5.2.3)
irb(main):001:0> 'prod'.inquiry.prod?
=> true
irb(main):002:0> 'prod'.inquiry.prodfalse?
=> false

参考

sklearn で TF-IDF

2019-08-09

やったこと

TF-IDF を用いて、文書内の単語の重み付けをします。

確認環境

$ ipython --version
6.1.0
$ jupyter --version
4.3.0
$ python --version
Python 3.6.2 :: Anaconda custom (64-bit)
import sklearn
print(sklearn.__version__)
    0.19.0

調査

TF-IDF とは

TF-IDF とは、term frequency-inverse のことで、

TF (単語の出現頻度) X IDF (逆文書頻度) となります。

$$ tf-idf(t,d) = tf(t, d) * idf(t, d) $$

使ってみる

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
    'This is the first document.',
    'This document is the second document.',
    'And this is the third one.',
    'Is this the first document?',
]
vec = TfidfVectorizer()
X = vec.fit_transform(corpus)
print(vec.get_feature_names())
print(type(X))
print(X.toarray())

出力結果

['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']
<class 'scipy.sparse.csr.csr_matrix'>
[[0.         0.46979139 0.58028582 0.38408524 0.         0.
  0.38408524 0.         0.38408524]
 [0.         0.6876236  0.         0.28108867 0.         0.53864762
  0.28108867 0.         0.28108867]
 [0.51184851 0.         0.         0.26710379 0.51184851 0.
  0.26710379 0.51184851 0.26710379]
 [0.         0.46979139 0.58028582 0.38408524 0.         0.
  0.38408524 0.         0.38408524]]

参考

sklearn の DictVectorizer で one-hot エンコーディングする

2019-08-08

やったこと

カテゴリ特徴を、エンコーディングします。

確認環境

$ ipython --version
6.1.0
$ jupyter --version
4.3.0
$ python --version
Python 3.6.2 :: Anaconda custom (64-bit)
import sklearn
print(sklearn.__version__)
0.19.0

調査

from sklearn.feature_extraction import DictVectorizer
D = [{'name': 'ABC', 'age': 23}, {'name': 'DEF', 'age': 35}, {'name': 'XYZ', 'age': 66}, {'name': 'AAA', 'age': 5}]
v = DictVectorizer(sparse=False)
X = v.fit_transform(D)
print(v.get_feature_names())
print(type(X))
print(X.shape)
print(X)

print('---')

# 疎行列
v2 = DictVectorizer(sparse=True)
X2 = v2.fit_transform(D)
print(X2)
print(v2.get_feature_names())
print(type(X2))
print(X2.shape)
print(X2.toarray())

出力結果

['age', 'name=AAA', 'name=ABC', 'name=DEF', 'name=XYZ']
<class 'numpy.ndarray'>
(4, 5)
[[23.  0.  1.  0.  0.]
 [35.  0.  0.  1.  0.]
 [66.  0.  0.  0.  1.]
 [ 5.  1.  0.  0.  0.]]
---
  (0, 0)	23.0
  (0, 2)	1.0
  (1, 0)	35.0
  (1, 3)	1.0
  (2, 0)	66.0
  (2, 4)	1.0
  (3, 0)	5.0
  (3, 1)	1.0
['age', 'name=AAA', 'name=ABC', 'name=DEF', 'name=XYZ']
<class 'scipy.sparse.csr.csr_matrix'>
(4, 5)
[[23.  0.  1.  0.  0.]
 [35.  0.  0.  1.  0.]
 [66.  0.  0.  0.  1.]
 [ 5.  1.  0.  0.  0.]]

参考

sklearn の CountVectorizer を使う

2019-08-07

やったこと

テキストから単語の数を数えるため、sklearn の CountVectorizer を使ってみます。

確認環境

$ ipython --version
6.1.0
$ jupyter --version
4.3.0
$ python --version
Python 3.6.2 :: Anaconda custom (64-bit)
import sklearn
print(sklearn.__version__)
0.19.0

調査

from sklearn.feature_extraction.text import CountVectorizer
corpus = [
    'This is the first document.',
    'This document is the second document.',
    'And this is the third one.',
    'Is this the first document?',
]
vec = CountVectorizer()
X = vec.fit_transform(corpus)
print(vec.get_feature_names())
print(type(X))
print(X.toarray())

出力結果

['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']
<class 'scipy.sparse.csr.csr_matrix'>
[[0 1 1 1 0 0 1 0 1]
 [0 2 0 1 0 1 1 0 1]
 [1 0 0 1 1 0 1 1 1]
 [0 1 1 1 0 0 1 0 1]]

toarray() は 疎行列 -> 配列に変換します。

参考

numpy の multivariate_normal を使ってみる

2019-08-07

やったこと

Numpy で multivariate_normal を使ってみます。

確認環境

$ ipython --version
6.1.0
$ jupyter --version
4.3.0
$ python --version
Python 3.6.2 :: Anaconda custom (64-bit)
import numpy as np
np.__version__
'1.13.1'

調査

共分散

共分散(きょうぶんさん、英: covariance)は、2組の対応するデータ間での、平均からの偏差の積の平均値である

共分散行列

統計学と確率論において、ベクトルの要素間の共分散の行列である。これは、スカラー値をとる確率変数における分散の概念を、多次元に自然に拡張したものである。

やってみる

import numpy as np
mean = [20, 20]
cov = [[5, 0], [25, 25]]
tmp = np.random.multivariate_normal(mean, cov, 3)
aaa, bbb = tmp.T

print(tmp)
print(tmp.T)
print(aaa)
print(bbb)

出力結果

[[22.00279917 18.80819949]
 [21.19539949 21.82857794]
 [18.6510704  19.32493899]]
[[22.00279917 21.19539949 18.6510704 ]
 [18.80819949 21.82857794 19.32493899]]
[22.00279917 21.19539949 18.6510704 ]
[18.80819949 21.82857794 19.32493899]

参考

numpy の vstack、hstack を使ってみる

2019-08-06

やったこと

Numpy で vstack と hstack を使ってみます。

確認環境

$ ipython --version
6.1.0
$ jupyter --version
4.3.0
$ python --version
Python 3.6.2 :: Anaconda custom (64-bit)
import numpy as np
np.__version__
'1.13.1'

調査

import numpy as np
a = np.array([1, 2, 3])
b = np.array([100, 101, 102])
print(np.vstack((a, b)))
print(np.hstack((a, b)))

出力結果

[[  1   2   3]
 [100 101 102]]
[  1   2   3 100 101 102]

参考