Matplotlibでグラフ描いてみた

結構前に一通り勉強したMatplotlibでたくさんグラフを描けるようになったので、栃木県のコロナウイルスの感染者数のグラフを2種類作ってみました。

 

1.折れ線グラフ

栃木県内の4月の日別感染者数(4/1〜4/30)のグラフを2種類描写していきます。

 折れ線グラフを作るにはmatplotlibのplotメソッドを使います。文字通り点を打っていくわけです。説明の前にコードを貼ってしまいます。

f:id:kaitadayo:20200716222611p:plain

折れ線グラフ作成コード

まず、matplotlibをインポートしています。さらにmatplotlib.styleをインポートして「ggplot」というグラフのスタイルを指定しています。まあこれはwordで明朝体だとかゴシック体とか文字の書式を指定している様なものです。

次からがmatplotlib特有のものなのですが、figとaxという変数を指定する必要があります。グラフ自体はaxの方に描いていくわけなのですが、だったら変数二つもいらなくね?って僕も思いました笑

簡単にいうとfigは台紙で、axは付箋紙みたいなものです。figという台紙の上に、グラフを書いたaxという付箋紙を貼っていくわけですね。こうすることの利点は複数のグラフをまとめられる点にあります。例えば、ax1に折れ線グラフを、ax2に棒グラフを描いて、それを一つのfig(台紙)に貼りつけてしまえば、一枚の紙で二つのグラフが見れるよねってことです。

次はx,yという変数に要素を指定していきます。通常のグラフのイメージ通り、横軸の要素がx、縦軸の要素がyです。ここではxに日付(1〜30),yに感染者数をそれぞれセットしてあります。今回は分かりやすいように(for構文の説明を省くために)、普通に1から30まで打ちました。笑

データが用意できたら後は、plotメソッドをaxに適用して折れ線グラフを描いていきます。

これを実行した結果下のようなグラフが出来上がります。

f:id:kaitadayo:20200716224456p:plain

完成した折れ線グラフ

んーーー、見にくいよねぶっちゃけ。笑

折れ線グラフは向かないとは分かっていたけど、一応やってみました。

次は本命、棒グラフの登場です。

2.棒グラフ

今回も先にコードを貼っちゃいましょう。

f:id:kaitadayo:20200716225540p:plain

棒グラフコード1

fig,axの話は前回と同じです。要素も同じ。変わったのはplotメソッドでは無くて、barメソッドをaxに適用している点だけです。bar、文字通り「棒」ですね。

できた棒グラフがこちらです。

f:id:kaitadayo:20200716230048p:plain

棒グラフ1

折れ線グラフと比べると大分見やすくなりましたが、まだこのグラフには重要なものが足りていない。それは横軸、縦軸が何を表しているか、このグラフはなんのグラフかを示すことです。グラフにはこれがかなり重要で、僕は大学の実験でこれらを疎かにし、最低評価をもらった事があります。(嘘)

グラフにこれらを表現するには以下のコードを打ちます。

f:id:kaitadayo:20200716231228p:plain

棒グラフコード2

setメソッドを使って、横軸、縦軸、グラフ自体に名前を付けます。

setの次のアンダーバーの後に名前を付けたい場所を指定して、次のカッコの中に付けたい名前を指定します。これを実行すると下のようになります。

f:id:kaitadayo:20200716231742p:plain

棒グラフ2

これまでで一番良いグラフですね。ちなみにグラフのタイトルなどを英語にしているのは、日本語だと文字化けしてしまうからです。文字化けしないようにする方法もあるみたいですが、今回はこれで勘弁。(グラフのタイトル…4月の日別コロナ感染者数、縦軸…感染者数、横軸…日付という意味です)

3.まとめ

まだまだグラフをマスターしたとか言えるレベルじゃないけど、自分のパソコンの画面にグラフが表示されるだけでカッコええって感じです。プログラミングしている自分に酔わせてくれているので、グラフは十分仕事しているよね。次は円グラフをやりたいです。さよなら



 

データ読み込みに大苦戦(pandas)

pythonのデータ分析学習に使っている参考書でnumpyの基礎処理も学んだのですが、pandasの節に入って個人的に今までで一番足踏みしてしまった部分があったのでブログを書きます。

