mura632’s blog

自分が学んだ知識や考えをアウトプットする場として使っていきます。

デザインパターンの必要性

久々のブログです...(*´∀`)
今年は風邪引かないな~って思ってたらここ1ヶ月何度も風邪引いてやばいです(/´△`\)

学生から社会人になってプログラミングの勉強をするときにたくさん学んできました(^^)

特に感動したのがGoFの23パターン!
これはもっと早くから知っていたかったですね...(*´∀`)
人によっては、「こんなの勉強するよりも具体的な技術やった方がええわ」とか「これがなんの役にたつんや」とか言ってる人もいるかと思います...(/´△`\)ナキソウ

しかし!
アプリ系、インフラ系と同じSEでもさまざまな分野がある中、プログラミングを少しでもやるなら知っておいた方がいいと思います!



なぜなら、
★学生時よりも自分の書いたコードを人に見てもらう機会が増えるから★
です!



今までプログラムは動けばいいという考えだったり、自分がコードを読んだときに理解できればいいと思っていました...(°▽°)

しかし!
そのコードで評価されるんですよ!
アルゴリズムも見られますが、そのコードが綺麗かどうか!変数名がわかりやすいのか!

例えば、、、
対戦ゲームのプログラムの中で値が1なら勝ち、0なら引き分け、-1なら負けって条件文があったとします。

パッとそのコードの条件文を読んだときに「1ってなんだ?」って必ず思うと思います。

しかし!例えば(定数)WIN=1,LOSE=-1と定義して、
その条件文のなかで1や-1ではなく、WIN、LOSEと書いてあったら一目瞭然だと思います!
このように少しの見やすさの工夫が出来るかできないかでかなり評価は変わります!

少しデザインパターンとはずれてしまいましたが、
人から見られることを意識しながらコードを書くのをおすすめします!
そういった工夫が乗ってるのがデザインパターンです!
なので是非ともデザインパターンを勉強しましょう(。-∀-)!

[函館に行ったら食べて欲しいもの]top4

1位 海鮮丼

やっぱり北海道といったら海鮮ですよね!
食べてみてほんとに美味しかったです!
チャムという店で海鮮丼を頼んだんですが、おまけで小皿に6種類くらいのお通し?みたいなのたくさんくれました!
満腹になる上に本当に美味しくて満足でした(^O^)

ちなみに今の時期だとごっこ汁という料理もプラスして食べて欲しいです(^O^)

ちなみにごっことは魚のことなのですが、お土産屋さんでたくさんぬいぐるみがあってかわいかったです笑

youtuberのとみっくさんが一度捌いてました~

2位 塩ラーメン

次はあじさいというラーメン屋さんで塩ラーメンを食べたらまじで美味しかった話します

雪が吹雪いてきてお腹も減ってもうダメだと思うくらいやばい時に見つけたラーメンでした笑
関東の塩ラーメンと違ってしょっぱすぎず、いくらでも食べれるようなものでした!
しかもあの寒い中食べるラーメンは本当に最高でしたよ~!おすすめです!


3位 ラッキーピエロ

ラッキーピエロというのは美味しいハンバーガー屋さんです!
ハンバーガー以外にもたくさんあるので一概にハンバーガー屋さんと言っていいのかわかりませんが…笑
ラッキーピエロで人気No.1のバーガーをポテトと烏龍茶がついたセットで頼んだのですがポテトもミートソースをかけてその上にチーズを乗せたもので本当に美味しかったです!

ちなみに僕はよくわかりませんでしたが、

本物の烏龍茶

が飲めるらしいです!笑

4位 いかめし

お土産屋さんでいかめしを買って食べてみました!
中がもち米で美味しかったです!
正直自分で買う分以外にもお土産として買って帰ればよかったなって軽く後悔してます(;_;)笑
じゃがぽっくるもいいですが是非ともいかめしを買ってみてください!




