Nicksの日記

spaCyに愛されたくて始めた日記

Mobile Price Classification

g最近の動向、近況、

データセット

 

ボブは彼自身の携帯電話会社を始めました。彼はAppleSamsungなどの大企業に厳しい戦いをしたいと思っています。 彼は自分の会社が作成した携帯電話の価格を見積もる方法を知りません。この競争の激しい携帯電話市場では、単純に物事を想定することはできません。この問題を解決するために、彼はさまざまな企業の携帯電話の販売データを収集しています。 ボブは、携帯電話の機能(RAM、内部メモリなど)とその販売価格との関係を調べたいと考えています。しかし、彼は機械学習があまり得意ではありません。だから彼はこの問題を解決するためにあなたの助けを必要としています。 この問題では、実際の価格を予測する必要はありませんが、価格の高さを示す価格範囲を予測する必要があります。
データセットのContextを引用

www.kaggle.com

データセットのカラム

  • battery_power: バッテリーが一度に蓄えることができる総エネルギー(mAhで測定)
  • blue: bluetoothが有/無
  • clock_speed: マイクロプロセッサが命令を実行する速度
  • dual_sim: デュアルシムの有/無
  • fc: フロントカメラのメガピクセル
  • four_g: 4G有/無
  • int_memory: ギガバイト単位の内部メモリ
  • m_dep: モバイルの深さ(cm)
  • mobile_wt: 携帯電話の重量
  • n_cores: プロセッサのコア数

参考にしたNotebooks

Mobile Price Classification 9 Models | Kaggle

自分のNotebooks

Mobile Price Classification(classify mobile price) | Kaggle

感想、まとめ 仮説を立てる癖をつける必要があると感じた。
Discussionを見ながら参考になりそうな意見を探すと役に立つ情報が落ちてた

www.kaggle.com

次回はこのデータセットについてEDAを行って、MLの試してみようと思う

Predict Future Sales で前処理の勉強

Kaggleを始めたが何から手をつけたら良いかわからないし、試しにコンペに参加したがそもそも前処理もままならい状態で コンペ登録をしてそっとPCを閉じた。
「Kaggle 入門」とか検索してチュートリアルぽいのしたが、いまいち何もつかめず、いざ コンペで前処理しようとすると手が止まるので、我流で勉強してこうと思った。 今回使うデータセットがこれ 有名というか鉄板 www.kaggle.com

意識すること

[目標と目的]
・次同じようなコンペで活かせるよう学習する
・Notebooksにコメントを付与して、勉強になったことをメモしていく。
・ 応用が効きそうなコードは応用例を考える。
[注意]
・自分の思考は大事だが、今は我流はいらない。コードを理解してメモる。  

Notebooks

今回勉強に使わせてもらった

www.kaggle.com

自分のNotebooks www.kaggle.com

感想

データの処理がメインだった。 グラフ化したり可視化の処理はほとんどなかった。 正直ほとんどコピペだった
わからないことは認めて学習次に活かしていきたいと思う

Pythonのプロパティ制御にgetterとsetter使うってよ

プロパティの定義 Pythonのようなオブジェクト指向プログラミング言語では、

オブジェクト(インスタンス)が持つデータそのもののこと

明確な定義が欲しいので調べてみたが、どれもだいたい同じような意味だったので

これで良い。

プロパティの制御 Pythonは外部からオブジェクトに簡単にアクセスできないようにしたかった。

そこでプロパティを完全に制御をかけようとした。当然、融通を効かせる必要が

ありますよね。「A変数は参照だけ。B変数は参照も変更も許可。」的な感じで。

その融通を効かせる担当にgetter(参照), setter(変更)を使います。

プラスアルファ、デコレータ(装飾)っていう「@」をうまいこと使うと

あら不思議、簡単でシンプルに制御をかけられるんですよ 

document: property

次の例でgetterやsetter(アクセサという)を実装しました。

self.__userはすぐあとで使うので記述しただけ。

コード内にある説明でコードの理解はできると思います

このコードで自分が理解できたこと
1. @propertyでprivate変数の参照ができる
2. 1.を定義したあとに@プロパティ名.setterで変数を書き換え可能にできる

class HomePage(object):

  def __init__(self, title, user):
    self.__title = title  
    self.__user = user


  @property # ①
  def title(self): 
    """
    titleはプロパティ名
    @propertyでgetterを意味する ①
    つまり、これで参照が可能 ②
    なのでこの段階で変更を加えようとすると ③
    なのでtitleはこの段階では参照しかできない
    オブジェクトになります
    """


    return self.__title


  @title.setter # ④
  def title(self, new_title): # ⑤
    """
    titleプロパティのsetterを定義した ④
    これでprivate変数を変更することが可能です
    new_titleが新しいタイトル ⑤
    setterを定義したので,③のエラーがなくなります ⑥
    """
    self.__title = new_title


  
