scikitlearnはnumpyしか受け付けないので、pandasでデータ加工した後numpy配列に変換する必要があるし、標準python、numpy、pandasは機能が重複していて混乱するので、まずは基礎の基礎をまとめる。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# インポート
import numpy as np
import scipy as py
import pandas as pd
import itertools as it
'''
作成
'''
# リスト作成
list_value = [10,11,12]
list_value
Out[374]: [10, 11, 12]
# タプル作成
tuple_value = (10,11,12)
tuple_value
Out[375]: (10, 11, 12)
# ディクショナリ作成
dict_value = {0:10,1:11,2:12}
dict_value
Out[376]: {0: 10, 1: 11, 2: 12}
# セット作成
set_value = {10,11,12}
set_value
Out[377]: {10, 11, 12}
# numpy配列作成
ndarray_value = np.array([10,11,12], dtype=np.int32)
ndarray_value
Out[378]: array([10, 11, 12], dtype=int32)
# pandasシリーズ作成
series_value = pd.Series({0:10,1:11,2:12})
series_value
Out[379]:
0 10
1 11
2 12
dtype: int64
# pandasデータフレーム作成
dataframe_value = pd.DataFrame({'seq':[10,11,12]})
dataframe_value
Out[380]:
seq
0 10
1 11
2 12
'''
型(クラス)
'''
# 整数型(クラス)
type(1)
Out[382]: int
# 少数型(クラス)
type(0.1)
Out[383]: float
# 文字列型(クラス)
type('abc')
Out[384]: str
# リスト型(クラス)
type(list_value)
Out[385]: list
# タプル型(クラス)
type(tuple_value)
Out[386]: tuple
# ディクショナリ型(クラス)
type(dict_value)
Out[387]: dict
# セット型(クラス)
type(set_value)
Out[388]: set
# numpy配列型(クラス)
type(ndarray_value)
Out[389]: numpy.ndarray
# pandasシリーズ型(クラス)
type(series_value)
Out[390]: pandas.core.series.Series
# pandasデータフレーム型(クラス)
type(dataframe_value)
Out[391]: pandas.core.frame.DataFrame
# numpyのデータ型
ndarray_value.dtype
Out[392]: dtype('int32')
# pandasシリーズのデータ型
series_value.dtype
Out[393]: dtype('int64')
# pandasデータフレームのデータ型 *エラーになる
'''
型変換
'''
# 文字列型から整数型に変換
int('1')
Out[308]: 1
# 文字列型から少数型に変換
float('1')
Out[309]: 1.0
# 整数型から文字列型に変換
str(1)
Out[310]: '1'
###############
# リストへの変換 #
###############
# タプルから
list(tuple_value)
Out[311]: [10, 11, 12]
# ディクショナリから *上手く変換されない
list(dict_value)
Out[312]: [0, 1, 2]
# セットから
list(set_value)
Out[313]: [10, 11, 12]
# numpy配列から
list(ndarray_value)
Out[314]: [10, 11, 12]
# pandasシリースから
list(series_value)
Out[315]: [10, 11, 12]
# pandasデータフレームから
list(dataframe_value.values.flatten())
Out[318]: [10, 11, 12]
# pandasデータフレームから *上手く変換されない
list(dataframe_value)
Out[316]: ['seq']
# pandasデータフレームから *上手く変換されない
list(dataframe_value.values)
Out[317]: [array([10]), array([11]), array([12])]
###############
# タプルへの変換 #
###############
# タプルへの変換はリストと同じ
######################
# ディクショナリへの変換 #
######################
# pandasシリースから *pandasシリース以外の型からディクショナリに変換できない
dict(series_value)
Out[327]: {0: 10, 1: 11, 2: 12}
###############
# セットへの変換 #
###############
# セットへの変換はリストと同じ
###################
# numpy配列への変換 #
###################
# リストから
np.array(list_value)
Out[354]: array([10, 11, 12])
# タプルから
np.array(tuple_value)
Out[355]: array([10, 11, 12])
# ディクショナリから *上手く変換されない
np.array(dict_value)
Out[356]: array({0: 10, 1: 11, 2: 12}, dtype=object)
# セットから *上手く変換されない
np.array(set_value)
Out[357]: array({10, 11, 12}, dtype=object)
# pandasシリーズから
np.array(series_value)
Out[358]: array([10, 11, 12])
# pandasデータフレームから
In [231]: np.array(dataframe_value.values.flatten())
Out[231]: array([10, 11, 12])
# pandasデータフレームから *上手く変換されない
np.array(dataframe_value)
Out[359]:
array([[10],
[11],
[12]])
# pandasデータフレームから *上手く変換されない
np.array(dataframe_value.values)
Out[395]:
array([[10],
[11],
[12]])
#######################
# pandasシリーズへの変換 #
#######################
# リストから
In [232]: pd.Series(list_value)
Out[232]:
0 10
1 11
2 12
dtype: int64
# タプルから
In [233]: pd.Series(tuple_value)
Out[233]:
0 10
1 11
2 12
dtype: int64
# ディクショナリから
In [234]: pd.Series(dict_value)
Out[234]:
0 10
1 11
2 12
dtype: int64
# セットから *エラーになる
# numpy配列から
In [236]: pd.Series(ndarray_value)
Out[236]:
0 10
1 11
2 12
dtype: int32
# pandasデータフレームから
In [239]: pd.Series(dataframe_value.values.flatten())
Out[239]:
0 10
1 11
2 12
dtype: int64
# pandasデータフレームから *上手く変換されない
In [237]: pd.Series(dataframe_value)
Out[237]:
0 (s, e, q)
1 (s, e, q)
2 (s, e, q)
dtype: object
# pandasデータフレームから *エラーになる
############################
# pandasデータフレームへの変換 #
############################
# リストから
In [240]: pd.DataFrame(list_value)
Out[240]:
0
0 10
1 11
2 12
# タプルから *エラーになる
# ディクショナリから *エラーになる
# セットから *エラーになる
# numpy配列から
In [244]: pd.DataFrame(ndarray_value)
Out[244]:
0
0 10
1 11
2 12
# pandasシリーズから
In [245]: pd.DataFrame(series_value)
Out[245]:
0
0 10
1 11
2 12
##########################
# numpy配列のデータ型の変換 #
##########################
# 整数から文字列に変換
In [246]: ndarray_value.astype(np.string_)
Out[246]:
array([b'10', b'11', b'12'],
dtype='|S11')
##############################
# pandasシリーズのデータ型の変換 #
##############################
# 整数から文字列に変換
In [247]: series_value.astype(np.string_)
Out[247]:
0 b'10'
1 b'11'
2 b'12'
dtype: bytes168
In [248]: dataframe_value.astype(np.string_)
Out[248]:
seq
0 b'10'
1 b'11'
2 b'12'
'''
数列の要素数
'''
# リスト
In [252]: len(list_value)
Out[252]: 3
# タプル
In [253]: len(tuple_value)
Out[253]: 3
# ディクショナリ
In [254]: len(dict_value)
Out[254]: 3
# セット
In [255]: len(set_value)
Out[255]: 3
# numpy配列
In [256]: len(ndarray_value)
Out[256]: 3
# pandasシリーズ
In [257]: len(series_value)
Out[257]: 3
# pandasデータフレーム
In [258]: len(dataframe_value)
Out[258]: 3
########
# 次元 #
########
# numpy配列
In [259]: ndarray_value.ndim
Out[259]: 1
In [260]: ndarray_value.shape
Out[260]: (3,)
# pandasシリーズ
In [261]: series_value.ndim
Out[261]: 1
In [262]: series_value.shape
Out[262]: (3,)
# pandasデータフレーム
In [263]: dataframe_value.ndim
Out[263]: 2
In [264]: dataframe_value.shape
Out[264]: (3, 1)
'''
要素の参照
'''
# リスト
In [266]: list_value[0]
Out[266]: 10
In [267]: list_value[-3]
Out[267]: 10
In [268]: list_value[2]
Out[268]: 12
In [269]: list_value[-1]
Out[269]: 12
# タプルはリストと同じ
# ディクショナリ
In [274]: dict_value[0]
Out[274]: 10
In [275]: dict_value[-3] # *エラーになる
In [276]: dict_value[2]
Out[276]: 12
In [277]: dict_value[-1] # *エラーになる
# セットはインデックス参照をサポートしていない
# numpy配列
In [279]: ndarray_value[0]
Out[279]: 10
In [280]: ndarray_value[-3]
Out[280]: 10
In [281]: ndarray_value[2]
Out[281]: 12
In [282]: ndarray_value[-1]
Out[282]: 12
# pandasシリーズ
In [283]: series_value[0]
Out[283]: 10
In [284]: series_value[-3] # *エラーになる
In [285]: series_value[2]
Out[285]: 12
In [286]: series_value[-1] # *エラーになる
# pandasデータフレーム
In [287]: dataframe_value[0] # *エラーになる
'''
総和
'''
# python標準による合計
In [289]: sum(list_value)
Out[289]: 33
In [290]: sum(tuple_value)
Out[290]: 33
In [291]: sum(dict_value)
Out[291]: 3
In [292]: sum(set_value)
Out[292]: 33
In [293]: sum(ndarray_value)
Out[293]: 33
In [294]: sum(series_value)
Out[294]: 33
In [295]: sum(dataframe_value) # *エラーになる
# numpyによる合計
In [296]: np.sum(list_value)
Out[296]: 33
In [297]: np.sum(tuple_value)
Out[297]: 33
In [298]: np.sum(dict_value) # *上手くいかない
Out[298]: {0: 10, 1: 11, 2: 12}
In [299]: np.sum(set_value) # *上手くいかない
Out[299]: {10, 11, 12}
In [300]: np.sum(ndarray_value)
Out[300]: 33
In [301]: np.sum(series_value)
Out[301]: 33
In [302]: np.sum(dataframe_value)
Out[302]:
seq 33
dtype: int64
'''
順列と組み合わせ
'''
# 順列
seq = ('A','B','C')
len(list(it.permutations(seq,2)))
Out[15]: 6
list(it.permutations(seq, 2))
Out[16]: [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
# 組み合わせ
len(list(it.combinations(seq,2)))
Out[18]: 3
list(it.combinations(seq, 2))
Out[19]: [('A', 'B'), ('A', 'C'), ('B', 'C')]
# 直積
seq1 = ('A','B')
seq2 = ('C','D')
len(list(it.product(seq1,seq2)))
Out[23]: 4
list(it.product(seq1,seq2))
Out[24]: [('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D')]