30代が英国でデータサイエンスを学ぶ

特に説明はございません

備忘メモ 欠損値処理

df.count()



欠損ち確認


df.isnull()

でこれでデータフレーム全要素を対象にしてしまう

列方向で見たければ
df.isnull().any(axis=0)

行方向で見たければ
df.isnull().any(axis=1)



欠損ちの個数
df.isnull().sum(axis=0)
df.isnull().sum(axis=1)




df.dropna() 欠損値がひとつでも含まれていたら、行を落とす
df.dropna(how='all') すべての値が欠損していたら、行を落とす
df.fillna(0) 欠損値を0で埋める
df.fillna(method='ffill') 前の値で欠損値を埋める

GMTでの標高データ

https://www.ngdc.noaa.gov/mgg/global/relief/ETOPO1/data/bedrock/grid_registered/netcdf/
ここから取得

備忘:GMTメモ

1.
gmt pscoast -R-179/179/-80/80 -JM16c -W1 > map1.ps

  • Rで描画する経度・緯度を設定
  • Jで描画する図法とサイズを設定

 Mはメルカトル図法
サイズを16に

  • Wで描画する海岸線の太さ

jpgファイルに変換
gmt psconvert map1.ps


f:id:detailed-balance:20180408232950j:plain

→横向きになってしまう

2.
gmt pscoast -R-179/179/-80/80 -JM16c -W1 -P > map2.ps

  • Pで縦方向に設定

gmt psconvert map2.ps


f:id:detailed-balance:20180408233038j:plain
→余白が大きすぎる

3.
gmt pscoast -R-179/179/-80/80 -JM16c -W1 -P > map3.ps

  • Pで縦方向に設定

gmt psconvert map3.ps -A

  • Aで余白を削る

f:id:detailed-balance:20180408233146j:plain


→そもそもサイズが大きい


4.
gmt pscoast -R-179/179/-80/80 -JM16c -W1 -P > map4.ps

  • Pで縦方向に設定

gmt psconvert map4.ps -E100 -A

  • Eで解像度の調整

f:id:detailed-balance:20180408233303j:plain



.
5.
海岸線の精度を調整
gmt pscoast -R-179/179/-80/80 -JM16c -W1 -P -Df > mapf.ps
gmt psconvert mapf.ps -E36 -A
f:id:detailed-balance:20180408234216j:plain

gmt pscoast -R-179/179/-80/80 -JM16c -W1 -P -Dh > maph.ps
gmt psconvert maph.ps -E36 -A
f:id:detailed-balance:20180408234225j:plain

gmt pscoast -R-179/179/-80/80 -JM16c -W1 -P -Di > mapi.ps
gmt psconvert mapi.ps -E36 -A
f:id:detailed-balance:20180408234243j:plain

gmt pscoast -R-179/179/-80/80 -JM16c -W1 -P -Dl > mapl.ps
gmt psconvert mapl.ps -E36 -A
f:id:detailed-balance:20180408234302j:plain

gmt pscoast -R-179/179/-80/80 -JM16c -W1 -P -Dc > mapc.ps
gmt psconvert mapc.ps -E36 -A
f:id:detailed-balance:20180408234317j:plain

  • Dで海岸線の精度を調整

f : full
h : high
i : intermediate
l : low
c : crude




6.
世界地図は広すぎるので、イギリスに限定して描画
gmt pscoast -R-12/2/49/60 -JM16c -W1 -P -Di > map6.ps
gmt psconvert map6.ps -E36 -A
f:id:detailed-balance:20180408235626j:plain


7.
陸地を塗る
gmt pscoast -R-12/2/49/60 -JM16c -W1 -P -Di -GForestGreen > map7.ps
gmt psconvert map7.ps -E36 -A

  • Gで陸地の色を設定

f:id:detailed-balance:20180409001133j:plain


8.
海の色を塗る
gmt pscoast -R-12/2/49/60 -JM16c -W1 -P -Di -GForestGreen -SLightBlue > map8.ps
gmt psconvert map8.ps -E36 -A

  • Sで陸地の色を設定

f:id:detailed-balance:20180409001151j:plain


9.
国境線を入れる
gmt pscoast -R-12/2/49/60 -JM16c -W1 -P -Di -GForestGreen -SLightBlue -N1 > map9.ps
gmt psconvert map9.ps -E36 -A

  • Nで国境線のオプション設定

1 = National boundaries
2 = State boundaries within the Americas
3 = Marine boundaries
a = All boundaries (1-3)

f:id:detailed-balance:20180409002113j:plain


10.
細かな構造を省略する
gmt pscoast -R-12/2/49/60 -JM16c -W1 -P -Di -GForestGreen -SLightBlue -N1 -A1000 > map10.ps
gmt psconvert map10.ps -E36 -A

  • Aで●km未満の構造を省略

f:id:detailed-balance:20180409003434j:plain



11.
軸・目盛り・グリッドを入れる
gmt pscoast -R-12/2/49/60 -JM16c -W1 -P -Di -GForestGreen -SLightBlue -N1 -A1000 -Ba5f5g5 > map11.ps
gmt psconvert map11.ps -E36 -A

  • Bで枠・目盛り・グリッドを設定

a : 目盛り
f : 枠
g : グリッド

f:id:detailed-balance:20180409004306j:plain