H = HomePage("Nicks days", "nicks")
print(H.title)      # ②
#H.title = "Holmes" # ③ AttributeError: can't set attribute


H.title = "Holmes"  # ⑥ エラーは出ません
print(H.title)      # タイトルがHolmesに変わってると思います  

 

次はさっき言ってたuserについて。

これを参照だけにしてみます。

class HomePage(object):

  def __init__(self, title, user):
    self.__title = title  
    self.__user = user

  @property
  def title(self): 
    return self.__title

  @title.setter
  def title(self, new_title):
    self.__title = new_title

  
  # userは参照だけ ①
  @property # getterを意味する.
  def user(self):
    return self.__user


H = HomePage("Nicks days", "nicks")
print(H.user) # ① 参照は可能
H.user = "Holmes" # これはエラーが返ってくる

 ここまでは割と自分でも問題ありませんでした。

次に自分が思ったのはもっとかっこよっく書けないかなって思ったんですよね。

getterを書かずにsetterを定義して、getter, setterを使わない方法を

方法が3つほどありました。

  1. デコレータを外せばいい。つまり、property()の引数fsetにgetterする関数を渡す
  2. __setattr__()を使う
  3. .__set__()のみを実行するディスクリプタを作る
    長くなったので次回はこの続きから書いていきます

Twitterフォローよろしくおねがいします。

一日の記録

日々の勉強日記のために書き留めておこうと思う。

普段はメモした内容は適当にフォルダーを作って、適当なタイミングで

Githubに更新してるんだが、なんとなくブログを始めてみようと思った。

簡単な自己紹介

-  専門学生

-  22歳

-  趣味:最近はプログラミング

 -  使う言語:Python

-  今作りたいプログラム: 画像のテキストを抽出して

 その単語の意味を調べるプログラム。

 

今日

今日は早起きをし、ROK(Rise Of Kingdam)の定期更新をし、

睡魔に負けて二度寝をした。

起きたらもう10時で、気持ちよさと引き換えに時間を失った。

時間がもったいないので、早速プログラミングに取り掛かる。

といっても、まだPythonについて深く理解してるわけではなく、

プロパティの有用性やPythonには変数を保護する機能がないこと、

プライベートをマングル(難号化)することでアクセスを制御してることを最近知った。

プライベート変数を難号化し、アクセスを制御してもPythonにはそもそも変数の保護機能がない。

それだと保護の意味がないのでは?と主は思った。

これは約束事らしくみんながルールを守ればOKということらしい

実際プライベート変数はマングル化してもアクセスすることが可能なのだ。

12時を超えたので、お昼を済ませる。

14時:

最初の15分間はクラスメソッドについて勉強した

結局クラスメソッドの利点は理解できなかったが、これはコードを読んでいくうちにその利点に気づくて信じることにした。

残り45分CODをした。久々のFPSで燃えた。

ちなみに主はもともとゲーマーで特にFPSは得意だ

最近はプログラミングにハマったのであまりやっていなが、

時々やると楽しくてたまらん。

15時:

strip()やany()について調べていた、写経中に出現したので

調べていた。

別のPCで書いたコードをGithubにあげようとしたが妨げられ苦戦中。

かれこれ15分。

16時:

2日分の食料を調達。

スキマ時間のNetflixBBCSHERLOCKシーズン1-1を英語で見てた。

リスニングの練習にもなるし、英語で聴き取れるようになりたいからだ。

17時:

Youtubeでお笑い見てNetflixで続きを見てた。

18時:

調達した食料の中から肉まんを選び小腹が空いたので、

食べながら、argsについて勉強していた

可変長引数とキーワード可変長引数というものを理解した。

使い方や応用例はこれからだが、いろいろなコードを見て学ぼうと思う

変数やメソッドの前に付いている「_」(アンダーバー)について

ちゃんと理解できてなかったので、学習する必要がある

プログラムの書き方に一貫したルールを設けようと思い、

pycodestyleをインストールした。

19時:

ネットサーフィンしてた。

20時:

晩御飯を作った。

回鍋肉が無性に食べたくなり、晩御飯にした。

にんにくを2かけらスライスし、油と火にかけ

人参、ピーマン、キャベツ、肉のスライスを炒め、

タレをかけて出来上がり、実にシンプルで味もバッチリ

その後、22時まで食後のウォーキング

23時:

風呂に入り、睡眠

 

なぜこんなほぼ1時間ごとにメモを取っているかは、

自分の一日を記録に残したいからだ。

コロナ下で外出はほぼなく家でコードを書き、スーパーで飯を買い、

自炊。

こんなルーティンが続くので、記録に残そうと思った。