# 楽に入力したい

コード中に楽にデータを入力したいときってあるじゃないですか。

```import yaml
- [V1, A series, Func A, Yes]
- [V1, A series, Func B, No]
- [V1, B series, Func A, No]
- [V1, B series, Func B, Yes]
- [V2, A series, Func A, Yes]
- [V2, A series, Func B, Yes]
- [V2, B series, Func A, Yes]
- [V2, B series, Func B, Yes]
- [V3, A series, Func A, Yes]
- [V3, A series, Func B, Yes]
- [V3, B series, Func A, Yes]
- [V3, B series, Func B, Yes]
''')
```

これで配列になるし、

```In [1]: y

Out[1]:
[['V1', 'A series', 'Func A', True],
['V1', 'A series', 'Func B', False],
['V1', 'B series', 'Func A', False],
['V1', 'B series', 'Func B', True],
['V2', 'A series', 'Func A', True],
['V2', 'A series', 'Func B', True],
['V2', 'B series', 'Func A', True],
['V2', 'B series', 'Func B', True],
['V3', 'A series', 'Func A', True],
['V3', 'A series', 'Func B', True],
['V3', 'B series', 'Func A', True],
['V3', 'B series', 'Func B', True]]
```

これでpandasに流し込める。

```In [2]: import pandas as pd
In [3]: df = pd.DataFrame(y, columns=['ver', 'series', 'func', 'is_supported'])
In [4]: df

Out[4]:
ver    series    func  is_supported
0   V1  A series  Func A          True
1   V1  A series  Func B         False
2   V1  B series  Func A         False
3   V1  B series  Func B          True
4   V2  A series  Func A          True
5   V2  A series  Func B          True
6   V2  B series  Func A          True
7   V2  B series  Func B          True
8   V3  A series  Func A          True
9   V3  A series  Func B          True
10  V3  B series  Func A          True
11  V3  B series  Func B          True
```

### 2018年11月14日追記

pandasに流し込む場合は、columnsも一緒にyamlで設定して流し込んだほうが楽でしたので、

```import yaml
import pandas as pd
- [ver, series, func, is_supported]
- [V1, A series, Func A, Yes]
- [V1, A series, Func B, No]
- [V1, B series, Func A, No]
- [V1, B series, Func B, Yes]
- [V2, A series, Func A, Yes]
- [V2, A series, Func B, Yes]
- [V2, B series, Func A, Yes]
- [V2, B series, Func B, Yes]
- [V3, A series, Func A, Yes]
- [V3, A series, Func B, Yes]
- [V3, B series, Func A, Yes]
- [V3, B series, Func B, Yes]
''')

df = pd.DataFrame(y[1:], columns=y[0])
```

# 日報からグラフを作る

やってみました。

```import yaml

Aさん: [1, 製品A]
Bさん: [1, 製品B]
Cさん: [3, 製品C]

テスト:
Dさん: [1, 製品A]
Eさん: [1, 製品A]
Fさん: [2, 製品D]
Cさん: [3, 静的コード分析]

Hさん: [1, ]

ドキュメント:
Cさん: [3, ]
Fさん: [1,  ]
Iさん: [1,  ]

''')
```

dictionaryと配列のネストを作って、

```In [3]: y

Out[3]:
{'テスト': {'Cさん': [3, '静的コード分析'],
'Dさん': [1, '製品A'],
'Eさん': [1, '製品A'],
'Fさん': [2, '製品D']},
'ドキュメント': {'Cさん': [3], 'Fさん': [1], 'Iさん': [1]},
'環境構築': {'Hさん': [1]},
'開発': {'Aさん': [1, '製品A'], 'Bさん': [1, '製品B'], 'Cさん': [3, '製品C']}}
```

データリストに変換して、

```In [4]: import pandas as pd
In [5]: data = []
...: for g_k, g_v in y.items():
...:     for k, v in g_v.items():
...:         tmp = []
...:         tmp.extend([g_k, k])
...:         try:
...:             tmp.extend([1/v[0], v[1]])
...:         except:
...:             tmp.extend([1/v[0], ''])
...:         data.append(tmp)
...: df = pd.DataFrame(data, columns=['group', 'name', 'effort', 'content'])
In [6]: df

Out[6]:
group name    effort  content
0     環境構築  Hさん  1.000000
1       開発  Cさん  0.333333      製品C
2       開発  Bさん  1.000000      製品B
3       開発  Aさん  1.000000      製品A
4      テスト  Cさん  0.333333  静的コード分析
5      テスト  Dさん  1.000000      製品A
6      テスト  Eさん  1.000000      製品A
7      テスト  Fさん  0.500000      製品D
8   ドキュメント  Cさん  0.333333
9   ドキュメント  Iさん  1.000000
10  ドキュメント  Fさん  1.000000
```

pivotテーブルで集計して、

```In [7]: df_pivot = df.pivot_table(index='group', values='effort', aggfunc='sum')
In [8]: df_pivot

Out[8]:
effort
group
テスト     2.833333
ドキュメント  2.333333

```

グラフにする。

```In [9]: %matplotlib inline
...: import matplotlib
...: font = {'family' : 'AppleGothic'}
...: matplotlib.rc('font', **font)
...: df_pivot.plot.pie(x=['group'], y='effort', pctdistance=0.85,
...:        textprops={'color': "white", 'weight': "bold"}, autopct='%.0f%%')
```

（グラフは手抜きですみません。。）

macbook 10.12
Python 3.5.1
PyYAML 3.12
pandas 0.22.0
ipython -V 6.2.1