2019年2月17日日曜日

[Python] PyMC3のインストール

macOSにPyMC3をインストールした際のメモです.開発はAnaconda > Jupyter Notebookで行なっているので,ターミナルから以下のように入力します.

$ conda install PyMC3

すると,以下のようにインストールが始まります.

Collecting package metadata: done
Solving environment: - 
The environment is inconsistent, please check the package plan carefully
The following packages are causing the inconsistency:

  - defaults/osx-64::anaconda==5.3.1=py37_0
done

## Package Plan ##

  environment location: /Users/hide/anaconda3

  added / updated specs:
    - pymc3


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    clang-4.0.1                |       h662ec87_0        73.7 MB
    clangxx_osx-64-4.0.1       |      h22b1bf0_11           7 KB
    ------------------------------------------------------------
                                           Total:        73.7 MB

The following NEW packages will be INSTALLED:

  cctools            pkgs/main/osx-64::cctools-895-h7512d6f_0
  clang              pkgs/main/osx-64::clang-4.0.1-h662ec87_0
  clang_osx-64       pkgs/main/osx-64::clang_osx-64-4.0.1-h1ce6c1d_11
  clangxx            pkgs/main/osx-64::clangxx-4.0.1-hc9b4283_0
  clangxx_osx-64     pkgs/main/osx-64::clangxx_osx-64-4.0.1-h22b1bf0_11
  compiler-rt        pkgs/main/osx-64::compiler-rt-4.0.1-h5487866_0
  joblib             pkgs/main/osx-64::joblib-0.12.5-py36_0
  ld64               pkgs/main/osx-64::ld64-274.2-h7c2db76_0
  llvm               pkgs/main/osx-64::llvm-4.0.1-hc748206_0
  llvm-lto-tapi      pkgs/main/osx-64::llvm-lto-tapi-4.0.1-h6701bc3_0
  pymc3              pkgs/main/osx-64::pymc3-3.6-py36_0
  theano             pkgs/main/osx-64::theano-1.0.3-py36h04f5b5a_0


Proceed ([y]/n)? y


Downloading and Extracting Packages
clangxx_osx-64-4.0.1 | 7 KB      | ############################################## | 100% 
clang-4.0.1          | 73.7 MB   | ############################################## | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

インストールが完了した後に,Anaconda NavigatorのEnviromentで確認するとPyMC3がインストールされています.

2019年2月16日土曜日

[macOS] Python3のインストール

macOSをMojevaにアップデートした際に,Python3をインストールしていなかったので,Python3のインストールに関するメモです.

Homebrew,Xcode(Command Line Tool)がインストールされている前提です.
ターミナルから,以下のコマンドを実行します.
$ brew install python3

するとインストールが始まります.Python3は/usr/local/bin/python3にインストールされます.

インストールが終わった段階で,ターミナルから以下のコマンドを実行します.
$ python

