ubuntu にPythonインストール 仮想環境 Jupyter-lab インストール
Windows11にHyper-VでUbuntu環境を構築したので、そこにPythonをインストールしたときの手順を記載します。
先ず、Ubuntuにビルド環境を準備します
>sudo apt update
>sudo apt install build-essential libbz2-dev libdb-dev libreadline-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libsqlite3-dev libssl-dev zlib1g-dev uuid-dev tk-dev
次にネットからPythonのバージョンを指定して、Tar圧縮ファイルをダウンロードします。ここではバージョン3.12.0の例です
>wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tar.xz
ローカルで解凍します。
>tar xJf Python-3.12.0.tar.xz
>cd Python-3.12.0
インストールPathを指定します
>./configure --prefix=/home/user/.local/python
>make
管理者権限でインストール
>sudo -s make install
もとからあるPython3のシンボリックリンクを削除
>rm /usr/bin/python3
新たにインストールしたPython3 のシンボリックリンクを作成
>sudo -s ln -s /home/user/.local/python/bin/python3 python3
うまく行ったかどうか、バージョンを確認します。
>python3 --version
Python 3.12.0
上のようにバージョンが出ればOK
ワークディレクトリに移動して仮想環境を作成します
>python3 -m venv .venv
ここで仮想環境を実行するため以下を実行します
>source .venv/bin/activate
そうするとプロンプトが
(.venv) xxxxxxx >
のように変わります
次にjupyterlabのインストールです
>.venv/bin/pip3 install jupyterlab
次のコマンドでjupyter-labが起動します
>jupyter-lab
以上です
pandas DF 抽出
グループby すると、DFの「地区名」にある名前からグループ分けして、
この場合は平均を求めてくれる、以下は参考例
df_mean = df.groupby('地区名').mean()
取引価格(総額) 坪単価 面積(㎡) 取引価格(㎡単価) 地区名 佃 4.877778e+07 2.609899e+06 58.333333 7.908784e+05 入船 2.700000e+07 1.862142e+06 45.000000 5.642855e+05 八丁堀 2.000000e+07 2.639999e+06 25.000000 8.000000e+05 勝どき 3.091667e+07 1.666454e+06 57.083333 5.049862e+05 新富 2.710000e+07 1.831499e+06 44.000000 5.549998e+05
例えば坪単価のランキングにしたい場合は降順にするのでascendin=Flaseで
sortすれば良いので以下のようにする
df_mean_sort = df_mean.sort_values(by='坪単価',ascending=False)
ここでgroupbyされた「地区名」は1行、下げられているのはIndex扱いになっているからで、これを普通のカラム扱いにするには、index resetする
df_mean_sort.reset_index(inplace=True)
地区名 取引価格(総額) 坪単価 面積(㎡) 取引価格(㎡単価) 0 日本橋室町 3.200000e+07 4.22399e+06 25.000000 1.280000e+06 1 日本橋箱崎町 2.618500e+07 3.201157e+06 29.250000 9.700476e+05 2 日本橋蛎殻町 3.050000e+07 3.156153e+06 40.000000 9.564095e+05 3 銀座 3.400000e+07 3.036000e+06 35.000000 9.200000e+05 4 八丁堀 2.000000e+07 2.639999e+06 25.000000 8.000000e+05
インデックス参照で行、列抽出| df[ ] 1つしか適用できない!
例)
インデックス名、カラム名で行、列抽出|df.loc[ ]
行番号、列番号で行、列抽出|df.iloc[ ]
openssl コマンドを使った、証明書ファイル xxxx.cerの確認方法
>openssl x509 -in www.sample.jp.cer -text -noout
意味:www.sample.jp.cer を取り込んで テキストで結果を出力する
出力例
ーーーーーー
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
2d:10:88:83:4d:6e:a1:10:e4:5d:11:e3:0b:a7:19:8f
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = JP, O = "SECOM Trust Systems CO.,LTD.", CN = NII Open Domain CA - G7 RSA
Validity
Not Before: Apr 17 07:29:12 2023 GMT <--新しい有効期限
Not After : May 17 07:29:12 2024 GMT <-- ここまで
Subject: C = JP, ST = Miyagi, L = Sendai-shi, O = Tohoku University, CN = www.icd.riec.tohoku.ac.jp
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
index.cgiを実行時にエラーEnd of script output before headers: index.cgi
End of script output before headers: index.cgi
index.cgi-------- permission 777
#!/usr/bin/python3
print ('Content-type: text/html\n')
print ("Test Response")
.htaccess --------------- permission 644
DirectoryIndex index.cgi index.php index.htm index.html index.shtml
Options ExecCGI
Require all granted
これをサーバのディレクトリアクセスして実行すると
”End of script output before headers: index.cgi”エラー
が出力されます
そこでindex.cgiのパーミッションを705に変更すると
エラーが消え解決されました。 原因は不明です。
さらにこのindex.cgiがおいてあるカレントディレクトリ"."のパーションの
GuestユーザのパーミッションをWアクセス可能にすると同様に
”End of script output before headers: index.cgi”エラー
が出力されます
これから予想すると、CGIファイルにはライトパーミッションを
不可してはだめなのか、もしくはどこかのhttpd.confに制限が掛けてあり、それと矛盾している設定のためこのようなエラーが出るのかも知れません。
.httpd.conf .htaccess ファイルの設定メモ
DirectoryIndex :ディレクトリインデックスコマンド
DirectoryIndex index.html index.htm index.shtml
URLがディレクトリをアクセスした時に返すファイル名を指定できる
左から優先順位が高い
Optionsコマンド [引数1] [引数2] .....
例) Options Indexes FollowSymLinks ExecCGI
Indexes ディレクトリ内のファイル一覧表示を許可
FollowSymLinks ディレクトリ内のリンクを辿れる
ExecCGI CGIの実行を許可
None すべての機能を無効
Directoryディレクティブ:URLが特定のディレクトリをアクセスしたときに
そのアクセスに対して条件・制御などを設定できる
<Directory "/home/www/htdoc/myproj">
コマンド1
コマンド2
.....
</Directory>
Requireコマンド
Require all granted すべてのアクセスを受け付ける
AllowOverride コマンド <Directory> ディレクティブの中で定義する
例)
<Directory "/home/www/">
AllowOverride All /home/WWW/以下のディレクトリで設定の上書き許可
</Directory>
<Files ".ht*"> .ht* で.htaccess .httpd.confなどが対象 Require all denied 上記マッチするファイルのアクセス禁止 </Files>
<IfModule mod_rewrite.c> <-リライトモジュールが利用できるか?
RewriteEngine on <-リライトエンジンの有効化
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>
htmlからpythonへのフォームの転送方法
これもChatGPTに聞いてみました。
HTMLのフォームでユーザーが入力したデータをPythonに渡すには、以下の方法があります。
- Flaskを使用してHTMLフォームからデータを受け取る
Flaskは、PythonでWebアプリケーションを構築するためのフレームワークです。Flaskを使用して、HTMLフォームからデータを受け取ることができます。以下は、FlaskでHTMLフォームからデータを受け取るためのサンプルコードです。
HTMLフォーム
<form action="/submit" method="post">
<input type="text" name="username">
<input type="submit" value="Submit">
</form>
Flaskアプリケーション
from flask import Flask, request
app = Flask(__name__)
@app.route('/submit', methods=['POST'])
def submit():
username = request.form['username']
return f'Hello, {username}!'
上記のコードでは、/submit URLパスにPOSTリクエストが送信されたときに、submit()関数が呼び出されます。submit()関数では、requestオブジェクトからフォームデータを取得し、ユーザー名を取得しています。最後に、ユーザー名を含むメッセージを返しています。
- CGIを使用してHTMLフォームからデータを受け取る
CGI(Common Gateway Interface)は、Webサーバーと外部のプログラムを連携するための仕組みです。CGIを使用して、HTMLフォームからデータを受け取ることができます。以下は、CGIを使用してHTMLフォームからデータを受け取るためのサンプルコードです。
HTMLフォーム
<form action="/cgi-bin/submit.py" method="post">
<input type="text" name="username">
<input type="submit" value="Submit">
</form>
submit.py
#!/usr/bin/env python
import cgi
form = cgi.FieldStorage()
username = form.getvalue('username')
print('Content-type: text/html\n')
print(f'Hello, {username}!')
上記のコードでは、submit.pyスクリプトがWebサーバーによってCGIとして実行されます。submit.pyスクリプトでは、cgiモジュールを使用してフォームデータを取得し、ユーザー名を取得しています。最後に、ユーザー名を含むメッセージを出力しています。
以上の方法で、HTMLフォームからPythonにデータを渡すことができます。Flaskを使用すると、より高度なWebアプリケーションを構築することができます。
flask 複数プログラム動作 ルーティング機能
レスポンシフなWebサイトを構築するときに、どうしても複数プログラムを動作させたい時があります。
なかなかそういう例がネットで見当たらないのでChatGPTに聞いてみした。
以下その回答です。
ーーーーーーーーーーーー
アクセスディレクトリ内に
alpha_a.py
alpha_b.py
alpha_c.py
templates/
+---- rendar.html
がある前提です。
alpha_a.pyに以下のようなコードを追加して、別のビューを作成できます。
from flask import render_template
from alpha_a import app
@app.route('/alpha_b')
def alpha_b():
return render_template('rendar2.html')
@app.route('/alpha_c')
def alpha_c():
return render_template('rendar3.html')
上記のコードは、/alpha_bと/alpha_cのURLパスに対して、それぞれalpha_b()とalpha_c()関数を関連付けます。これにより、それぞれの関数が呼び出されたときに、rendar2.htmlおよびrendar3.htmlのテンプレートがレンダリングされます。
rendar.htmlテンプレート内で、/alpha_bと/alpha_cのURLにリンクを追加することができます。例えば、以下のようになります。
<a href="{{ url_for('alpha_b') }}">Alpha B</a>
<a href="{{ url_for('alpha_c') }}">Alpha C</a>
なお、alpha_b.pyやalpha_c.pyの中でrendar2.htmlやrendar3.htmlを表示する場合には、それぞれのファイルをレンダリングするためのFlaskのルートを作成する必要があります。これらのファイルをレンダリングするためのFlaskルートは、alpha_a.pyと同様に作成することができます。具体的には、以下のようになります。
from flask import render_template
from alpha_b import app
@app.route('/rendar2')
def rendar2():
return render_template('rendar2.html')
from alpha_c import app
@app.route('/rendar3')
def rendar3():
return render_template('rendar3.html')
上記のコードは、/rendar2および/rendar3 URLパスに対して、それぞれrendar2()およびrendar3()関数を関連付けます。これにより、それぞれの関数が呼び出されたときに、rendar2.htmlおよびrendar3.htmlのテンプレートがレンダリングされます。