本当はもっとおすすめできるところがたくさんあるのですが、、、景色だったり、赤レンガだったり、ちなみにお酒も美味しかったです笑
食べ物だけでもたくさん語れてしまいそうだったので今回はここでおしまいですヽ(´▽`)/笑


ぜひ一度函館に行ってみてください!

Tfidfvectorizerの簡単な使い方(tf idf)

入門 自然言語処理


tfidfvectorizerとは機械学習で有名なsk-learnライブラリに入っているクラスです(python)

これの簡単な使い方をまとめておきます。

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vect = TfidfVectorizer()
X_tfidf = tfidf_vect.fit_transform(corpus)

基本はこれです。corpusというリストに文章を格納する形になります。
例えば、

corpus=["This is a dog.","Hello World!","This is a cat."]

めっちゃ適当でごめんなさい笑
このように各文章が格納されている形になっています。


次にそれぞれのtfidf値を見つけていきます。

X_tfidf.toarray()

これを使うことで各単語のtfidf値がわかります。
また、各単語を確認したいときには

tfidf_vect.get_feature_names()

これを使います。これで基本的にtfidf値が算出できます。


次にTfidfvectorizerの代表的なパラメータの確認をしていきます。


○max_features
tfidf値を表示する単語数を指定します。tfidf値が高い順にとっていきます。

○min_df(①0~1,②整数)
各単語において①使用されている文章の割合、または②使用されている文章数がパラメータ以下の単語を排除します。あまりにも使用されていない単語は排除するという考えです。

○max_df
min_dfの逆です。あまりにも出現している単語は排除します。

○sublinear_tf(=True,False)
idf値に1を足すかどうかです。


このtfidfvectorizerはすぐに値を出すのにはかなり便利ではありますが、
あんまり良くないところもあります(´;ω;`)

①tfidf値が1を超えるときでもtfidf値を1として算出する
②numpyを使用しているので、メモリを食う→早く算出したいのなら便利だけど、データ数が多いと死ぬ(´;ω;`)


多少の弱点はあれど、簡単なニュースぐらいだったらかなり楽に解析できます(^O^)
ちなみに弱点②に関しては計算速度は下がりますが、メモリが食うことが問題であるなら自分でプログラムを組んだ方が解決できました。

自分のメモ、何をしようかなと思った

最近アクティビティにはまっていますヽ(´▽`)/
夏ということで運動したくなってきたことがきっかけですね
(本当は夏休みですることがなくいつもより暇になったから…研究もあって暇じゃなかった気もするが…)
ちなみに最近は筋トレにはまっています(^O^)
運動しないと痩せるタイプですので笑

夏休みを満喫していますが、最近では周囲の人たちがみんな進路や将来について考えていたりします
それをみてちょっと焦ってたりもします笑

もし友人が見たらそんなことないだろうと言うかもしれませんが、
実は結構本気で悩んでいます

正直、就活も決まって、彼女もいて、今も楽しく生きていて、なにも問題ないようにも思えるのですが、これだからこそ、将来が見えすぎてしまいました…

就職をして、30くらいで結婚して、そのうち転職なんかもして、すきな趣味をしたりして、いろんな人と話して楽しいことをひたすらしている…

そんな普通も十分楽しいです!楽しく生きていくと考えていた自分がいた時期もいて、たしかに実現できそうだけど、なんだか足りない気がして、でも何が欲しいのかわからなくなって…

というわけでなんでこんなことを考えるようになったのか考えました。その結果、物足りなくなったからだと思いました。誰かのやっていることを羨ましく思ったりすることで自分と比べて劣等感を感じたりするのかな?って思いました。

というわけで人を羨ましく思ったらその瞬間やってやろうと思いました!
また、考えられるときには自分は人生をかけて何をやりとげられるのか!
を考えていきたいと思います!

これは完全に自己満足な記事ですが、本気で生きていこうという意思表示です!

何をするにもマジでやって、人の何倍も充実した人生送って、本当に恩返ししたい人に恩返ししまくりたいと思う!

僕のやりたいことは上記のようなことです。そのために何ができるのか考えていきます。
時々自分でこの記事見ないといけないですね(´∩ω∩`)笑

またそのうち更新します笑

モチベ関係なしに頑張る方法

SNSの弊害が辛すぎてめんどくさいと感じている今日この頃…正直めちゃくちゃ勉強できる機会を得るのもSNSだったりするのでどうしようもないんですが笑 
…一度でいいからモテてみたい笑


最近、バイト先の生徒でモチベーションが下がってきたという声をとても聞きます。何をいっちょまえに言ってるんだと毎回思いますけどね(。-∀-)

といっても気持ちは分かります。どう頑張っても一年間ずっと頑張ることなんか不可能に近いと思う人もいれば、逆に一年くらいなら余裕と思っている人がいます。

この2種類の人間の違いはなんでしょうか…?(^ム^)


主観的な意見かもしれませんが、僕はどちらも経験したことがあります。大学受験の際の現役の時と宅浪の時です。前者が現役で、後者が宅浪です。ちなみに宅浪とは予備校に通わずに家で浪人です。つまり自己完結型の浪人です。

現役の時は「周りが勉強しているからやる」、「今まで受験で失敗したことないからどうせなんとかなる」といった考えを持ち、このような気持ちの中で勉強してきました。
当然この考えの中で勉強していると「早く終わらないかな?」など受験に対して辛い印象しかない上に時間がないという自覚もないのです。

逆に宅浪の時のことを考えると、ずっと勉強に対して意欲的でした。なぜかというと受験に対してプラス面しか見ていなかったからです。正確にいうと受験のプラス面がマイナス面をはるかに上回っていたのです。これに至ったのは以前投稿したブログの「どうやって?」と自問自答することで解決してきました。

また、宅浪時に現役の時と違うのは一年間のやることをすべてあらかじめ決めてから勉強したことです。つまりスケジュールです。これが決まっていると一年間で足りない勉強量となるのでモチベが下がっていようが上がっていようが「やるしかない!」と思うくらいの勉強量になっているので、やるしかないんです。つまりモチベは関係なくなります。もちろん、高いことに越したことはありませんが、低かろうがやらなくていい理由にはならないので頑張るしかないのです。ちなみにこのスケジュールの立て方は「どうやって?」と自問自答するとした以前のブログを参考にしてください。


まとめると…
モチベが下がるなら、その行動に対していい印象を持つこと、スケジュールを決めておくこと。
この2つをしっかり行動することで、モチベを下げずに行動し、目標を達成することができるかと思いますヽ(´▽`)/

