Windows11 WSL2 Ubuntu Python Ⅱ
データのスライシング
ここからは、データのスライシングについて説明していきます。
NumPy の ndarray は多次元配列を扱うデータ構造で、スライシングという機能を備えています。
- NumPy ndarray 多次元配列作成
簡単な NumPy の ndarray 多次元配列を作成します。
a = np.arange(20).reshape(4,5)
# 4×5 の ndarray 2次元配列
[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10,11,12,13,14],
[15,16,17,18,19]]
- 1~2行目の 2~3列を抜出す
b = a[1:3, 2:4]
注1) 0行目、0列目があるのを忘れずに!
注2) stop 終点は含まない。
とすれば b は
[[ 7, 8],
[12,13]] - 始点、終点は省略可
0~1行目の 1~最後列を抜出す
c = a[:2, 1:]
とすれば c は
[[1, 2, 3, 4]
[6, 7, 8, 9]] - ラストの1つ前は -1 指定
0~1行目の 1~最後列の1つ前までを抜出す
d = a[:2, 1:-1]
注3) -1 指定は行列の最後を指示 とすれば d は
[[1, 2, 3]
[6, 7, 8]]
最後の行と最後の列を削除
e = a[:-1, :-1]
とすれば e は
[[ 0, 1, 2, 3]
[ 5, 6, 7, 8]
[10,11,12,13]]
最後の行と最後の2列を削除
f = a[:-1, :-2]
とすれば f は
[[ 0, 1, 2]
[ 5, 6, 7]
[10,11,12]]
- -1 指定は曲者
-1 指定は曲者です。
ちなみに
g = a[-1,-1]
は行列の最後尾 19 になります。
CSV データのスライシング
CSV データをスライシングします。
データを準備します。
データファイルは
pandas を使う
で説明した mane_chart_go_1.csv ファイルを使用します。
このファイルは Wimdows OS の
Linux \Ubuntu-22.04 \\wsl.localhost フォルダ
Linux/Ubuntu-22.04/home/yamada /public_html/manep-w/
にありますので、これを Excel で開いてみてください。
mane_chart_go.csv を作成していない方は
mane_chart_go.csv
からでもダウンロードすることができますので上記フォルダに保存してください。
CSV データスライシングファイル作成
CSV データスライシングファイルを作成します。
- ライブラリインポート
必要となるライブラリをインポートします。
pandas, NumPy をインポートします。
import pandas as pd
import numpy as np
- CSV ファイル読込み
CSV ファイルの0行目のヘッダー情報は日本語で書かかれています。
単に読込むと文字化けしますので、文字コードを cp932 と指定し文字化けしないようにします。
xl_df1 = pd.read_csv("public_html/manep-w/mane_chart_go.csv", encoding="cp932")
print(xl_df1) # (100, 11)
- 終値(売り)の抽出
CSV データの中から終値(売り)の値 Close を抽出します。
Close = xl_df11["終値(売り)"].values
print(Close)
とすると 100 個のデータを見ることができます。
[ 91.653 91.833 92.543 92.807 92.87・・・
・・・・・・・・
・・90.210 90.429 90.480 89.736 89.875]
Close のデータ数を再確認します。
Idx = xl_df1.index
print("Idx=", Idx)
[結果]
Idx= RangeIndex(start=0, stop=100, step=1)
0~99 まで100個の index が存在しますので Close のデータ数も100個と再確認されます。 - Close データを25個ずつにスライス
Close データを25個ずつにスライスします。
先頭値は 91.653 91.833 92.543 ・・・ の順とします。
0番目は
n = 0
n_25 = 25
とすると
sl_cl = Close[n:n+n_25] # Close[0:25]
print(sl_cl)
[結果]
[ 91.653 91.833 92.543 92.807 92.870・・・
・・・・・・・・
・・88.14 90.723 90.085 90.876 91.151]
1番目は
sl_cl1 = Close[n+1:n+1+n_25] # Close[1:26]
print(sl_cl1)
[結果]
[ 91.833 92.543 92.807 92.870 92.935・・・
・・・・・・・・
・・90.723 90.085 90.876 91.151 91.146]
となります。 - スライスデータを結合
0番目と1番目のスライスデータを結合します。
np.append(sl_cl, sl_cl1)
結合されたデータは
1×50 の配列になりますので
2×25 の配列に変換します。
sl_cl2 = np.append(sl_cl, sl_cl1).reshape(n+2,n_25)
print(sl_cl2)
[結果][[91.653 91.833 92.543 ... 90.085 90.876 91.151] [91.833 92.543 92.807 ... 90.876 91.151 91.146]]
ここまでで、データのスライシングができるようになりました。
引き続き、すべての CSV データをスライシングして行きます。