Category Archives: Python

Anacondaでjupyter note起動時にimportなどを設定する。

Anaconda で jupyter noteを起動した時に、ipythonみたいに起動時に

c.InteractiveShellApp.exec_lines = [
  'import matplotlib.pyplot as plt',
  'import pandas as pd',
  'import numpy as np',
]

とかってしておきたいな、と思いました。

私の場合、ipython用に上記ファイルを作成してあったので、そのプロファイルを起動時に読み込むだけでOKでした。

$ vim /usr/local/share/jupyter/kernels/python3/kernel.json

{
 "argv": [
  "python",
  "-m",
  "ipykernel_launcher",
  "--profile=profile_default",
  "-f",
  "{connection_file}"
 ],
 "display_name": "Python 3",
 "language": "python"
}

kernel.jsonのargvに使うprofiieを指定します。

 

macにAnacondaを入れたのに conda は動かないし、python2が走る。

Anaconda、まるっと環境が入ってて楽そうだじゃないですか。で、macにpkgでどんと入れたんです。

でも conda とやらは動かないし、python2が走る。

そんな方、いませんか?

ただanacondaへのpathが通ってないだけでした(笑)

インストールの最後に教えてほしいですよね。ドキュメント見ずに言ってみる・・

export PATH=~/anaconda3/bin:$PATH

私はzsh派なので上記を.zshrcに入れて無事もろもろ動きました。

 

ipythonのログを自動で取っておく

ログだけ見直したら何やっていたか思い出す。そんなことが多いです。

ipythonのログを自動で取っておく方法ですが、ログファイルを一々指定するの面倒だし、保存場所は指定したいしといことで、下記を参考にしました。

~/.ipython/profile_default/startup/01-log-everything.py

に、

 
from time import strftime
import os.path

ip = get_ipython()

ldir = <ログ保存先フォルダ>
fname = strftime('%Y-%m-%d-%H-%M-%S') + ".py"
filename = os.path.join(ldir, fname)

ip.run_line_magic('logstart', '-o %s append' % filename)

一日毎に取るのがよいかどうかは人によりけりだと思いますが。
ありがたいです。

Pythonによるデータ分析入門:p.28

p28のDataFrame.read_tableが動かないんですよ。

p28
修正前
users = pd.read_table(‘pydata-book/datasets/movielens/users.dat’, sep=’::’, header=None, names=unames)
修正後
users = pd.read_table(‘pydata-book/datasets/movielens/users.dat’, sep=’::’, header=None, names=unames, engine=’python’)

Pythonによるデータ分析入門:メモ – 競プロ記録

神。新しい版なら直ってるんだろか。

pandasでDataFrameをjoin

pandasでDataFrameをjoinなんて簡単にできるだろ、と思ってたら超簡単でした。

In [1]: pd.merge(df1, df2, left_on=”id”, right_on=”userid”)

みたいに、join_onしたいcolumn名を指定してあげるだけです。
left_joinやright_joinもあるみたいですよ。

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html

pandasでexcelのインポート、エクスポート

ipythonでpandasはcsvにさくっと出力できるんですよね。入力もできます。

 In[] : df.to_csv('path/file')

でcsvに出力

 In[] : df = pd.read_csv('path/file')

でcsvから入力(使ったことないですが)

で、似た感じでエクセルデータをやり取りするには

$ pip install xlrt

して、

In[] : df = pd.read_excel(‘path/file’)

でインポートできるというスグレモノ。スグレモノすぎる。
で、出力も同じように

In[] : df.to_excel(‘path/file’)

しようとしたら、

ModuleNotFoundError: No module named ‘xlwt’

って出るので何でだろ?と思ったら出力は”xlwt”なんですね。 excel write だ。
読み込むほうは “xlrd”でした。excel readですね。

django2をec2のapache2.4のvirtualhostで動かすhttpd.conf

django2をec2で動かしたいけど、apache2.4はすでに走っていてPHPのサイトがある、のでvirtualhostでdjango動かすというのが何とか起動まで確認できました。

LoadModule wsgi_module /var/www/project/venv/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so
WSGISocketPrefix run/wsgi
<VirtualHost *:80>
    ServerName hoge.com
    WSGIDaemonProcess hoge.com python-path=/var/www/project/mysite python-home=/var/www/project/venv/
    WSGIProcessGroup hoge.com
    WSGIScriptAlias / /var/www/project/mysite/mysite/wsgi.py

    DocumentRoot "/var/www/project/mysite/mysite"
    <Directory "/var/www/project/mysite/mysite">
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    Alias /static /var/www/project/mysite/static
    <Directory "/var/www/project/mysite/static">
        Require all granted
    </Directory>
</VirtualHost>

もともとvirtualhostは動いてますのでそこの設定は省略で。
気をつけるところは、

WSGIDaemonProcess hoge.com python-path=/var/www/project/mysite python-home=/var/www/project/venv/

ではないでしょうか。python-pathもpython-homeもいるのに気付かず、venv環境が読めていなかったのと、
Directoryの中に設定を置いて、

Syntax error on line 4 of /etc/httpd/conf.d/11-django.conf:
WSGIDaemonProcess not allowed in context

などと怒られたりしていました。何にしろphpもpythonも同じapacheで動いているので節約できる・・のですが、やはりこんなことはあまりしたくないですね笑

django2をapache2 @ ec2 で動かす。

django2をec2のapacheで動かします。とりあえずvenvを起動。

python用、pip用にyumで色々入れます。

$ sudo yum install python3 python3-devel gcc make httpd-devel

今回mysqlも使っていたのでこれも。

$ sudo yum install mysql-devel

$ pip install -r requirements.txt

使っているpkgによっては他にも色々入れなくてはいけないでしょうね。

django2.0でapache2で動かす。

djangoでapacheでlocalhostで動かしてみよ、と思っただけで、数時間経過しました笑
いやー、本当このあたりがややこしくて面倒ですね。私みたいにここでへこたれそうな人たちのためにメモを残しておきます。
とりあえず今起動まで出来た設定です。
こういうの考えるとPHPはいかに優しいかというのが身にしみますね。

・プロジェクトのために作ったディレクトリ:project
project
–project
–mysite
–blog
–static
みたいな感じですね。
・venvの環境:venv

として読み替えてください。

httpd.confに、

LoadModule wsgi_module /usr/local/var/www/project/venv/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-darwin.so
WSGIScriptAlias / /usr/local/var/www/project/project/wsgi.py
WSGIPythonPath /usr/local/var/www/project/venv/lib/python3.7/site-packages
WSGIPythonHome /usr/local/var/www/project/venv
WSGIDaemonProcess localhost python-path=/usr/local/var/www/project/project
WSGIProcessGroup localhost

DocumentRoot "/usr/local/var/www/project/project"
<Directory "/usr/local/var/www/project/project">
    <Files wsgi.py>
    Require all granted
    </Files>
</Directory>

Alias /static /usr/local/var/www/project/static
<Directory /usr/local/var/www/project/static>
  Require all granted
</Directory>

です。
どれが何の設定、というのはおいおい追っていきます・・

あ、後、mysqlを動かすためにpipで

PyMySQL

を入れていたのですが、apacheだと、

mysqlclient

を要求されたので、pip installしました。

Djangoでは常にカスタムUserを使用すべき

まさに仰るとおりだと思ったのでメモります。

https://qiita.com/NAKKA-K/items/7627b6a22f364941b989

最近物忘れがひどく笑

まだsuperuser以外のユーザを作ったこともないですが、大事だと思った。

そして、カスタム例としては

https://qiita.com/okoppe8/items/10ae61808dc3056f9c8e

で。参考になります。