もしかしたらかなりレベルの低い躓きかも知れませんが初めてpythonの学習でこんなにも悩んで、そして自分で解決できた喜びも感じたので紹介させてください。

 

 

1.なんでうまくできないん??(csvファイル、Excelファイル)

いつものように参考書通りに勉強を進めているとそいつは急に現れました。ちょうど参考書のpandas節のデータ読み込みのセクションでした。

参考書通りのコードを打ってもエラーが出る!?!?!?!?!?!?

f:id:kaitadayo:20200514234237p:plain

実際にでたエラー

f:id:kaitadayo:20200514234336p:plain

実際にでたエラー②

参考書を信じて疑わない僕にとっては全く理解できませんでした。ファイルもちゃんとpc内に存在しているのに、、why???ここから長い戦いが始まりました。

2.試したこと

2-1.pipでとりあえず色々インストール。 

ますはじめに試したことは参考書を遡って、新しい仮想環境でpipで各ツール、パッケージをinstallし直すことです。numpy、scipy、pandas、matplotlib、scikit-learn、xlrd、openpyxl、lxmlをinstallしました。(正直言うとnumpyとpandas以外はまだどこで使うのか良くわかっていない)

installはしてみたものの、結局とりあえずやってみただけでなんの解決策にもなりませんでした。

2-2.ファイルの保存先を変える

ファイルはダウンロードしてあっただけなので個別にフォルダを作って保存してみたり、pythonの資料とか今までのコードを保存してあるフォルダに保存してみたり、デスクトップに保存してみたりしましたが、解決しませんでした。

2-3.Anacondaをインストールしてみる

Anacondaは多くの pythonパッケージが入っているpythonディストリビューションです。Anacondaを一つインストールするだけで様々なパッケージが利用可能です。(下にAnacondaのインストールURLを貼っておきます)

www.anaconda.com

なのでターミナルからではなくAnacondaからjupyter notebookを立ち上げて試してみましたが解決しませんでした。

3.ファイルパスとの出会い

自分なりに試した結果が全てダメでなかなか先に進めず、ムカついて参考書を叩きつけたりしてみましたがもちろん現状維持。

そんな現状を打破してくれたのがファイルパスです。きっかけはインターンで戦っている友人の「エラーコードをそのままコピペして調べてみたら?」という助言でした。

言われた通りコピペしてみたら同じ壁に当たった人達とそれに助言している人達が大量に出てきました。笑

それを読み漁るとどうやらファイルの指定の仕方が違うということに気が付きました。

3-1.ファイルパスとは

ファイルパスは簡単にいうと(自分の解釈では)ファイルへ導く道標のようなものです。例えば「/Users /murakamikaita/downlords/notebooks/data/2017health.csv」というファイルパスがあるとすると、

”/Users/murakamikaita"→murakamikaitaが使っているpcの

"downloads/notebooks/data"→downloadsというフォルダの中のnotebooksというフォルダの中のdataというフォルダの中にある

”2017health.csv"→2017health.csvというファイルだよ

という意味になります。

つまり、2017health.csvがデスクトップにあるときのファイルパスは

「/Users/murakamikaita/Desktop/201705health.csv」となるわけです。

こんだけ教えてあげないとファイルの一つも探せねーのかよって思いました。案外アホじゃんって。

ちなみmacosではファイルを右クリック状態(controlキー)でoptionキーを押すとそのファイルのパスをコピーする事ができます。

3-2.ファイルパス指定により解決

もうこれでできなかったら参考書捨てようと思いながらファイルパスを指定してコードを実行させてみると

f:id:kaitadayo:20200515004542p:plain

できたーーーーー!!!!!

ついにファイルを読み込む事ができました。嬉しかった。

4.感想

今回の件でただ漠然と参考書通りに学習するだけじゃダメだと痛感しました。初心者の躓きは絶対に先人達が先に躓き、そして解決してくれていると知りました。躓いたら調べまくる。そうすれば解決するし、その過程で新たな知識を得る事ができます。小さいステップではありましたが、良い成功体験になりました。この調子でとっととこの参考書とお別れしたります!