すると,
Python 2.7.10 (default, Feb 22 2019, 21:17:52) 
[GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
となり,相変わらずPython2が立ち上がります.

しかし,以下のコマンドを実行するとPython3が立ち上がります.
$ python3
Python 3.7.3 (default, Mar 27 2019, 09:23:15) 
[Clang 10.0.1 (clang-1001.0.46.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

2019年2月15日金曜日

[macOS] Mojevaで日本語環境のTeXShopを使う

macOS Mojeva にアップデートした際にTeXShopのコンパイルが通らなくなったので,その際の対策のメモです.

以下,全てターミナルから実行します.

まずは,リポジトリを最新版にアップデートします.
$ sudo tlmgr update --self --all
Password:

続いて,ヒラギノフォント系のダウンロードを行います.
$ sudo tlmgr repository add http://contrib.texlive.info/current tlcontrib
Password:
$ sudo tlmgr pinning add tlcontrib '*'
$ sudo tlmgr install japanese-otf-nonfree japanese-otf-uptex-nonfree ptex-fontmaps-macos cjk-gs-integrate-macos
$ sudo cjk-gs-integrate --link-texmf --cleanup --force
$ sudo cjk-gs-integrate-macos --link-texmf --force
$ sudo mktexlsr
$ sudo kanji-config-updmap-sys --jis2004 hiragino-highsierra-pron

最後にTeXShop関係の設定を行います.
$ sudo defaults write TeXShop FixLineNumberScroll NO
$ sudo defaults write TeXShop SourceScrollElasticity NO
$ sudo defaults write TeXShop FixPreviewBlur YES

2019年2月14日木曜日

[Mac] ターミナルからゴミ箱を強制的に空にする

macOSのゴミ箱の中を空にしようとした時に,
ファイルがシステムで使用中
などのエラー表示が出てゴミ箱を空にできない場合は,ターミナルから削除することができます.

以下のように,ターミナルにコマンドを入力します.
-rf の後にはスペースが入ります.また,***には削除したいフォルダ,またはファイルを選択して,ターミナル内にドラッグ&ドロップすれば,それらのアドレスが入ります.

パスワードを要求されるので,ログインパスワードを入力します.
$ sudo rm -rf ***
Password:

2019年2月1日金曜日

[Python] pandasの関数read_csv()(read_table())

csvファイルをpandas.DataFrameとして読み込むには,pandasの関数read_csv(),もしくはread_table()を使います.

read_csvとread_tableの違い
pandasの関数pd.read_csv()とpd.read_table()は,デフォルトの区切り文字が違うだけで中身は同じです.

  • read_csv()は区切り文字がカンマ(, )
  • read_table()は区切り文字がタブ(\t)

csvファイル(カンマ区切り)を読み込むときはread_csv()を使用して,tsvファイル(タブ区切り)を読み込むときはread_table()を用います.
また,カンマでもタブでもない場合は,引数(sepかdelimiter)で区切り文字を設定することが可能です.なお,以下の説明ではpd.read_csv()について説明していますが,pd.read_table()でも同様の操作が可能です,
----------
headerがないcsvを読み込むとき

        import pandas as pd
        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv', header = 0)

上記の例の「変数名」はデータを格納する変数名を指しているので,任意です.
headerの行番号を指定する命令.デフォルトはheader=0なので、最初の行がheaderの場合は省略しても同じ結果となる.header=Noneとするとpandasが列名を割り当ててくれる.
例えば,2行がヘッダーの場合は,header = 2 と指定すると3行目からデータが読み込まれて,1, 2行は無視される.
----------
indexがあるcsvを読み込むとき

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv', index_col=0)

indexとして使いたい列の列番号をindex_col=0のように指定します.
----------
列を指定して読み込むとき

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv', header=None, usecols=[a, b])

特定の列だけを読み込む場合には,引数usecolsを使います.usecolsの引数(カッコ内)で読み込む列番号をリストで指定します.一列だけの場合もリストを使います.上記の例では,a列とb列を抜き出すことになります(a, bには0を含む自然数が入ります).
----------
列番号ではなく列名で指定するとき

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv', header = None, usecols = ['c', 'd'])

ただし,これは列名がある時(上記の例ではc, dと言う名前の列がある前提)にしか用いることができません.
index_colと合わせて使う場合はindex_colで指定する列もusecolsで指定しておく必要があります.

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv', 
                               index_col = e, usecols = [f, g, h])

この例では,インデックスはe列(大体これは'0'になることが多いと思いますが)で,f, g, h列を抜き出しています.
----------
特定の列を除外して読み込むとき

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv',
                                usecols = lambda i: i is not 'j')

無名関数(ラムダ式)を使うと便利です.特に列数が多いファイルから少数の列を除外して読み込みたいたい場合は,読み込む列番号を大量に指定するよりも手間が省けます.
----------
特定の行をスキップして読み込むとき

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv', 
                                header = None, skiprows = k)

スキップする行を指定するには,引数skiprowsを使います.
skiprowsに0を含む自然数を渡すと(上記の例では k),ファイルの先頭からスキップする行数を省いて読み込みます.

また,スキップする行番号をリストで指定することも可能です.usecolsと違うのはスキップする行を指定する点です(読み込む行ではない).以下の例ではl行とm行をスキップする命令を行なっています.

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv',
                                 header=None, skiprows=[l, m])

なお,一行だけの場合も,以下のようにリストを使います.以下の例では,n行だけをスキップさせています.
        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv',
                                 header=None, skiprows=[n])
----------
特定の行だけを読み込む場合
無名関数(ラムダ式)を使用します.当然,行数が多いファイルから特定行だけを読み込みたい場合はスキップする行番号を指定するより手間が減ります).

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv', 
                                 header=None, skiprows=lambda o: o not in [p, q])

なお,headerがあるファイルの場合は,header行も考慮する必要があります.
----------
ファイルの末尾をスキップする場合
引数skipfooterを使って,スキップする行数を整数で指定する。

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv',
                                  header = None, skipfooter = r, engine = 'python')

なお,末尾のengine='python'は,警告対策です.
----------
最初の数行だけを読み込む場合
引数nrowsを使って,データの一部分を確認することも可能です.下記の例では最初のs行を確認する命令となっています.

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv',
                                  header = None, nrows = s)