読者です 読者をやめる 読者になる 読者になる

ようへいの日々精進XP

よかろうもん

ショロカレ 11 日目 | 初老と Python(2)〜 dict 型のデータを colletions モジュールで集計する 〜

python ショロカレ2016

これは

初老丸アドベントカレンダー 11 日目の記事です。

qiita.com

ということで、小ネタ大ネタを交えて 12/25 まで張り切っていきましょう。

初老と Python(2)

福岡市の人口

上司:あー、この list の中に入っている dict 型のデータから各キー毎の数値を集計してくさ

初老:承知仕り、要は福岡市の男性と女性の人数を算出しろってことですな

渡された、dict 型データは以下のようなデータ。

_dict = [
    {'東区': {'男':151463, '女': 159614}},
    {'博多区': {'男': 111692, '女': 122038}},
    {'中央区': {'男': 86813, '女': 108072}},
    {'南区': {'男': 120229, '女': 137904}},
    {'城南区': {'男': 61674, '女': 69562}},
    {'早良区': {'男': 102788, '女': 115247}},
    {'西区': {'男': 100422, '女': 108619}}
]

2016 年 12 月現在の福岡市の区別の人口。(※こちらより引用させて頂きました。)

collections モジュール

dict 型を集計する場合、collections を使えば超簡単に集計することが出来るったい。(データ構造にも寄ると思う。複雑な dict だとそれなりに辛いと思う)

# -*- coding: utf-8 -*-

import collections

_dict = [
    {'東区': {'男':151463, '女': 159614}},
    {'博多区': {'男': 111692, '女': 122038}},
    {'中央区': {'男': 86813, '女': 108072}},
    {'南区': {'男': 120229, '女': 137904}},
    {'城南区': {'男': 61674, '女': 69562}},
    {'早良区': {'男': 102788, '女': 115247}},
    {'西区': {'男': 100422, '女': 108619}}
]

counter = collections.Counter()
for data in _dict:
    for k, v in data.iteritems():
        counter.update(v)
#
print '男: ' + str(counter.get('男'))
print '女: ' + str(counter.get('女'))

男女の人口を報告

初老:上司さん、以下のような感じでいいすかねー。

$ python test.py
男: 735081
女: 821056

初老:女子率高いですねー

上司:うむ、さすが福岡ったい

以上

メモでした。

2016 年 12 月 9 日(金)

日々

ジョギング

  • 香椎浜 x 2 周
  • ペースはだいたい 4'45"/km くらい
  • この位のペースが適度に息も上がって良い

やっと金曜日感

が朝からあった。

夕食

は最近、ずーっと鍋。鍋好きにはたまらんばい。

ショロカレ 10 日目 | 初老と AWS(1)〜 AWS CLI で S3 バケット以下にフォルダを作る時にどげんすっとや 〜

aws ショロカレ2016

これは

初老丸アドベントカレンダー 10 日目の記事です。

qiita.com

ということで、小ネタ大ネタを交えて 12/25 まで張り切っていきましょう。

初老と Amazon S3

S3 にフォルダという概念は...

なかとです。これはよく知られたことくさ。

docs.aws.amazon.com

キーとは、バケット内のオブジェクトの固有の識別子です。バケット内のすべてのオブジェクトは、厳密に 1 個のキーを持ちます。バケット、キー、バージョン ID の組み合わせによって各オブジェクトが一意に識別されるため、 Amazon S3 は「バケット + キー + バージョン」とオブジェクト自体の基本的なデータマップであると考えることができます。

以下のように oreno-bucket がバケットで folder1/file.txt がオブジェクトキーとなって hage がオブジェクトの中身(ヴァリュー)となるようです。

bash-3.2$ tree oreno-bucket
oreno-bucket
├── folder1
│   └── file.txt
└── folder2

2 directories, 1 file
bash-3.2$ cat oreno-bucket/folder1/file.txt
hoge

こちら の記事がよく纏まっていて参考になりました。有難うございます。

とは言え、バケット以下を...

フォルダ構造を作成したいことがあるくさ。

マネジメントコンソールからは「フォルダを作成」というボタンが丁寧についているので、ボタンをポチッと押せば「フォルダ」っぽいもの(キー)が作成されるったい。

で、AWS CLI ではどうやって作るのか

aws --region ap-northeast-1 --profile oreno-profile s3api put-object --bucket oreno-bucket --key "folder/"

folder/ のようにお尻に / を付けるだけ。

以上

メモでした。

2016 年 12 月 7 日(水)

日々

奥さん

風邪が長引いている。食欲はあるみたいだから大丈夫かなー。

お昼は

ダイレックスの握り寿司。400 円弱で 12 貫でボリューミー。

2016 年 CM オブザイヤー

youtu.be

2016 年 12 月 6 日(火)

日々

奥さん

風邪が長引いている。早く治ってほしい。

re:Invent 2016 アップデート速報

www.slideshare.net

後で見よう。

考えて仕事をする

blog.tinect.jp

直感で動いているだけなので、反省。

と言いつつ...余裕が無い

困った、困った、こまどりしまい。

ショロカレ 6 日目 | 初老と Python(1)〜 宝塚トップスターが記録された dict 型のデータを特定のキーでグルーピングする 〜

ショロカレ2016 Python

