常ズレ草

なんでも屋。備忘録のため読ませる気ゼロ。

プログラミング初心者がハッカソン型インターンに行った話

 

結論:一通り遊んだらハッカソンに必ず行け

 

超初心者がハッカソンに出るとこうなる。

・言っていることがよくわからない

・質問内容もよくわからない

・急に使ったこと無い言語で開発する

・寝れない(これは初心者じゃなくてもこうなるらしい)

・とりあえずできたことはUIデザインくらい(サーバー関連意味不)

・とにかく周りのレベルが高すぎて泣ける

 

 

 

反省も込めて時系列で振り返り

 

インターン開始時の自分の状況

XcodeiOSサンプルアプリを作った程度。その他は正直ムリ。

・サーバーのことはよく知らん

ビットコインで頭がいっぱい

 

 

・どんな状況だったか

今回は音楽アプリの作成。事前にどんなアプリかは通知された。ただし、打ち合わせとかはさすがにNG。何作るのかしらんがとりあえずiOSアプリならいけますって書いたし、Xcodeは毎日触ってとりあえずの準備していった。(といってもIBActionとかDelegatesをちょっこと理解した程度)

 

 

そして当日、再生方法とかの都合もあって急遽Webアプリに変更。早速詰みそう。とりあえず、「ゴリゴリ調べる」→「コピペ」→「動かす」→「直す」→「ゴリゴリ調べる」のループ。ただ意外と、html+CSSはその場しのぎでなんとかいける(htmlのdivごとにCSS割り当てるのとかも、なんとなく読んでたらわかった)

 

画面構成の話の最中。「2カラム?3カラム?」「ここフロートで」「いきなりだけどJS書ける?」「JQUERYで〜・・・」html等々書いたことないので全部呪文。「フロントやってもらおうと思うんだけど大丈夫??」って心配されたのも納得。そしてhtml書いたこと無いけどフロント担当とか言ってごめんなさい。

 

といいつつもなんやかんやで完成。デザインは自分の案がかなり反映されたのでビギナー大喜び。

 

・振り返ってみて

始めたてのころは、自分の書いたコードが実際に動いたり、競プロの問題が解けたり、そういうことで喜びを得てたんだけど、ただ、本当に、趣味ではなく仕事としてプログラミングするというときには、協同でなにかを作る経験がないと何もできないかもしんない。

ハッカソンインターンは、自分と同じ世代の人と自分を相対評価する場なので、絶対に行ってください。お願いします。

 

 

 

 

 

 

 

 

 

 

V.S インターン 勉強編

インターンに向けて読んだ記事まとめ

 

・WebAPIのことくらい勉強しようね

qiita.com

qiita.com

 

 

JSONもやっとこうね

qiita.com

 

本家

https://docs.python.jp/3/library/json.html

 

 

 

Cocoapods使えないと詰む気がした

qiita.com

 

 

あとはUdemyのアプリ開発講座をゴリゴリ進めるー

(てかiOS開発経験5日でフロント任されるのきつくない???)

 

〜例題で学ぶ統計学〜 比率の区間推定

標本分布を終えると、やっとこ統計らしい推定の章です。

 無作為に選んだ250人の大学生について運転免許をもっているかどうかを調査したところ、90人がもっていた。信頼係数95%で、運転免許を持っている大学生の割合の信頼区間を求めよ。

『基本統計学有斐閣 P.238 練習問題(2)


解くこと自体はそれほど難しくないし、考え方も、正規分布をなんとなく理解していれば、そんなに難しくないです


〜解き方の流れ〜

この問題の解き方は2通りあります。

  1. 二次方程式を解く場合
  2. 近似計算をする場合

両方そんなに難しくないですが、後者のほうがよく使うので後者で解説。


〜解説〜


「標本比率、ここでは250人中、運転免許を持っている大学生の割合は、大きかったり小さかったりするけど、その分布は『免許もってる or 持ってない』の二項分布になりそう」というところから話がスタートします。250人中誰も持ってないってことは無さそうだし、かといって全員持ってるってこともなさそう・・・ということです。

全国の大学生から選り抜いた250人を頼りにして、全国の大学生で免許を持っているのはだいたい何割なのか調べてみましょう。


まず、最終的なゴールは、「免許を持ってる割合(p)がどの範囲に収まるか」。つまり、

(下限)\leqq p \leqq(上限)

