機械の中の学習日誌

社畜によるIT技術メモです。今日も元気です。

Plotlyによるデータ可視化1 (インストール方法)

Plotlyとは

ここでは、Pythonを用いたPlotlyの使い方をメモする。

plotly.com

インストールとインポート

pipコマンドによるインストール

pip install plotly

ライブラリのインポート(Python)

import plotly.graph_objects as go

よりハイレベルなAPIを備えたexpressもある。

import plotly.express as px

複雑なグラフを描く場合は、graph_objectsを使用する。 expressは、少ないコード量で簡単にグラフを描くことが出来る。

www.youtube.com

[CodeCommit][Windows] Gitのアカウント切り替え

CodeCommitで複数のアカウントを使う場合に、Windows上で切り替えて使用する方法。

新しいアカウントでのcloneエラー

CodeCommitを使っていて、CodeCommitの別のアカウントのリポジトリをcloneしようとしたら、以下のようなエラーがでた。

fatal: repository 'https://xxxxx' not found

リポジトリあるやん・・・と思うのだけれども、これは、元々使っていたCodeCommitの認証情報を使用してアクセスしようとしているためエラーとなっているようだ。

以下のようにgitコマンドの前に「GIT_CURL_VERBOSE=1」を付けて再度実行すると、詳細なログが確認できる。 このログの中身を追っていくと、元々使っていたCodeCommitのユーザ名を使ってアクセスしに行っていることが分かる。

GIT_CURL_VERBOSE=1 git clone 'https://xxxxx'

Windows10の場合、CodeCommitの認証情報は、「Windows 資格情報」に保存されていて、gitコマンド実行時にこの情報を使用してアクセスする。

*「Windows 資格情報」は、Windowsの検索Boxで「資格情報」と検索して表示される「資格情報マネージャー」から確認できる。

blog.janjan.net

とりあえずの解消策

「資格情報マネージャー」から、以前のCodeCommitのユーザ情報を削除する。

再度、cloneコマンドを実行すると、ユーザ名とパスワード入力画面が表示されるので、新しいアカウントの情報を入力する。 (ここで入力したアカウント情報が、再度、資格情報マネージャに登録される)

これで、新しいかアカウントのリポジトリがcloneできるようになる。

複数アカウントの切り替え

ただ、異なるアカウントでcloneするたびに、毎回、上記手順を踏むのは面倒。

なので、clone時に、アカウントごとにcredential.namespaceを設定してやる。 そうすることで、「資格情報マネージャー」に複数のアカウント情報を持たせることが出来る。

git -c credential.namespace=account1 clone https://xxxxx

*account1の部分は任意

cloneしたリポジトリ内で、pushやpullの度に、credential.namespace指定をしてやるのは面倒なので、以下のコマンドでcredentialの設定を行う。(リポジトリ直下の.git/configファイルに反映される)

これを実行することで、gitコマンド時のcredential.namespace指定は不要となる。 (指定したcredential.namespaceが認証情報として自動で使われるようになる。)

 git config --local credential.namespace account1

※参考 w.atwiki.jp

WSL2でPython開発環境構築

WSL2 + VSCode + Docker 開発環境

以下を参照して、WSL2、VSCodeの環境を構築する qiita.com

※インストールメモ

■ WSL2インストール

  1. コントロールパネルの「Windows の機能を有効化または無効化」を開く
  2. LinuxWindows サブシステム」と「仮想マシンプラットフォーム」にチェックを入れ、OKを押す。
  3. Windows再起動
  4. コマンドプロンプトでバージョンを2に設定
wsl --set-default-version 2

Ubuntuの導入

Windows StoreからUbuntuをインストールする

*Storeで検索するとバージョン番号付きのUbuntuも表示されるが、バージョン番号なしの「Ubuntu」でよいようだ。

VSCode設定 「Remote - WSL」エクステンションのインストール

Windows上で、VSCodeを起動して、拡張機能からwslで検索してインストール VSCodeをWSL上で走らせることが出来る。

UbuntuからVSCodeの起動

  1. WindowsのスタートメニューからUbuntuを選択
  2. 表示されたターミナルで、VSCodeを実行する任意のディレクトリに移動して、以下のコマンドを実行する。
cd xxxx
code .

VSCode環境

  • Ubuntuから起動したVSCodeで以下の設定を行う。
Python Extensionのインストール

VSCode拡張機能から「Python」で検索して、「Python extension for Visual Studio Cod」をインストールする

pip
  • VSCodeのターミナル(Ctrl + @)を開く
  • pipコマンドを実行できるように以下のコマンドを実行。
$ sudo apt install python3-pip

※以下のエラーが出る場合、aptのupdateを実施してみる。

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package python3-pip is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'python3-pip' has no installation candidate

aptのupdateを実施

$ sudo apt update

再度、apt installすることでpipをインストールすることが出来た。

$ sudo apt install python3-pip

ライブラリ

通常通り、pipコマンドから必要なライブラリをインストールする