これは

初老丸アドベントカレンダー 6 日目の記事です。

qiita.com

ということで、小ネタ大ネタを交えて 12/25 まで張り切っていきましょう。

初老と Python

参考

困った、困った、こまどり姉妹

上司:あー、この dict 型のデータを使って、「クラス」毎に「名前」を並べ替えてほしい

初老:あ、はい...

渡された、dict 型データは以下のようなデータ。

top_stars = [
 {'名前': '明日海 りお', 'クラス': '花組'},
 {'名前': '花乃 まりあ', 'クラス': '花組'},
 {'名前': '珠城 りょう', 'クラス': '月組'},
 {'名前': '愛希 れいか', 'クラス': '月組'},
 {'名前': '早霧 せいな', 'クラス': '雪組'},
 {'名前': '咲妃 みゆ', 'クラス': '雪組'},
 {'名前': '紅 ゆずる', 'クラス': '星組'},
 {'名前': '綺咲 愛里', 'クラス': '星組'},
 {'名前': '朝夏 まなと', 'クラス': '宙組'},
 {'名前': '実咲 凜音', 'クラス': '宙組'},
]

どうやら、上司は宝塚のファンらしい。

kageki.hankyu.co.jp

※各スターのお名前は上記のサイトより拝借いたしました。この場を借りてお礼を申し上げます。

itertools.groupby

Python には標準で itertools.groupby というモジュールが提供されているので、これを使うことで瞬殺。

# -*- coding: utf-8 -*-

import itertools
from operator import itemgetter

top_stars = [
 {'名前': '明日海 りお', 'クラス': '花組'},
 {'名前': '花乃 まりあ', 'クラス': '花組'},
 {'名前': '珠城 りょう', 'クラス': '月組'},
 {'名前': '愛希 れいか', 'クラス': '月組'},
 {'名前': '早霧 せいな', 'クラス': '雪組'},
 {'名前': '咲妃 みゆ', 'クラス': '雪組'},
 {'名前': '紅 ゆずる', 'クラス': '星組'},
 {'名前': '綺咲 愛里', 'クラス': '星組'},
 {'名前': '朝夏 まなと', 'クラス': '宙組'},
 {'名前': '実咲 凜音', 'クラス': '宙組'},
]

top_stars = sorted(top_stars, key=itemgetter('クラス'))
for key, value in itertools.groupby(top_stars, key=itemgetter('クラス')):
    print '■ ' + key
    for i in value:
        print i.get('名前')

トップスター達を上司の報告

初老:上司さん、以下のような感じでいいすかねー。

$ python test.py
■ 宙組
朝夏 まなと
実咲 凜音
■ 星組
紅 ゆずる
綺咲 愛里
■ 月組
珠城 りょう
愛希 れいか
■ 花組
明日海 りお
花乃 まりあ
■ 雪組
早霧 せいな
咲妃 みゆ

上司:うむ。

以上

メモでした。

2016 年 12 月 4 日(日)

日々

福岡国際マラソン

  • 川内優輝選手の走りが力強くて感動、パワーをもらった

WebSocket

  • WebSocket 自体をちゃんと理解していなかったので Flask-SocketIO を触りながら挙動を勉強した

ショロカレ 5 日目 | 初老と WebSocket 入門(1)〜 Flask-SocketIO を使ってチャットっぽい何か 〜

ショロカレ2016 Flask WebSocket

これは

初老丸アドベントカレンダー 5 日目の記事です。

qiita.com

ということで、小ネタ大ネタを交えて 12/25 まで張り切っていきましょう。

初老と WebSocket

WebSocket に対する前提知識

  • よくわからんばい
  • Web サーバーとクライアントが繋ぎっぱなしにして双方向でデータをやりとりする

くらいの知識しか無かったです。すいません。

参考にさせて頂いた記事等

等、WebSocket 自体はプロトコルの名前で、Socket.IO というのが WebSocket を Node.js で実装したものということを理解するのに二日(土日)掛かってしまいもした。

でも、デモ

実際に動かしてみないとピンとこないので

最近、ちょこっと触る機会があった Flask で WebSocket アプリケーションを弄ってみたいと思って選択したのが Flask-SocketIO です。

github.com

サンプルも付いているし、miguelgrinberg さんの写真に親近感を覚えました。

サンプル

Flask-SocketIO に含まれていたサンプルを弄ってみただけです。

github.com

動かしてみる

docker-compose で

$ git clone https://github.com/inokappa/Flask-SocketIO-demo.git
$ Flask-SocketIO-demo
$ docker-compose up -d

確認。

$ docker-compose ps
           Name                    Command          State                     Ports
-----------------------------------------------------------------------------------------------------
flasksocketiodemo_nginx_1    nginx -g daemon off;   Up      0.0.0.0:19190->19190/tcp, 443/tcp, 80/tcp
flasksocketiodemo_socket_1   python app.py          Up      0.0.0.0:5001->5001/tcp

ブラウザで

f:id:inokara:20161205081450p:plain

上のブラウザで「ハゲ」を入力して、下のブラウザで「ズラ」を入力して、チャットっぽいものを実現出来ている感じ。

以上

チャットっぽい何かでした。今後、この雑なチャットアプリケーションを使って WebSocket を勉強していきたいと思います。