という状態がゴールになります。
250人中、運転免許を持っている大学生の割合(標本比率)についての二項分布を正規分布に近似させて、式を変形して作ります。そのため、

  1. 二項分布から正規分布に近似
  2. 正規分布を標準化して信頼区間に収まるように不等式を作る
  3. 式変形をしてゴール


という手順になります。


1,二項分布から正規分布に近似


xという値が二項分布するとき、

\begin{eqnarray}
B(n,p)  \sim  N(np,npq) 
\end{eqnarray}  

になることを用いてちょっと考えます。このxx/n、つまり、「250人中90人が免許を持ってる」という標本比率の話に置き換えます。一次変換すると、

\begin{eqnarray}
N(np\times\frac{1}{n},npq\times\frac{1}{n^2}) = N(p,\frac{pq}{n}) 
\end{eqnarray}


この式の意味するところは、
n人中x人が免許を持っている確率は、平均値p、分散pq/n正規分布する」ということになります。


言い方を変えてみます。
標本をいっぱい集めてくると、免許を持ってる人の割合の期待値E(\hat p)は、大学生全体での割合(p)に等しくなるはずです。このことを数式で示してみます。

\begin{eqnarray}
E(\hat p)  &=& E(\frac{x}{n}) &=& \frac{1}{n}E(x) &=& \frac{1}{n}np = p
\end{eqnarray}  

分散についても、

\begin{eqnarray}
V(\hat p)  &=& V(\frac{x}{n}) &=& \frac{1}{n^2}V(x) &=& \frac{1}{n^2}npq = \frac{pq}{n}
\end{eqnarray}

となります。


つまり、「免許を持ってる人の割合」の期待値(平均)と分散は、それぞれ

\begin{eqnarray}
\mu &=& p \\\\
\sigma^2 &=& \frac{pq}{n}
\end{eqnarray}


になります。つまり、標本比率\hat p = x/n

\begin{eqnarray}
N(p,\frac{pq}{n}) 
\end{eqnarray}  

で近似することができます。
これを標準化して、式を変形していけば、ゴールに辿りつけそうです。



2,正規分布を標準化


標準化については説明を省きます。
その代わり、信頼区間について少し説明します。


信頼区間は、「値がその区間にあることが信頼できる」ような区間
信頼係数は、「その区間にあることが信頼できる確率」です。


つまり、「信頼係数95%である信頼区間を求める」ということは、
「その区間にいる確率が95%になるような区間のはじっこを決めてくれ」
ということです。


標準正規分布では、

-1.64 < z < 1.64:信頼係数90%の場合のはじっこ
-1.96 < z < 1.96:信頼係数95%の場合のはじっこ
-2.58 < z < 2.58:信頼係数99%の場合のはじっこ

となります。(テストのときは覚えましょう!)


これを当てはめます

\begin{eqnarray}
Pr \Biggl\{-1.96 < \frac{\frac{x}{n}-p}{\sqrt{\frac{pq}{n}}}< 1.96\Biggr\} =  0.95
\end{eqnarray}  

あとはここから式変形をしていきます。


3 式変形して近似計算


近似計算でやります。
先程の式を、p不等式の真ん中に来るように変形します。


\begin{eqnarray}
&Pr& \Biggl\{-1.96 < \frac{\frac{x}{n}-p}{\sqrt{\frac{pq}{n}}}< 1.96\Biggr\} \\\\
\Leftrightarrow &Pr& \Biggl\{-1.96 \sqrt{\frac{pq}{n}} < \frac{x}{n}-p < 1.96\sqrt{\frac{pq}{n}}\Biggr\} \\\\
\Leftrightarrow &Pr& \Biggl\{-\frac{x}{n}-1.96 \sqrt{\frac{pq}{n}} < -p < -\frac{x}{n} + 1.96\sqrt{\frac{pq}{n}}\Biggr\} \\\\
\Leftrightarrow &Pr& \Biggl\{\frac{x}{n}-1.96 \sqrt{\frac{pq}{n}} < p < \frac{x}{n} + 1.96\sqrt{\frac{pq}{n}}\Biggr\} \\\\

\end{eqnarray}  


これで、真ん中をpにした状態で不等式ができました。
でも、これだと両端にもpがあって計算できそうにないです。


そこで、p\begin{eqnarray}\frac{x}{n}\end{eqnarray} で近似しちゃいます。
これでも値はそんなにずれないので問題なし!