12.
解像度を下げたことによる文字の粗さを修正
gmt pscoast -R-12/2/49/60 -JM16c -W1 -P -Di -GForestGreen -SLightBlue -N1 -A1000 -Ba5f5g5 > map12.ps
gmt psconvert map12.ps -E36 -A -Qt

  • Qtで文字の粗さを修正

f:id:detailed-balance:20180409010121j:plain


13.
解像度を下げたことによる画像の粗さを修正
gmt pscoast -R-12/2/49/60 -JM16c -W1 -P -Di -GForestGreen -SLightBlue -N1 -A1000 -Ba5f5g5 > map13.ps
gmt psconvert map13.ps -E36 -A -Qt -Qg

  • Qgで画像の粗さを修正

f:id:detailed-balance:20180409010442j:plain



14.
表題をつける
gmt pscoast -R-12/2/49/60 -JM16c -W1 -P -Di -GForestGreen -SLightBlue -N1 -A1000 -Ba5f5g5:."Fig1":> map14.ps
gmt psconvert map14.ps -E36 -A -Qt -Qg

."タイトル"
で表題をつける

f:id:detailed-balance:20180409012106j:plain


15.
河川を描画する
gmt pscoast -R-12/2/49/60 -JM16c -W1 -P -Di -GForestGreen -SLightBlue -N1 -A1000 -Ba5f5g5:."Fig1": -Ir > map15.ps
gmt psconvert map15.ps -E36 -A -Qt -Qg

1 = Permanent major rivers
2 = Additional major rivers
3 = Additional rivers
4 = Minor rivers
5 = Intermittent rivers - major
6 = Intermittent rivers - additional
7 = Intermittent rivers - minor
8 = Major canals
9 = Minor canals
10 = Irrigation canals
a = All rivers and canals (1-10)
r = All permanent rivers (1-4)
i = All intermittent rivers (5-7)
c = All canals (8-10)


f:id:detailed-balance:20180409015551j:plain


16.
スケールの設置
gmt pscoast -R-12/2/49/60 -JM16c -W1 -P -Di -GForestGreen -SLightBlue -N1 -A1000 -Ba5f5g5:."Fig1": -Ir -Lf0/48/48/250 > map16.ps
gmt psconvert map16.ps -E36 -A -Qt -Qg

  • Lx/y1/y2/l

x :スケール位置の経度
y1:スケール位置の緯度
y2:スケールの距離を計算する緯度
l :スケールの幅


f:id:detailed-balance:20180409015611j:plain


17.
図中にシンボルを描画
ロンドンに星マークを、グラスゴーに丸マーク

gmt pscoast -R-12/2/49/60 -JM16c -W1 -P -Di -GForestGreen -SLightBlue -N1 -A1000 -Ba5f5g5:."Fig1": -Ir -Lf0/48/48/250 -K > map18.ps
gmt psxy london.txt -JM16c -R-12/2/49/60 -Sa1 -Gred -O -K >> map18.ps
gmt psxy glasgow.txt -JM16c -R-12/2/49/60 -Sc1 -Gblue -O >> map18.ps
gmt psconvert map18.ps -E36 -A -Qt -Qg

  • K:作製した図にさらに追記する場合に記載
  • O:すでにある図に追記する場合に記載

london.txtにロンドンの経度・緯度を記載
glasgow.txtにグラスゴーの経度・緯度を記載

  • Sa1:星マークでサイズ1
  • Sc1:丸マークでサイズ1

f:id:detailed-balance:20180410224605j:plain

pythonでデータ読んだら最初にやること

Rばかりいじっていたら忘れてしまうので



df.shape


df.info()


df.describe()


df.head()
df.tail()

テスト用csv

毎回コード確認ようにcsvを作るのも面倒なので、

import numpy as np
import pandas as pd
a = np.arange(100)
b = a.reshape(10,10)
c = pd.DataFrame(b)
c.to_csv("testcsv.csv")

これでできるcsvが、
,0,1,2,3,4,5,6,7,8,9
0,0,1,2,3,4,5,6,7,8,9
1,10,11,12,13,14,15,16,17,18,19
2,20,21,22,23,24,25,26,27,28,29
3,30,31,32,33,34,35,36,37,38,39
4,40,41,42,43,44,45,46,47,48,49
5,50,51,52,53,54,55,56,57,58,59
6,60,61,62,63,64,65,66,67,68,69
7,70,71,72,73,74,75,76,77,78,79
8,80,81,82,83,84,85,86,87,88,89
9,90,91,92,93,94,95,96,97,98,99

備忘メモ:python pandas でピボットテーブル

import pandas as pd
df = pd.DataFrame([['case1', 'type1', 1],
['case1', 'type1', 2],
['case1', 'type2', 3],
['case2', 'type1', 4],
['case2', 'type3', 5],
['case2', 'type3', 6],
['case3', 'type2', 7],
['case3', 'type3', 8]])
df.columns=['case', 'type', 'value']

これでdfをピボットテーブルにする
df.pivot_table(index=['case'], columns=['type'], values='value', aggfunc='sum')



NaNを0にしたければ
fill_value=0
を追加
df.pivot_table(index=['case'], columns=['type'], values='value', fill_value=0, aggfunc='sum')

mac port で GMTをインストール

sudo port install gdal +curl +geos +hdf5 +netcdf
これで
Continue? [Y/n]:
と聞かれるので
y
を入力して
しばらく待つ

次に
sudo port install gmt5
を実行して
Continue? [Y/n]:
と聞かれるので、
y
を入力して
しばらく待つ

かなり時間がかかるけれど、これでできる