いろいろ大変なことはあると思いますが、頑張りましょう!笑

Pythonの内包表記(コンプリヘンション)

なかなか卒業研究というのは何をしたらいいのかわからないもんですね(。-∀-)

先生に許可を取ってないからこのまま進めていいのかもよく分からず…w

今は仕方なく関連研究であったり、今後使いそうな技術を活用できるように先にコードを打っていたりと先がしっかりしていないのに進めちゃってます笑

そんなときにもっとコードを綺麗に書きたくなりました
そこで今回は内包表記(コンプリヘンション)についてです。

内包表記って何?って人もたくさんいると思います。もし、大学の授業だけで習っただけだと関わらない可能性もあります(普通に習ったわ!って場合ごめんなさい…)

内包表記とはfor文でリストを作るときにスマートに作る方法です。

例えば以下のようにlistという0から9のリストを作るとします。

list=[]
for i in range(10):
     list.append(i)

これをもっとスマートに書こうというのが内包表記です。実際に以下のように書いていきます。

list=[i for i in range(10)]

これで上の数行のものと一緒になります。
実際これは慣れるまではわかりづらいと思います。
[]の中の最初の変数(ここではi)をappendしていくイメージです。

もっとこれを応用したのももあります。
入れ子構造にしたり、if文で条件を付けることも可能です。

・入れ子構造

for i in range(10):
  for j in range(5):
     list.append((i,j))

これを内包表記で書くと

list=[(i,j) for i in range(10) for j in range(5)]


・if文を使った条件つき

for i in range(10):
   if  i % 2 ==0:
      list.append(i)

これも内包表記で書くと…

list=[i for i in range(10) if i % 2 ==0]

となります。

正直最初はわかりづらいと思いますがこれをマスターするとほんとに行数が変わってきます。
ただ、誰かと協力しながら作るときにはわかりにくいコードになってしまうかもしれないので、それぞれレベルに合わせて作っていくのが大切ですね

PythonのListの活用法・注意点

久々にブログを書きます。正直、就活終わって時間なんてたくさんあるだろって思ってました←
意外と大学4年って忙しい…
研究ならまだしもゼミが一番きつくなっているのが意味がわからない…
そしてゼミの内容もわからない…笑

とりあえずやってみて、自分でもちょいちょい擬似コードを実際に動かしてみたりと時々プログラミングができるのが最近は嬉しいですヽ(´▽`)/
そんな時に機械学習の分野なのでPythonを使っているのですが、

リストを使いこなすのがむずかしい!!

正確に言うとリストを使う方法がありすぎて頭の中で全然整理できていません笑
なので、今回はPythonのリストを使う方法をまとめていきたいと思います!



○リストの共通の宣言パターン

list=[]

このように宣言することで空のリストができます。

○リストの宣言パターン①

list=n*[0] #一次元
list=n*[m*[0]]  #二次元

ここで注意点です!
この宣言の仕方だと参照型のリストの宣言方法なので、数値を代入しようとすると他の配列まで同じように操作されます。
ex.list=2*[3*[0]]
list=[[0,0,0],[0,0,0]]

list[0][1]=1
list=[[0,1,0],[0,1,0]]

○リストの宣言パターン②

list=[[0 for i in range(m)] for j in range(n)]  #二次元

こうすることによってさっきの注意点が解消されます!
ex. list=[[0 for i in range(2)] for j in range(3)]
list=[[0,0],[0,0],[0,0]]

list[0][1]=3
list=[0,3],[0,0],[0,0]]

この宣言パターンなら0を2回appendしたリストを3回appendしたことと同義なので参照型にならず、別々に扱える。

とりあえず、今回はここまで!
numpyを使ったリストもまとめたらアップしようと思います!