Kyam気まぐれブログ

ITや日常であった面白いこと

defaultdict()についてわかりやすくまとめて見た

ども Kyamです。

defaultdict()メソッドについて記録して行きたいと思います。

python3のリファレンスを読んでわかる人もいると思うので、下にurlを貼っておくので見てください。

http://docs.python.jp/3.3/library/collections.html#collections.defaultdict

主は読んでもなんとなくというか正直全然わかりませんでした。

といいますと、"新しいディクショナリ状のオブジェクト"がまず理解できなかったからです。

ですので、私はdefaultdictの使用例を見ながら友人のサポート付きで理解していきました。

それでは、リファレンスからプログラムを引用して理解していきましょう。

>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
...     d[k].append(v)
...
>>> list(d.items())
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

簡単に言えばこのソースコード

それぞれの色に付属してある数をリスト型としてまとめているということです。

これは、最後の部分でわかると思います。でもこれではdefaultdict()が何をしているのかわからないので1行ずつ読んで行きましょう

まず、

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]

この文章は、見ての通り、

sはリスト型で中に5つのタプルの要素を持っている状態です。

ここでは、特にkey値とかvalue値などには別れていません。

リストの中にタプルがあり、それぞれのタプルに('',)

>>> d = defaultdict(list)

でこれは何をしているかというと以下のことをしています。

d={:[]}

「は??」となっているとおもいますが、言葉であらわすと理解できると思います。

デフォルトのvalue値にリストオブジェクト(型)が入ったdict型の変数dになる

ということです。

なかなかこれでは具体的にわからないと人もいると思うのでプログラミングで試して見ましょう。

>>> d=collections.defaultdict(list)
>>> d
defaultdict(<class 'list'>, {})

 

と返してきますこれでもよくわからないので具体的に値を入れてきましょう。

では

次にkey名をblueとしデフォルトのvalueオブジェクトがリストオブジェクトなのでappend()で12を入れていきましょう

 

>>> d['blue'].append(12)
>>> d
defaultdict(<class 'list'>, {'blue': [12]})

 

一個だとわかりづらいので何個か入れていきましょう

 

>>> d['blue'].append(23)
>>> d['blue'].append(2)
>>> d['yellow'].append(4)
>>> d['red'].append(1)
>>> d['yellow'].append(31)
>>> d['red'].append(52)
>>> d
defaultdict(<class 'list'>, {'blue': [12, 23, 2], 'yellow': [4, 31], 'red': [1, 52]})

 

お分りいただけたでしょうか。

このようにデフォルトのオブジェクトがリストであるから、このようなことが可能なのです。

それではデフォルトのオブジェクトが違うオブジェクトならどうなるのでしょうか?

それではデフォルトをint型にしてみて同じ動作をしていきましょう

>>> i=collections.defaultdict(int)
>>> i
defaultdict(<class 'int'>, {})
>>> i['blue'].append(12)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'append'

 

エラーが発生しました!

それはそうですよねintオブジェクトにはappend()なんてないんですからつかえません。このように指定したオブジェクトのメソッドを使うことは可能になります。

 

しかし、

注意 代入演算子は別物

>>> d['blue']=12
>>> d
defaultdict(<class 'list'>, {'blue': 12, 'yellow': [4, 31], 'red': [1, 52]})
>>> d['yellow']=12
>>> d['red']=12
>>> d
defaultdict(<class 'list'>, {'blue': 12, 'yellow': 12, 'red': 12})

このように代入演算子でvalueのオブジェクトも簡単に書き換えることができてしまうのです。この場合入っているのはint型なのです。ですから例で表すと、key値を'blue'で指定した場合、リスト型のメソッドはできないので注意してください!

 

しかしvalue値のデフォルトのオブジェクトは変わることはないので新しくkey値を入れた時はリスト型として入れることができるのです

 

それでは、先ほどのプログラムの続きの説明に戻っていきましょう

>>> for k, v in s:
...     d[k].append(v)

 for 文でsの要素はタプルであるためにこのようにkにはvにはを回ることに代入していって、defaultdict型のdにkey値とvalue値をそれぞれkとvを代入していきます

>>> list(d.items())
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

よってdの要素はこのような形になるのです。

 ソースコードのまとめを以下のようにまとめておきます。