\begin{eqnarray}
p = \frac{x}{n} 、q = (1-\frac{x}{n})
\end{eqnarray} より


\begin{eqnarray}
Pr \Biggl\{\frac{x}{n}-1.96 \sqrt{\frac{\frac{x}{n}(1-\frac{x}{n})}{n}} < p < \frac{x}{n} + 1.96\sqrt{\frac{\frac{x}{n}(1-\frac{x}{n})}{n}}\Biggr\} \\\\
\end{eqnarray}


という式になります

\begin{eqnarray}
n = 250、
\frac{x}{n} = \frac{90}{250}
\end{eqnarray} を代入します。テストではここから事故るので慎重に


\begin{eqnarray}

&Pr& \Biggl\{\frac{90}{250}-1.96 \sqrt{\frac{\frac{90}{250}(1-\frac{90}{250})}{250}} < p < \frac{90}{250} + 1.96\sqrt{\frac{\frac{90}{250}(1-\frac{90}{250})}{250}}\Biggr\} \\\\

\Leftrightarrow
&Pr& \Biggl\{\frac{90}{250}-1.96 \sqrt{\frac{\frac{90}{250}\frac{160}{250}}{250}} < p < \frac{90}{250} + 1.96\sqrt{\frac{\frac{90}{250}\frac{160}{250}}{250}}\Biggr\} \\\\

\Leftrightarrow
&Pr& \Biggl\{\frac{90}{250}-1.96 \sqrt{\frac{90}{250}\cdot\frac{160}{250}\cdot\frac{1}{250}} < p < \frac{90}{250} + 1.96\sqrt{\frac{90}{250}\cdot\frac{160}{250}\cdot\frac{1}{250}} \Biggr\} \\\\

\Leftrightarrow
&Pr& \Biggl\{\frac{90}{250}-1.96 \sqrt{\frac{9}{25}\cdot\frac{16}{25}\cdot\frac{1}{25\cdot 10}} < p < \frac{90}{250} + 1.96\sqrt{\frac{9}{25}\cdot \frac{16}{25}\cdot \frac{1}{25\cdot 10}}  \Biggr\} \\\\

\Leftrightarrow
&Pr& \Biggl\{\frac{90}{250}-1.96 \sqrt{\frac{3^2 \cdot4^2}{25^2\cdot5^2}\cdot\frac{1}{10}} < p < \frac{90}{250} + 1.96\sqrt{\frac{3^2 \cdot4^2}{25^2\cdot5^2}\cdot\frac{1}{10}}  \Biggr\} \\\\

\Leftrightarrow 
&Pr& \Biggl\{\frac{90}{250}-1.96\cdot  \frac{3\cdot4}{25\cdot5}\sqrt{\frac{1}{10}} < p < \frac{90}{250} + 1.96 \cdot\frac{3\cdot4}{25\cdot5}\sqrt{\frac{1}{10}}\Biggr\} \\\\

\Leftrightarrow 
&Pr& \bigl\{0.36-1.96\cdot 0.096\cdot 0.3162 < p <0.36 + 1.96 \cdot 0.096\cdot 0.3162 \bigr\} \\\\

\Leftrightarrow 
&Pr& \bigl\{0.36-0.0595 < p <0.36 + 0.0595\bigr\} \\\\

\Leftrightarrow 
&Pr& \bigl\{0.3005 < p <0.4195\bigr\} \\\\

\end{eqnarray}

これで答えがでました。
「大学生が免許を持ってる割合が、約30%〜約42%になる確率は95%」みたいです。

2017統計学Ⅱ  NO.4 問5 解説

問題5 個人的な難易度★★★ 


