見出し画像

【91日目】Django_matplotlibでグラフ作成_関連ライブラリの紹介

 このnoteは、31歳未経験からエンジニアを目指して勉強していく記録を綴っているものです。現在はAdTechでカスタマーサクセスを担当しつつ、色んなチャンスに恵まれ、CS業務や子育てと並行しながらチャレンジしています。

 これからプログラミングを始める方にとってのTipsやモチベアップに繋げられるように頑張りたいと思っています。
--------------------------------------------

前回カレンダー機能を実装できたので、今回からはDjangoでのグラフ作成にトライしたいと思います。
↓前回


グラフ作成といえばデータ分析ですし、何かを分析する想定で作成したいなと思います。対象がTodoアプリなので以下のような分析ができるようなものにならないかなと考えています。

縦軸が【完了済タスクの数】で、横軸が【最終更新日】のグラフ
・完了日がバラついている人=
 マルチタスクせず一つずつ終わらせている?
 タスクを細分化している?
・完了日が固まっている人=
 複数のタスクを並行して進めている?
 タスクを大雑把にまとめている?

パフォーマンスが良い人がどういうグラフになっているかで、仕事の進め方の参考になりそうです。


いきなり自作アプリに実装するのは大変なので、いくつかのブログを参考にさせていただきながら、まずは真似て再現してみたいと思います。

以下のブログを参考にさせていただいています。


今回はグラフ作成用のライブラリについてまとめていきます(具体的なコードは次回)。
初めて触るものばかりで、勉強になりました。

以下の3つライブラリを用いてグラフを作成したいと思います。

・matplotlib
・base64
・ioモジュールのBytesIO


matplotlibとは?

matplotlibとはPythonにおけるグラフ描画の標準的なライブラリで、様々な種類のグラフを作成することができます。描画したグラフは様々な画像形式で保存できます。

pipインストールが必要なので、予めインストールしておいてください。

pip install matplotlib

何故かnumpy等も同時にインストールされました。


base64とは?

バイナリデータをテキストデータにするために変換方法の一つである
可逆変換であり
バイナリ → Base64エンコードテキストデータ
Base64エンコードテキストデータ → バイナリ
の両方向からの変換が可能である

https://zenn.dev/gin_hoge/articles/592e287f7dcffe

バイナリデータとはテキストデータ以外のデータ(を意図して表現することが多い)で、主に画像や音声などのデータを指します。このほかにも「コンピュータが見て分かるデータ」と表現されている場合もありました。

このBase64を使用することで画像が軽くなり、ページ速度アップを図ることができるそうです。


ioモジュールとは?

ioモジュールはPythonでストリームデータを扱うための、Pythonの標準ライブラリの一つです。ストリームデータとは、プログラミングでデータの入出力を行うもの(メモリ、ファイル、ネットワークなど)を抽象化した概念です。無限発生するデータ群や、性質・傾向が変化するものはストリームデータに該当するそうです。

ioモジュールではテキストストリーム、バイナリストリーム、rawストリームを扱うことができ、よく使われるのはテキストとバイナリの2つです。また、ストリームの入出力先にはファイル(ハードディスク)やメモリがありえます。


BytesIOとは?

BytesIOとは、メモリ上でバイナリデータを扱うための機能です。バイト列を格納するバッファ(データを一時的に格納するためのメモリ領域)と、バッファのどこを見ているかを表す位置を持っています。

具体的にどういうメソッドがあるかは、次回コードを紹介する際に触れていきたいと思います。


また、エンコードやデコードという言葉がよく出てきたので、言葉の定義も調べてみました。

エンコード/デコードとは?

エンコード:データを他の形式へ変換すること
デコード :エンコードされたデータを元の形式へ戻すこと

どちらもデータの形式を変換する行為を指す用語です。エンコードには「符号化する(=変換する)」という意味があります。データを変換することで容量を減らすことができ、それを目的にエンコードされることも多いので、「圧縮」とも呼ばれます。


次回は実際にDjangoでグラフを表示してみます!


これまで修了したコース等

【YouTube_Django関係】
Pythonでウェブサービスを作ろう! #1
テンプレートをマスターしよう! #2
静的ファイルを配信しよう !#3
本番公開しよう! #4
データベースと接続しよう! #5
ブログを作って学ぶモデル入門! #6
これが汎用ビューの力! #7
Djangoフォームを自由自在に操ろう! #8
djagoを最大限使って効率よくログインを作ろう! #9
ログイン完成!サインアップ & メール認証 #10
データベースマイグレーション前編 #15
データベースマイグレーション後編 #16

【Paiza】
JavaScript体験篇       8/15講座
Aランクレベルアップメニュー 24/49問
データセット選択メニュー   4/17問
配列メニュー         61/64問
ループメニュー1      20/20問
ループメニュー2      12/20問
条件分岐メニュー       25/25問
二重ループメニュー      19/19問
配列活用メニュー       26/26問
文字列処理メニュー      30/30問
Bランクレベルアップメニュー 62/62問
Cランクレベルアップメニュー 30/30問
ランクB合格
ランクC合格

【書籍/ブログ】
Django入門 | 初心者でも1時間でWebアプリ(Todoアプリ)を作成するコース
基礎からのMySQL     514/514頁
Web技術の基本      189/189頁 ※2周目中
京大のPython教科書    116/201頁
Pythonデータベースプログラミング 194/194頁
Pythonエンジニアファーストブック読了

【Progate】
Python Ⅰ~Ⅴ
Python アプリ版 コースⅠ~Ⅴ
SQL Ⅰ~ Ⅳ
SQL アプリ版 コースⅢ
HTML&CSS 初級編

【その他】
Pythonの環境構築
VSCodeの環境構築
MySQLの環境構築(MAMP)
Git / GitHubの環境構築
HEROKUの環境構築


参考


この記事が気に入ったらサポートをしてみませんか?