Pythonで実行結果を見るためだけのデータを作る

## TL;DR
「この関数実行したらどんな結果になるんだっけ」ってなったとき、いちいち数値をリストに手入力するのではなく簡単に作ってちゃちゃっとやりたい人向けにチートシートを残しておく感じです。

## 数値データ
Pandasはnumpyで生成したデータをSeriesやDataFrameで置き換える。

* 1次元データ

```python
>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
```

* 2次元データ

```python
>>> a, _ = np.meshgrid(np.arange(10), np.arange(10))
>>> a
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

```

表データではなくランダムな白黒画像を生成するなら、`np.random.rand` 関数を作ってreshapeすると良さそうです。

```python
>>> np.random.rand(100).reshape(10, 10)
array([[0.774796  , 0.87727169, 0.36576795, 0.50469211, 0.25789172,
        0.69017293, 0.25696776, 0.25090559, 0.57291167, 0.23066628],
       [0.98300426, 0.06648289, 0.40539189, 0.383686  , 0.99030671,
        0.83012741, 0.83410829, 0.55200417, 0.96819574, 0.93811894],
       [0.49444357, 0.62165331, 0.56127491, 0.34965586, 0.49984877,
        0.88422639, 0.9842448 , 0.43454692, 0.64163615, 0.72424709],
       [0.51560541, 0.4391011 , 0.61277362, 0.89715031, 0.76032436,
        0.27063155, 0.7294889 , 0.29094456, 0.89677951, 0.21043561],
       [0.17653338, 0.5191013 , 0.20541095, 0.74794072, 0.08712815,
        0.74585014, 0.31091941, 0.69339828, 0.20927249, 0.43948904],
       [0.04458876, 0.57161348, 0.76878544, 0.68885513, 0.50999807,
        0.4945861 , 0.10331148, 0.942022  , 0.6317701 , 0.30554326],
       [0.24976951, 0.36515472, 0.91054568, 0.5103681 , 0.1760126 ,
        0.80410172, 0.70540578, 0.16344295, 0.62585884, 0.54398108],
       [0.6846584 , 0.42484942, 0.96947994, 0.12508458, 0.04209544,
        0.52784282, 0.94710571, 0.36539101, 0.07901065, 0.18592639],
       [0.4164739 , 0.18091319, 0.65077899, 0.68002471, 0.49272469,
        0.21213373, 0.79285806, 0.06763555, 0.23837511, 0.20384851],
       [0.8344824 , 0.1613383 , 0.37368633, 0.91715267, 0.59232678,
        0.37751623, 0.70961083, 0.42626601, 0.80279949, 0.10079929]])
```

単純な白黒画像を使うのであれば `np.zeros((10, 10))` や、 `np.ones((10, 10))` があるのでそちらを使うと良さそうです。

## 文字列データ
* 1次元データ

```python
>>> [chr(97 + i) for i in np.arange(26)]
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
```

* 2次元データ

数値データ同様にmeshgridとかすると2次元の文字列データになるけど、使い所はまだよくわかんないです。

### 日付データ
すこーし長くなるけど1行で書ける。長すぎるのが嫌な方は、yearとmonthとdayごとにリストを分けて先に変数に入れてても良さそうです。

```python
>>> ["{:0>4}-{:0>2}-{:0>2}".format(y, m, d) for y, m, d in zip((np.random.rand(10) * 3 + 2015).astype(np.int32), (np.random.rand(10) * 12 + 1).astype(np.int32), (np.random.rand(10) * 31 + 1).astype(np.int32))]
['2016-05-12', '2016-04-15', '2015-08-30', '2017-05-10', '2015-09-08', '2016-11-09', '2016-11-11', '2015-05-03', '2017-05-29', '2015-05-02']
```

* 分けたバージョン(上とやっていることは同じです。)

```python
>>> year_list = (np.random.rand(10) * 3 + 2015).astype(np.int32)
>>> month_list = (np.random.rand(10) * 12 + 1).astype(np.int32)
>>> day_list = (np.random.rand(10) * 31 + 1).astype(np.int32)
>>> ["{:0>4}-{:0>2}-{:0>2}".format(y, m, d) for y, m, d in zip(year_list, month_list, day_list)]
['2017-08-11', '2015-12-09', '2016-12-02', '2016-06-03', '2017-06-19', '2015-06-23', '2016-09-17', '2015-07-18', '2017-03-18', '2016-12-21']
```

`pd.todatetime` 関数などのフォーマットに対応しているので変換して、あの関数この関数適用してみると良さそうです。

## まとめ

簡単にサンプルデータを作る方法をまとめてみました。コピペでそのまま動くはずですので、あの関数どういう挙動したっけとか、自作モジュールの関数用にテスト書きたいってときに役に立てばと。