終わり!

pythonでゲームを作ったから見て。

pythonはゲーム作成もできるということで、基本的なことしか学んでいない僕の全ての知識を集約して簡単なゲームを作ってみました!

 

目次

 

1.構想

入門書を見ただけの僕には、複雑なコードを使ったものや、グラフィックに拘っているものは流石に作れないので、変数の数も少なくていいものにしようと思いました。それで考えたのが、『数当てゲーム』です。(僕の地元ではヌメロンって言われてた笑)

どういうゲームか簡単に説明すると、ランダムに決められた四桁の数字を当てていくゲームです。詳しい説明は、2章以降でしていきます。

 

2.ソースコード

まずは使ったモジュールについて説明します。

I. tkinter(ティーケイ・インター)

II.random(ランダム)

Iのモジュールは、ウィンドウを表示するために。IIのモジュールは、ランダムな四桁の数字を表示するために使いました。ここからはゲーム作成の流れを、1.ウィンドウ作成と、2.ゲーム自体のコードに分けて、その後、3.二つのコードを融合の流れで説明します。

1.ウィンドウ作成のコード

まず先にウィンドウ作成のコードを貼っちゃいましょう。

 

f:id:kaitadayo:20200419180314p:plain

ウィンドウ作成のソースコード

画像内にコードの説明は簡単にしていますので、ポイントを軽く説明します。

まずウィンドウの中に必要なものを考えてみました。

それは

1.プレイする人が数字を入力する場所

2.数字を入力させる為の説明

3.チェックボタン

です。

1を表現するためにEntryメソッド、2を表現するためにLabelメソッド、3を表現するためにButtonメソッドを使いました。あとはそれぞれのウィンドウでの表示する場所を決めるためにplaceメソッドを使用しました。あとはそれぞれのメソッドの中で、表示する文章や、フォントを指定すれば大体は終了です。

あとはButtonClickという関数を定義して、チェックボタンがクリックされたときに行う処理が実行されるようにします。ちなみに実行すると

f:id:kaitadayo:20200419202357p:plain

実行結果

画像の左上のようなウィンドウが作成されます。今回のソースコードではボタンをクリックしても何も起きませんが、次に説明するゲーム自体のコードをボタンがクリックされた時に実行されるようにコード書き換えることで、ゲームが完成します。

 

2.ゲーム自体のコード 

今回も先にソースコードの画像を貼っちゃいます。

f:id:kaitadayo:20200419203328p:plain

ゲーム自体のソースコード

今回も簡単な説明が画像内にあるのでポイントだけを説明していきます。

まずこのコードの流れを説明します。

1.ランダムな四桁の数字を作る

2.プレイ者が入力した物が、数字かつ四桁かどうかを判定する。

3.ヒット&ブローを判定する。(これは後で詳しく説明します)

4.数字が当てられた時に『当たり!』と表示する

以上がこのコードの流れです。

 

まず1に関しては、 randomモジュールをインポートして、各桁で一桁ずつ1から9までの数字を選ばせ、リストを使ってコードを短くしました。(こうしておくとこの後のヒットとブローの判定が楽)

 

次に2に関してです。四桁の判定に関しては、len関数を使うことですぐに解決できます。if・else構文を使用して四桁の数字じゃなければ、「四桁の数字を入力してください」と表示するようにしました。

また、数字かどうかの判定に関しては、入力された四桁の数字をbと置いて、リストを使って各桁を取り出し、数字かどうか判定しています。

 

3に関してはヒットとブローの説明からしていきます。まず数当てゲームはランダムに決められた数字を、当てていくゲームです。一回数字を入力するごとに2種類の情報が与えられます。それがヒットとブローです。

 

まずはヒット。これは数字も数の位も合っているという意味です。(例:ランダムに決められた数字(1234)、入力された数字(1056)の時は1ヒットとなります。)

 

次にブロー。これは数字だけが合っているという意味です。(例:ランダムに決められた数字(1234)、入力された数字(0156)の時は1ブローとなります。)

 

ヒットの判定は、リストで入力された数字とランダムに決められた数字の各桁を取り出して数字が合っているかを判定するだけです。

 

