np,pandasまとめ

Numpy,pandasまとめ


タプル
固定長で変更不可能
list関数によりリストに変更できる
```taple.py
    tup = 1,2,3
    tup = ('aa','bb','cc')
    list1 = list(tup)
    list1
    #[aa,bb,cc]

    list1.append('dd')
    #['aa','bb','cc','dd']
    list1.insert(1,'xx')
    #['aa','xx','bb','cc','dd']
    list1.pop(0)
    #['xx','bb','cc','dd']

    xx in list1
    #True
    xx not list1
    #False

    list1.extend(['ee','ff'])
    #['xx','bb','cc','dd','ee','ff'] 
    #リスト連結するとき
    everything = []    
    for chunk in list1:
        everything.extend(chunk)
```
スライシング

```seq.py
    seq = [7,2,1,5,8]

    seq[1:4]
    #[2,1,5]
    seq[:3]
    #[7,2,1]
    seq[3:]
    #[5.8]
    seq[::2]
    #[7,1,8]
    seq[::-1]
    #[8,5,1,2,7]
```
enumerate,zip 関数
```emu.py
    list = ['aa','bb','cc']
    mapping = {} #ディクショナリ宣言
    for i ,v in enumerate(list):
       mapping[v] = i;
    mapping 
    #['aa':0,'bb':1,'cc':2]

    #zip関数　複数のリストからタプルのリストを組み上げる
    list1 = ['aa','bb','cc']
    list2 = ['dd','ee','ff']
    list(zip(list1,list2))
    #[('aa','dd'),('bb','ee'),('cc','ff')]
    for i (a,b) in enumerate(zip(list1,list2)):
        print('{0}: {1}, {2}'.format(i,a,b))
    #0:aa,dd
    #1:bb,ee
    #2:cc,ff
```
enumerateによってiに繰り返しの回数が格納される

```dic.py 
    dict = {'a':'value','b':[1,2,3]}
    dict[5] = 'insert'
    dict
    #{'a':'value','b':[1,2,3],5:'insert'}
    dict[b]
    #[1,2,3]
    'b' in dict
    #True

    #keys関数
    list(dict.keys())
    #['a','b',5]
    list(dict.values())
    #['value',[1,2,3],'insert']
    list.update('b':[4,5,6],'c':9)
    #['a':'value','b':[4,5,6],5:'insert','c':9]

    #シーケンスからディクショナリ作る
    mapping = {}
    for key value in zip(key,value)
        mapping[key] = value
```
内包表記
```.py
    tuples = [(1,2,3),(4,5,6),(7,8,9)]
    flat = []
       for tmp in tuples:
           for x in tup:
               if(x > 5):
                   flat.append(x)
    #[1,2,3,4,5,6,7,8,9]
    
    #内包表記
    flat = [x for tmp in tuples for x in tmp if x > 5]
    #[6,7,8,9]
```
関数
```.py
    def func():
        a = 1;
        b = 2;
        c = 3;
        return a,b,c
    a,b,c = func()
    #aに1bに2cに3入る
    value = func()
    value
    #(1,2,3)

    ラムダ関数
    def apply(list,fun)
        [fun(x) for x in list]
    ints = [4,3,5,1]
    val = apply(ints,lambda x: x*2)
    #[8,6,10,2]

    dict((i,i**2) for i in range(4))
    {'0'0:,'1'1:,'2':4,'3':9}

```

ここまでは基礎の話
ここからはNumpyの内容を書きます

```np.py
    import numpy as np
    data = np.random.randn(2,3)
    data * 10
    data + data
    data.shape
    data.dtype
```
ndarrayに対する算術
adarrayはpythonにおける高速で大規模なデータ処理を提供する
npオブジェクト作成するのに一番簡単な方法はNumpyのarray関数を用いる方法

```np.py
    data = [0,1,2,3,4,5,6]
    ar1 = np.array(data)
    ar1
    #array([0,1,2,3,4,5,6])
    ar2 = ar1(3:6)
    ar2
    #3,4,5
    ar2[:] = 9
    ar1 
    #array([0,1,2,9,9,9,6])

```
最後のar1の結果が9,9,9に変更されているのが確認できる
これはnpではコピーでなく、ビューとして扱われる
コピーしたい場合はar2 = ar1[3:6].copy()　とする

行列について
```.py
    ar1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
    np.array([[1,2,3],
              [4,5,6],
              [7,8,9]])
    
```
行列の次元の見方としては[]の枠を捉え、,で区切られるたびに次元を数える

配列を参照で渡す
```.py
    names = np.array(['aa','bb','cc'])
    names == 'bb'
    #array([False,True,False])
    data[names == 'bb']
    #対応する行のみ表示される
    data[:,names == 'bb']
    対応する列のみ表示される
```

続いてpandas の内容
```.py
    
    
```

```.py
    
    
```