pip install xxxxx

ExcelのデータをDataFrame経由でMySQLに登録する

複数個あるエクセルのデータをMySQLに登録した時のメモ

エクセルをDataFrameに読み込み、DataFrameからMySQLのテーブルにデータを登録する。

ライブラリインストール

python用のORM、sqlalchemcyをインストール。Jupyter Notebookから以下のコマンドを実行

!pip install sqlalchemy

MySQL接続設定

url中の括弧内を接続環境に合わせて変更する。

import glob
import pandas as pd
import sqlalchemy as sa

url = 'mysql+pymysql://(user):(password)@(host):(ip)/(database_name)?charset=utf8'
engine = sa.create_engine(url, echo=False)

エクセル読み込み&DB登録

  • 特定のディレクトリ配下に、同じフォーマットのエクセルデータが複数存在している前提
  • ファイルを一つ一つ読み込み、DBに流し込んでいく。
# 指定したディレクトリ配下のファイルをすべて読み込み
files = glob.glob('/(file_path_to)/*')
for i, file in enumerate(files):
    print(i, file)
    # エクセルをDataFrameに読み込み。(列名は2行目に存在している想定)
    df = pd.read_excel(file, header=1)
    # 指定したテーブルにデータを登録
    df.to_sql('xxxxx_tbl', engine, index=True, if_exists='append')

DataFrameのto_sql関数の引数if_existsをappendにすることで、テーブルが存在しない場合は、テーブルを新規作成しデータ登録、存在する場合はデータの追加登録。

pandas.DataFrame.to_sql — pandas 1.2.1 documentation

登録データの件数確認

登録完了後、以下を実行することでテーブルの件数を確認

engine.execute("SELECT count(1) FROM xxxxx_tbl").fetchall()

以上

参考

pandasでExcelファイル(xlsx, xls)の読み込み(read_excel) | note.nkmk.me

pandas.DataFrameとMySQLの連携 - Qiita

matplotlibの基礎知識を再学習するために参考にしたサイト

可視化作業を捗らせるためにmatplotlibを基礎から再学習。

figやsubplotやaxesなど、イマイチわかっていなかった部分を以下の記事で勉強しなおした。非常に分かりやすかったのでオススメ。

bicycle1885.hatenablog.com

qiita.com

qiita.com

ちなみに、本家のサイトは、チュートリアルやサンプルが充実していた。スキマ時間に勉強してみようと思う。

Matplotlib: Python plotting — Matplotlib 3.2.1 documentation

DataFrameをエクセル形式でダウンロード

やりたいこと

DataFrameを使って前処理をした後のデータをエクセルとして出力したい

環境

エクセル関係のライブラリ

エクセル出力に必要なライブラリをインストール

pip install xlrd
pip install xlsxwriter

コード

バイナリI/Oにエクセルを書き出して、レスポンスとして返す。

ファイル名に日本語を使うときは、別途処理が必要。(次に記載のURL参照。)

import pandas as pd
from io import BytesIO

def output_excel(request):

    # 前処理などしたDataFrame
    df = execute_some_preprocessing(data)

    # エクセルをメモリーに保存
    bio = BytesIO()
    writer = pd.ExcelWriter(bio, engine='xlsxwriter')
    df.to_excel(writer, index=False)
    writer.save()
    
    bio.seek(0)
    wb = bio.read()

    # MIMEタイプを指定してエクセルをレスポンスとして返す
    file_name = 'xxxxxxxxxxxxxxxxxxxxx.xlsx'
    response = HttpResponse(wb, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
    response['Content-Disposition'] = 'attachment; filename=' + file_name

    return response

ファイル名を日本語にしたい

qiita.com

参考

python - Django Pandas to http response (download file) - Stack Overflow

pandas - Create an excel file from BytesIO using python - Stack Overflow

io --- ストリームを扱うコアツール — Python 3.8.2 ドキュメント

model参照時のobjects参照エラー抑止

目的

qiita.com

この記事を参考に、Djangoを勉強していたところ、modelのobjects参照時にVSCodeで以下のようなエラーが発生。このエラーをどげんかしたかった。

f:id:syunkan81:20200319220432p:plain

pylintがだすメッセージのようです。 f:id:syunkan81:20200319220509p:plain

環境

参考

以下のドンピシャの記事を参考に設定しました。 https://qiita.com/RyoMa_0923/items/d0c2613f15dd98280121

ただし、設定時の画面が若干違ったので、メモを残しておくことにする。

手順

1. 左下のギアマークから「Settings」を選択

f:id:syunkan81:20200319221905p:plain

2.設定画面の検索ボックスで「python.linting.pylintArgs」と入力

f:id:syunkan81:20200319221958p:plain

3.「Add Item」をクリック f:id:syunkan81:20200320203427p:plain

4.「-load-plugins=pylint_django」を入力して「OK」 f:id:syunkan81:20200320203615p:plain

5.エラーが出なくなりました! f:id:syunkan81:20200321011047p:plain