Pythonモジュール『pywdcgg』の使い方

# はじめに
pywdcggは、[温室効果ガス世界資料センター（World Data Center for Greenhouse Gas）](https://gaw.kishou.go.jp/jp)から提供されているデータをpythonで読み込み・解析するためにモジュールを作成し、GitHubで公開しました。
[pywdcgg レポジトリ](https://github.com/yuta19971214/pywdcgg)

本記事は、pywdcggのマニュアルとしてまとめていきます。

# 0.インポート
現時点では、PyPIに登録していないため、githubからレポジトリをダウンロードして``sys``を用いてPATHを通すことを推奨いたします。

```python
import sys
sys.path.append("pywdcgg/pywdcgg/")
import pywdcgg as pw
```

# 1.read_file クラス
ファイルの読み込みに関わるクラスです。
初めに、WDCGGからダウンロードした.txtを読み込ませてください。
ここでは、昭和基地におけるメタンの月別データを例として使用します。

```python
import pywdcgg as pw

rdat = pw.read_file("ch4/SYO/monthly/ch4_syo_surface-flask_2_3001-9999_monthly.txt")
```

## 1.1 header_info メソッド
ファイルの基本的な情報を取得します。
現状では、
- site_name（観測地点名）
- latitude（緯度）
- longitude（経度）
- elevation（標高）
- parameter（対象物質）
- start_date（観測データ開始日）
- end_date（観測データ終了日）
- unit（単位）
を対象としています。

```python
rdat = pw.read_file("../data/ch4/SYO/monthly/ch4_syo_surface-flask_2_3001-9999_monthly.txt")
print(rdat.about_info())

# {'site_name': ' Syowa', 'latitude': '-69.0053', 'longitude': '39.5811', 'elevation': '29.1', 'parameter': 'ch4', 'start_date': '1986-04-01T00:00:00Z', 'end_date': '2020-12-01T00:00:00Z', 'unit': 'ppb'}
```
## 1.2 get_value メソッド
ファイルからデータを読み込みます。
### 基本的な使い方

```python
import pywdcgg as pw

rdat = pw.read_file("ch4/SYO/monthly/ch4_syo_surface-flask_2_3001-9999_monthly.txt")
dat = rdat.get_value()
print(dat)
"""
        date site_gaw_id  year  month  day  hour  ...  flask_no  ORG_QCflag  QCflag  instrument  measurement_method  scale
0    1986/04         SYO  1986      4    1     0  ...  -999.999    -999.999       1          -9                  -9      3
1    1986/05         SYO  1986      5    1     0  ...  -999.999    -999.999       1          -9                  -9      3
2    1986/06         SYO  1986      6    1     0  ...  -999.999    -999.999       1          -9                  -9      3
3    1986/07         SYO  1986      7    1     0  ...  -999.999    -999.999       1          -9                  -9      3
4    1986/08         SYO  1986      8    1     0  ...  -999.999    -999.999       1          -9                  -9      3
..       ...         ...   ...    ...  ...   ...  ...       ...         ...     ...         ...                 ...    ...
399  2020/08         SYO  2020      8    1     0  ...  -999.999    -999.999       1          -9                  -9      3
400  2020/09         SYO  2020      9    1     0  ...  -999.999    -999.999       1          -9                  -9      3
401  2020/10         SYO  2020     10    1     0  ...  -999.999    -999.999       1          -9                  -9      3
402  2020/11         SYO  2020     11    1     0  ...  -999.999    -999.999       1          -9                  -9      3
403  2020/12         SYO  2020     12    1     0  ...  -999.999    -999.999       1          -9                  -9      3
"""
```
とすることで、``DataFrame``を出力します。

### YYYY/MM形式のdateカラムを作成し、DataFrameを生成する

```python
import pywdcgg as pw

rdat = pw.read_file("ch4/SYO/monthly/ch4_syo_surface-flask_2_3001-9999_monthly.txt")
dat = rdat.get_value(make_date=True) #defaultでは、False
print(dat)
"""
        date site_gaw_id  year  month  day  hour  ...  flask_no  ORG_QCflag  QCflag  instrument  measurement_method  scale
0    1986/04         SYO  1986      4    1     0  ...  -999.999    -999.999       1          -9                  -9      3
1    1986/05         SYO  1986      5    1     0  ...  -999.999    -999.999       1          -9                  -9      3
2    1986/06         SYO  1986      6    1     0  ...  -999.999    -999.999       1          -9                  -9      3
3    1986/07         SYO  1986      7    1     0  ...  -999.999    -999.999       1          -9                  -9      3
4    1986/08         SYO  1986      8    1     0  ...  -999.999    -999.999       1          -9                  -9      3
..       ...         ...   ...    ...  ...   ...  ...       ...         ...     ...         ...                 ...    ...
399  2020/08         SYO  2020      8    1     0  ...  -999.999    -999.999       1          -9                  -9      3
400  2020/09         SYO  2020      9    1     0  ...  -999.999    -999.999       1          -9                  -9      3
401  2020/10         SYO  2020     10    1     0  ...  -999.999    -999.999       1          -9                  -9      3
402  2020/11         SYO  2020     11    1     0  ...  -999.999    -999.999       1          -9                  -9      3
403  2020/12         SYO  2020     12    1     0  ...  -999.999    -999.999       1          -9                  -9      3
"""
```

### データの期間を限定してDataFrameを生成する
```python
import pywdcgg as pw

rdat = pw.read_file("ch4/SYO/monthly/ch4_syo_surface-flask_2_3001-9999_monthly.txt")
dat = rdat.get_value(syr=2000,fyr=2018) #syr: start year, fyr : final year
print(dat)
"""
    site_gaw_id  year  month  day  hour  minute  ...  flask_no  ORG_QCflag  QCflag  instrument  measurement_method  scale
0           SYO  2000      1    1     0       0  ...  -999.999    -999.999       1          -9                  -9      3
1           SYO  2000      2    1     0       0  ...  -999.999    -999.999       1          -9                  -9      3
2           SYO  2000      3    1     0       0  ...  -999.999    -999.999       1          -9                  -9      3
3           SYO  2000      4    1     0       0  ...  -999.999    -999.999       1          -9                  -9      3
4           SYO  2000      5    1     0       0  ...  -999.999    -999.999       1          -9                  -9      3
..          ...   ...    ...  ...   ...     ...  ...       ...         ...     ...         ...                 ...    ...
223         SYO  2018      8    1     0       0  ...  -999.999    -999.999       1          -9                  -9      3
224         SYO  2018      9    1     0       0  ...  -999.999    -999.999       1          -9                  -9      3
225         SYO  2018     10    1     0       0  ...  -999.999    -999.999       1          -9                  -9      3
226         SYO  2018     11    1     0       0  ...  -999.999    -999.999       1          -9                  -9      3
227         SYO  2018     12    1     0       0  ...  -999.999    -999.999       1          -9                  -9      3
"""
```

# 2. 描画
## 2.1 world_mapメソッド
世界地図に描画するメソッドです。
基本的な使い方は、

```python
import sys
sys.path.append("../../pywdcgg/")
import pywdcgg as pw
import matplotlib.pyplot as plt

lon = 136.6
lat = 36.6

fig,ax = pw.world_map(lon,lat)
plt.show()
```
です。もし、世界地図内に``colorbar``を使用したい場合は、

```python
import sys
sys.path.append("../../pywdcgg/")
import pywdcgg as pw
import matplotlib.pyplot as plt

lon = 136.6
lat = 36.6
data = 10

fig,ax = pw.world_map(lon,lat,data=data)
plt.show()
```
とすることで、下記のように実装できます。

![スクリーンショット 2021-10-20 21.45.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407666/ec497202-301c-9a6f-dc6b-42ce1be1f271.png)

その他のパラメーターについては、以下の通り

```python
world_map(long,
          lat,
          data=None,
          resolution="10m",
          dlon=60,
          dlat=30,
          min_long=-180,
          min_lat=-90,
          max_long=180,
          max_lat=90,
          msize=30,
          cmap="jet",
          vmin=None,
          vmax=None,
         )
```

| Parameter | 説明 |
|:-----------|------------:|
| data       | colorbarに入力したいデータ　(default : None)|
| resolution     | 解像度（詳細は[こちら](http://ty21ky.web.fc2.com/python/map_cartopy/etc/resolution.html)） (default : 10m)     |
| dlon       |図中の経度間隔(default : 60)|
| dlat         | 図中の緯度間隔(default : 30)          |
| min_long       | 図中の最小経度（default : -180）       |
| min_lat    | 図中の最小緯度（default : -90）      | 
| max_long |図中の最大経度（default : 180）|
| max_lat |図中の最大緯度（default : 90）|
| msize |マーカーサイズ）（default : 30）|
| cmap |カラーマップ（詳細は[こちら](https://matplotlib.org/stable/tutorials/colors/colormaps.html)から）(default : jet)|
| vmin |カラーバーの最小値(default : None)|
| vmax |カラーバーの最大値(default : None)|


# 更新日
- 2021.10.03 初版作成
- 2021.10.20 world_mapメソッド追記