ブローの判定は、各桁を比較する点ではヒットの判定と同じですが、ヒットが出た位と重複しないようにしないといけないのでif構文での条件が増えます。

 

本当はもう少し詳しく説明した方が分かりやすいとは思うのですが、めんどいのでやめます。笑

ある程度勉強してから見ればすらすら読めると思います。

 

最後に4に関して、ヒットとブローの説明を聞いていて勘のいい人はわかると思いますが、このゲームのゴールはヒット4を目指すことです。つまりヒット4になった時に「当たり!」が出力されるようにするだけです!笑

 

下に実行結果を貼っておきます。

f:id:kaitadayo:20200419213533p:plain

実行結果




3.二つのコードを融合

上の実行結果でもわかるようにゲームにしては殺風景です。これから二つのコードを融合することで少しマシになります。

f:id:kaitadayo:20200419214731p:plain

融合

 融合とかいう厨二病みたいなワードセンスには触れないで頂いて。要はボタンがクリックされた処理をゲーム自体のコードに書き換えてあげればいいだけです。書き換えると下の画像のようなコードになります。

f:id:kaitadayo:20200419215115p:plain

融合結果

f:id:kaitadayo:20200419215156p:plain

融合結果続き


 これが数当てゲームのソースコードになります。ウィンドウにヒットとブローの履歴が出るようなコードを書き足してはいますが、大元の説明は以上になります。

 

3.実際にプレイしてみた

f:id:kaitadayo:20200419215821p:plain

プレイ画面

めっちゃ失敗しちゃいましたがなんとかクリアできました。正解すると当たりというタイトルのウィンドウが出てきてお祝いしてくれます。

自分が作ったものがちゃんと機能するのは嬉しいなって思いました!python初心者が作ったゲームなので批判せずにやさしい気持ちで読んでくださいね。ではまた。 

 

 

 

 

 

 

 

データ分析(python)を始めてみた

f:id:kaitadayo:20200416213420p:plain

python

 目次

 

 

1.なぜデータ分析(python)を始めた?

まず初めに僕は他人に影響されやすいと述べておこう。なぜデータ分析を始めたのか?理由は簡単。某有名私立大学に通うマブダチがデータ分析をやっていたからだ。高校時代からの付き合いのそいつは、普段はチャランポランにしか見えないのだが、裏では意識高い系のことを常にやっていてる。しかもそんな自分にいい意味で酔っている。(やりがいを感じてる)要するに尊敬している友人がやっていたか興味を持ったのだ。(ちなみにはてなブログもそいつの影響。刺激しかくれない)

さらにpythonはプログラミング初心者でも扱いやすく学習コストが低いと言われているので挫折しやすい僕にはうってつけなのだ。(その友人はpythonは使ってない)

以上の理由から僕はpythonによるデータ分析学習を始めた。

 

2.目標

始めるからには目標を設定すべきだろう。僕が目指すのは『python3エンジニア認定データ分析試験合格』だ。

データ分析試験 | 一般社団法人Pythonエンジニア育成推進協会

 この試験は一般社団法人pythonエンジニア育成推進協会が行っているものである。なぜここを目標にするのかと言うと、単純に資格という肩書きが欲しいということと、pythonに関しての資格は企業でも求められているからだ。(公式ホームページを見てもらうとわかる)

一般社団法人Pythonエンジニア育成推進協会 | Pythonの学習の目安と習熟度チェックに試験はいかがですか?

 

3.参考書

『python3エンジニア認定データ分析試験』には指定されている参考書があるのでそれを学習していこうと思う。

https://www.amazon.co.jp/Python/dp/4798158348/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr=

ちなみに僕は今回がpython初めてということではなく、すでに入門書を一冊学習済みである。

 

https://www.amazon.co.jp/いちばんやさしい-Python入門教室-大澤-文孝/dp/4800711592

これが活きるのかはわからないが、とりあえずは指定された参考書で学習していくことになるだろう。

 

4.まとめ

ここまで来てなぜブログを始めた理由について述べると、学習日記の代わりになればと思ったからだ。おそらく初めてのことがたくさんあると思うので、失敗談も含めて赤裸々に綴っていこうと思います。不定期です。ではまた。