母集団分布が次のような密度をもつ連続型の分布であるとする。


  x^n = \left\{ \begin{array}{ll}

     \frac {1}{\theta^2}  xe^{-x/ \theta} & (x\geqq0) \\
    0 & (それ以外)

  \end{array} \right.

ここから得られた5個の標本の値が、2.4,3.2,3.0,2.8,3.0であった。未知のパラメータ\thetaを最尤法で推定するとき、その推定値を求めよ。




〜解き方手順〜


他の問題と違って電卓ゲーではないため、そもそも数学がすっごく苦手な人は捨てちゃいましょう。今回は、対数と微分はなんとかなるって人なら問題ないと思います。

この手の推定値の問題は、「最大値を満たす値を求める」とおんなじです。つまり数Ⅱでやった「微分して=0に置く」が出来ればOKです。


テスト解けりゃいいよって人は、尤度関数=標本の数だけ掛け算する程度に思ってくれてれば

1,尤度関数を立てる。
2,尤度関数を対数で置き換える。
3,できた対数尤度関数を微分
4,最大値を満たすθを求める。

基本的な流れ自体は難しくないんだけど、対数、微分等の高校でやった数学がアウトだとキツイ



〜解説〜

まず尤度関数L(\theta)を作るところから、
素数が5個なので

 \begin{eqnarray}
L(\theta) &=& \prod_{i=1}^5 \frac {1}{\theta^2}  x_ie^{-x_i/ \theta}
\end{eqnarray}


この\Piは「i=1のときの値からi=5のときの値まで掛け算します」って記号
だから

L(\theta)=
\frac {1}{\theta^2}  x_1e^{-x_1/ \theta} ×\frac {1}{\theta^2}  x_2e^{-x_2/ \theta}×\frac {1}{\theta^2}  x_3e^{-x_3/ \theta}×\frac {1}{\theta^2}  x_4e^{-x_4/ \theta}×\frac {1}{\theta^2}  x_5e^{-x_5/ \theta}


後々対数に直すから、掛け算ごとに分解しておく。
今回は \frac {1}{\theta^2}xe^{-x_i/ \theta}の掛け算だから3つに分解。


\begin{eqnarray}
L(\theta) &=& (\frac {1}{\theta^2})^5  ×\prod_{i=1}^5x_i × e^{\sum_{i=1}^5 -\frac{x_i}{\theta}}\\\\
L(\theta) &=& ({\theta}^{-2})^5 ×\prod_{i=1}^5x_i × e^{\sum_{i=1}^5 -\frac{x_i}{\theta}}\\\\
L(\theta) &=& {\theta}^{-10} ×\prod_{i=1}^5x_i × e^{\sum_{i=1}^5 -\frac{x_i}{\theta}}
\end{eqnarray}


今度はこれを対数に直す。


\log L(\theta) = \log ({\theta}^{-10} ×\prod_{i=1}^5x_i × e^{\sum_{i=1}^5 -\frac{x_i}{\theta}})


\logの掛け算は足し算に直せるから


\log L(\theta) = \log {\theta}^{-10} +\log (\prod_{i=1}^5x_i ) + \log(e^{\sum_{i=1}^5 -\frac{x_i}{\theta}})


例として\log x ^ 2 = 2\log xになることと\log e ^ {2x} = 2x になることを使って
(真ん中の項は後々\theta微分したときになくなるから放置)


\begin{eqnarray}
\log L(\theta) &=& -10 \log \theta +\log \prod_{i=1}^5x_i  + \sum_{i=1}^5 -\frac{x_i}{\theta}\\\\
\log L(\theta) &=& -10 \log \theta +\log \prod_{i=1}^5x_i  -\frac{1}{\theta} \sum_{i=1}^5 x_i
\end{eqnarray}


ここからやっとこ微分します。

\begin{eqnarray}
(\log x)' = \frac{1}{x}\\\\
(\frac{1}{\theta})' = (\theta^{-1} )' = -{\theta}^{-2}
\end{eqnarray}

になることを使って
上の式を\thetaについて微分して=0とおくと


\begin{eqnarray}
\frac{d\log L(\theta)}{d(\theta)} &=& \frac{-10}{ \theta}  + \frac{1}{\theta^2} \sum_{i=1}^5 x_i &=& 0
\end{eqnarray}


両辺に\theta^2をかけて整理すると、
 

\begin{eqnarray}
 -10{\theta}  +\sum_{i=1}^5 x_i &=& 0\\\\
10{\theta} = \sum_{i=1}^5 x_i \\\\
{\theta} = -\frac{1}{10}\sum_{i=1}^5 x_i
\end{eqnarray}


あとは\begin{eqnarray}\sum_{i=1}^5 x_i\end{eqnarray}の値を出す


\begin{eqnarray}
\sum_{i=1}^5 x_i &=& 2.4 + 3.2 + +3.0 + 2.8 + 3.0\\
&=& 14.4
\end{eqnarray}


したがって答えは


\begin{eqnarray}
\theta &=& \frac{1}{10} ×14.4 \\\\
&=& 1.44
\end{eqnarray}

2017統計学Ⅱ  NO.4 問1(ア) 解説

問題1 個人的な難易度★ 

50人の人に、あるゲームが好きかどうかを訪ねたところ、30人が好きだと答えた。この結果から、このゲームが好きな人の割合{(p)}の信頼係数95%の信頼区間を求めなさい。
ア)正規分布による近似から、二次方程式を解いて、区間を作る。