>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
#リスト型 5つのタプル型 >>> d = defaultdict(list) # d={:[]} ー> value値のデフォルトオブジェクト(型)がlist
>>> for k, v in s: ... d[k].append(v)
#kという名のkey名にvという値をpush
... >>> list(d.items()) [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
#dの中身の表示

まとめ

お分りいただけたでしょうか??

defaultdict()は

変数としてはdict型ではあるが、デフォルトのvalue値のオブジェクトが指定されたオブジェクトになる

というメソッドなのです。

また他のメソッドも書いていきたいと思います

リクエストやわからないことがあるまたは、何か表現が間違っている場合などがあればどんどん書いてください!!!

やってはいけないことなどが書いてある場合がいってください。早急に消したいと思います。

 

 読むために必要なurl

8.3. collections — コンテナデータ型 — Python 3.3.6 ドキュメント

5. データ構造 — Python 3.6.1 ドキュメント

 より深く理解できたurl

Python defaultdictで辞書のキーの有無を気にせずに処理する - Librabuch

pythonに関する記事書いて行きたいと思います!!

ども Kyamです。

今日からpython3でわからなかったことが頑張って理解した時に再認識して理解を深めるといった目的のためにblogを記していこうと思います。

他には、機械学習や深層学習についても書いて行きたいと思います。

日によって点でばらばらなblogなので投稿日数は頻繁ではありませんが、ご了承ください。。。

誰でもわかる統計学基礎

先日、統計検定を受けると書きましたが、大学とかで学ぶ統計学よりもっと基礎的な部分を簡単に書いていきたいと思います

まず、統計学ってみなさんどのようなものだと考えてますか??

多分、

「調査して結果からグラフ作成」とか

「とったデータとかを標準偏差?とか平均を計算する」

みたいな感じで考えてると思います。イメージはそんな感じであってます。

でも、実際、息子さんから「標準偏差って何?一言で説明して」って言われた時みなさんきっと

「え。。。個々のデータから平均を引いて二乗して・・・」

ってなると思います。そこでここのブログが手助けになっていれば幸いですのでご了承ください。

追時書きますが、ここでは、あくまで小学生でもこうなんだなぁぁって思ってくれることが目標なので、数学的な証明とかは省いていきますので前述に書いておきますね。

振りだしに戻りますが、

統計学とは?」

結論から言いますと、 「標本から母集団の状況を推測する学問」です。

「は?」って思った方が多いと思いますので、紐づいてといていきますね。

 

母集団っていうのは、調べたい調査団体全体のことを言います

標本っていうのはその全体から少しとってきた集団のことです

例をとってみましょう。

f:id:kyam_013:20170502002621p:plain

統計とりたいA高校3年生があったとして、この標的そのものが母集団なんです。

そして、実際にデータをとるのが、3組なんですがそのクラス自体が標本なんです。

その標本で全体を推測するします。補足しますとA高校ではなくて日本と言ったらどうでしょう、実際国民全員を調べるのは困難ですよね。その困難自体を解消するのが統計学なんです。

そして、推測する時に平均とか標準偏差が使われます。

 

とりあえず、次に統計学で使う単語を紐づいてといていきます

という前に、時間も時間なんで、今日はここまでにしておきます

 

これから

学年が上がった主です!!

季節は春になって、桜がさいていますね〜

http://www.tohokukanko.jp/wp/wp-content/uploads/gazo/plan/408/1_20121004201148.jpg

(引用先 : http://www.tohokukanko.jp/fukushima/18897/)

後輩もどんどん増えて、なんか違和感を感じてますww

時は金なり

をもっとうに(ブログは開設したのはいいもののブログを書いていないことは置いといて)

学生を充実させましょうかね////////ドヤ

 

んでさっさと本題に入って行きましょうか

なぜ久しぶりにブログ書こうってなったかっていうと、バイトもやめ、就職も近づいてきている中主は思ったわけですよ。。。

 

3年やし、資格ほしいいいいいと

そして自分と向き合ってみたわけですよ

 

人工知能にたずさって行きたい+数学は割と好き+データ見るのは好き+Pythonいい

 

ということで、統計の知識は必須やんってなって資格あるなら取りたいと思ったわけです!!

そしたらあったわけです🔽

f:id:kyam_013:20170421044017j:plain

いろいろな話を聞くと統計学を勉強するのに一番程よく統計の基礎固めとしての勉強しやすい出題範囲みたいなので受けてみることにしました!! 

詳細が気になるかたはurlを貼っとくのでみてみてくださいね!!

url :  統計検定:Japan Statistical Society Certificate

 

あとは、Deeplearningなどでも数多くの分野で必要な分野の画像処理の勉強もしたかったので、↓受けてみます!!

f:id:kyam_013:20170421045809j:plain

CGーARTSさんが出している資格です

僕は大変ですが

ベーシック:webデザイナー+マルチメディア

エキスパート:CGエンジニア+画像処理エンジニア

のコースで受けてみます!

ここのCGーARTSさんの資格は推薦企業も数多くあり、出題範囲もしっかりしていたので、この資格を取ってみようと思いました!他にも様々な利点もあったので、よかったらみてみて下さい!!

url : CG-ARTS | 検定

 

と言った感じで、

統計検定→6月18日

CG-ARTS検定→7月9日

と結構ハードな感じですが、頑張ってできれば毎日勉強した内容をここにアウトプットしいきたいと思います!! 

やるぞおおおおおおおおおおおおおお!!

 

引用先:

http://www.tohokukanko.jp/fukushima/18897/

統計検定:Japan Statistical Society Certificate

CG-ARTS | 検定

初めてのブログ

始めまして

どもども、こんにちわ!Kyamことこうくんです!

今日はじめてブログ開拓して、これが初投稿です^^!

大学の友人たちが楽しそうにブログのことについて話していたこともあり、自分の技術向上にもいかせそうだなと思い始めてみました。

これから、IT系にまつわるやってみたこととか日常で何かあっ 

たことをブログに書いていきたいと考えています!

日本語がおかしい部分は多々あると思いますが何卒宜しくお願いします!!

f:id:kyam_013:20161123161525j:plain