〜解き方手順〜


電卓ゲーです。覚えることも少ないし解くだけならカンタンです。ただし、電卓の打ち間違いにだけは注意しましょう。


1,{n}(標本の数)、{x}(このゲームが好きな人の比率)の値をチェック。
2,\begin{equation}
  (n + 限界値^2)p^2 - (2x + 限界値^2)p + x^2/n = 0
\end{equation}を解の公式を用いて解く。


限界値と上の二次方程式については区間推定:比率の記事で解説。
細かく知る必要なければ、


 ◎信頼係数90%のとき:\begin{equation}限界値 = 1.64\end{equation}
 ◎信頼係数95%のとき:\begin{equation}限界値 = 1.96\end{equation}
 ◎信頼係数99%のとき:\begin{equation}限界値 = 2.58\end{equation}

 ◎\begin{equation}
  (n + 限界値^2)p^2 - (2x + 限界値^2)p + x^2/n = 0
\end{equation}


を覚えておくこと以外に特にやることはなし。
導出過程は難しくないから覚えなくても全然OK。


〜解説〜

n = 50、x = 30 、限界値 = 1.96
\begin{equation}
  (n + 限界値^2)p^2 - (2x + 限界値^2)p + x^2/n = 0
\end{equation}に代入すると
\begin{equation}
  (50 + 1.96^2)p^2 - (60 + 1.96^2)p + 30^2/50 = 0
\end{equation}

\begin{equation}
  ap^2 - bp + c = 0
\end{equation}のかたちになっているのでここから解の公式


解の公式を使うため、a,b,cをあらかじめ求めておく。

a = 50 + 1.96^2
    = 50 + 3.8416
    = 53.8416

b = 60 + 1.96^2
    = 50 + 3.8416
    = 53.8416

c = 30^2/50
   = 900/50
   = 18

ここから解の公式を解いていく。



 \begin{eqnarray} p &=& \frac{b \pm \sqrt{ b^2-4ac }}{2a} \\
p &=& \frac{63.8416 \pm \sqrt{ 63.8416^2-4×53.8416×18 }}{2×53.8416}\\\\
p &=& \frac{63.8416 \pm \sqrt{ 4075.74989-3876.5952 }}{107.6832} \\\\
p &=& \frac{63.8416 \pm \sqrt{ 199.15469}}{107.6832} \\\\
p &=& \frac{63.8416 \pm {14.1122177562565}}{107.6832}\\\\

p_1について\\

p_1 &=& \frac{63.8416 + 14.1122177562565}{107.6832}\\\\
p_1 &=& \frac{77.9538177562565}{107.6832}\\\\
p_1 &=& 0.72391810195329\\\\

p_2について\\
p_2 &=& \frac{63.8416 - 14.1122177562565}{107.6832}\\\\
p_2 &=& \frac{49.7293822437435}{107.6832}\\\\
p_2 &=& 0.46181189121185\\\\

\therefore 0.46 \leqq p \leqq 0.72
\end{eqnarray}


類似問題:
基本統計学 有斐閣 P219【例8.1】

No.486 3 Straight Win(3連勝) (yukicoder,python3)


battle_list = input()

#初期値は100にしとく(文字列が<=100だしとりあえず)
#これは、OOOもしくはXXXがないとき、初期値が0だと結果が逆になるため

m = 100
n = 100

if "OOO" in battle_list:
    n = battle_list.index("OOO")

if "XXX" in battle_list:
    m = battle_list.index("XXX")

#文字列の位置が若いほうが勝利
if n > m:
    print("West")   
    
elif n < m:
    print("East")
    
#どちらも三連勝しない場合    
else:
    print("NA")
 
    

No.143 豆 (yukicoder,python)

最近[int(i) for i in input().split()]ばっかり使ってる

#説明不要!!

grain,bag,family=[int(i) for i in input().split()]
age_list = [int(i) for i in input().split()]

sum_eat = sum(age_list)
sum_grain = grain * bag

if sum_grain >= sum_eat:
    print(sum_grain - sum_eat)
    
else:
    print(-1)