Tocyukiのブログ

ギターと柔術とプログラミングが好き!

Pythonでインストールされているはずのpipモジュールが読み込みできない場合の対処

boto3を使ってデプロイスクリプトを作成していたら、インストールされているはずのboto3が読み込みできないというエラーが発生

$ python3 test.py
Traceback (most recent call last):
  File "test.py", line 1, in <module>
    import boto3
ModuleNotFoundError: No module named 'boto3'

確認してみると、やはりしっかりとインストールされている

$ pip3 show boto3
Name: boto3
Version: 1.14.34
Summary: The AWS SDK for Python
Home-page: https://github.com/boto/boto3
Author: Amazon Web Services
Author-email: UNKNOWN
License: Apache License 2.0
Location: /usr/local/lib/python3.7/site-packages
Requires: botocore, jmespath, s3transfer
Required-by: 

モジュール読み込みパスが足りていないじゃないのかと疑い、以下のスクリプトを作成し確認

import sys
import pprint
pprint.pprint(sys.path)

やはりLocation: /usr/local/lib/python3.7/site-packagesがないことが判明

['/Users/{USERNAME}/.ghq/repository_path',
 '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python37.zip',
 '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7',
 '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/lib-dynload',
 '/Users/{USERNAME}/Library/Python/3.7/lib/python/site-packages',
 '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/site-packages']

なんでこんなことが起こるのかまでは調べられてないけど、とりあえず、環境変数PYTHONPATHにLocationで表示されたパスを追加したらエラーは出なくなったのでよしとしようw

export PYTHONPATH='/usr/local/lib/python3.7/site-packages:$PYTHONPATH'  

後日談

python2系を動かすとエラーとなってしまったので、やはり根本解決にはなっていない模様

Your PYTHONPATH points to a site-packages dir for Python 3.x but you are running Python 2.x!
     PYTHONPATH is currently: "/usr/local/lib/python3.7/site-packages:$PYTHONPATH"
     You should `unset PYTHONPATH` to fix this.

【Python】リストの要素を頻出順でソートする

やりたいこと

例えば以下のようなリストを

[5, 4, 3, 5, 5, 5, 4, 4, 3, 2]

こうしたい場合のTipsです

[5, 5, 5, 5, 4, 4, 4, 3, 3, 2]

できあがったコード

from collections import Counter

a = [5, 4, 3, 5, 5, 5, 4, 4, 3, 2]
counter = Counter(a)
result = [k for k, v in counter.most_common() for _ in range(v)]
print(result)
# [5, 5, 5, 5, 4, 4, 4, 3, 3, 2]

色々やりかたはあると思うけど、とりあえずリストを手っ取り早く要素毎に辞書形式でカウントアップしてくれるCounterと要素数毎に返してくれるmost_common()を使って実装してみた。

まず、対象のリストをCounter()メソッドを使って要素: 要素数の辞書型で返すようにする

a = [5, 4, 3, 5, 5, 5, 4, 4, 3, 2]
counter = Counter(a)

print(counter)
# Counter({5: 4, 4: 3, 3: 2, 2: 1})

ちなみにtype関数で型を見るとcollection型になっている

>>> type(counter)
<class 'collections.Counter'>

これをさらにmost_common()を使って値の昇順で返すようにして、

>>> counter.most_common()
[(5, 4), (4, 3), (3, 2), (2, 1)]

あとは以下のようなイメージのforループを内包表記で記載すればリストの要素を頻出順でソートすることができた!

このforループを

reuslt = []
for k, v in counter.most_common():
    for _ in range(v):
        result.append(k)

こんな感じで内包表記!

result = [k for k, v in counter.most_common() for _ in range(v)]

もっと良い方法等あれば教えてつかーさい^^

Pythonで機械学習を学ぶための道のり

[2018/07/04] 加筆あり!

ちょっと前につぶやいた内容をもう少し整理しようかと

以下のコンテンツで学習すればいわゆるジュニアクラスレベルにはなれるんじゃないかなぁとか思ったり思わなかったり。

ProgateでPythonの基礎を固める

いまや破竹の勢いでユーザー数を伸ばし、国内でのプログラミングコンテンツの代表格となったProgate!こちらのPythonのコンテンツも非常に良質で基礎固めにはモッテコイ!

prog-8.com

ゼロから始めるPython

AIや機械学習でも人気のプログラミング言語「Python」、インストールからはじめPythonに触れながら学んでいく連載講座。

news.mynavi.jp

自然言語処理100本ノック

東北大学の乾・鈴木研究室で提供されている「自然言語処理100本ノック」。Pythonでの基本的な言語処理から、UNIXコマンド、正規表現、DBの取扱、機械学習などの学習にモッテコイのコンテンツ!

Dockerファイル付きでJupyterNotebookで学習できるようにしてみましたよ!

github.com

キカガクUdemy 機械学習コンテンツ

機械学習というと数学がネックになることが多いかと思うけど、このキカガクのUdemyコンテンツはその数学の取っ掛かりにはモッテコイ!アルゴリズムに関するコンテンツもあるのでおすすめ!アルゴリズムの後編が待ち遠しい!

www.udemy.com

www.udemy.com

www.udemy.com

CODEXA

NumpyやMatplotlib、Pandasなどの入門コンテンツが無料で学習できる!入門コンテンツが終わったら有料コンテンツもあるのでそちらにもトライしてみよう!

www.codexa.net

Aidemy

こちらは有料コンテンツだけど、NumpyやMatplotlib、Pandas、教師あり学習、教師なし学習、自然言語処理、ディープラーニングなどさまざまなコンテンツの学習が可能!Pythonの基礎など、入門コンテンツは一部無料で学習可能!

aidemy.net

松尾研のデータサイエンティスト養成講座&ディープラーニング基礎講座

東大の松尾研によるJupyter Notebook形式で作成されたコンテンツで、Qiitaでの解説記事も合わせてチェケラ!

qiita.com

グローバル消費インテリジェンス寄附講座演習コンテンツ 公開ページ | 東京大学松尾研究室 - Matsuo Lab

Deep Learning基礎講座演習コンテンツ 公開ページ | U-Tokyo Matsuo Lab

Kaggleで分析

基本的な機械学習の知識をつけたらあとはひたすらKaggleで実践を繰り返すのみ!詳細はQiitaの以下の記事で!

qiita.com

Kaggle: Your Home for Data Science

そんな感じで楽しい機械学習ライフを楽しみましょ!

pipのバージョン10はPython2.6に対応してない

こんなエラーがでてきた

あるひCentOS6.Xに以下の流れでpipをインストールしたところエラーがでるようになった

yum -y install python-pip
pip install --upgrade

そしてsetuptoolsをインストールしようとしたところ

# pip install --upgrade setuptools
Traceback (most recent call last):
  File "/usr/bin/pip", line 7, in <module>
    from pip._internal import main
  File "/usr/lib/python2.6/site-packages/pip/_internal/__init__.py", line 42, in <module>
    from pip._internal import cmdoptions
  File "/usr/lib/python2.6/site-packages/pip/_internal/cmdoptions.py", line 16, in <module>
    from pip._internal.index import (
  File "/usr/lib/python2.6/site-packages/pip/_internal/index.py", line 526
    {str(c.version) for c in all_candidates},
                      ^
SyntaxError: invalid syntax

こんなエラーが出たのでどうしたもんかと思ったら、Githubのissueにありました。

github.com

10.0 drops support for Python 2.6. See https://github.com/pypa/pip/blob/release/10.0.0/NEWS.rst#deprecations-and-removals.

It's noted in the "latest" version of the docs (https://pip.pypa.io/en/latest/installing/#python-and-os-compatibility) which will be promoted to "stable" once pip 10 is released.

まとめ

Python2.6系でpip upgradeしちゃだめだめ!

GoogleがJupyterNotebookをサービス化した「Google Colaboratory」がやばすぎる!!

こんなサービス待ち望んでました

最近、JupyterNotebookが便利だなぁと思いまくっていて、はやくどこかがWEBサービス化してくんないかなぁと思ったらGoogleさんがやってくれたよ!

スプレッドシートとの連携や、GoogleDriveでの共有など、Googleの既存サービスとの連携によるシナジーやばすぎますね!!

ちょっと使い倒してみてまた使用感等ブログに書いてみたいなぁと思います!

gigazine.net

東大松尾研の無料コンテンツがやばいから今すぐとりかかろう

無料でこのコンテンツが手に入るのすごい

最近、東大松尾研がすごい。
なにがすごいって演習コンテンツを無償公開してるんですが、そのクオリティがすごい。
しかもJupyterNotebook使ってるのもいい。
今後、こういった学習コンテンツはJupyterNotebookで公開されていく流れが加速していくんだろうなぁ~。

GCIデータサイエンティスト育成講座

Jupyter Notebook形式で作成された全15章の演習コンテンツ。データのセットアップから解析、可視化やモデルのアウトプットまでを一気通貫で学べるという。データサイエンスの主要言語Pythonの基礎から学べるほか、統計的数値計算や機械学習に関する技術、SQLやMongoDB、分散処理フレームワークのSparkなど、ビッグデータ解析に関する技術も学習できる。
個人で学習する目的のみで無償で利用でき、講習会や教室などでの利用は不可。クリエイティブ・コモンズの「CC-BY-NC-ND」(表示-改変禁止-非営利-一般)が適用されている。

www.itmedia.co.jp

weblab.t.u-tokyo.ac.jp

Deep Learning基礎講座

これは東京大学の公開講座「Deep Learning基礎講座」で実際に使っている演習コンテンツ

Jupyter Notebook形式で作成された研究者向け演習コンテンツで、Jupyter環境があれば利用可能。GPUを利用し、実際にモデルを学習させながら技術を習得できる。線形代数や機械学習が前提知識として必要。コードはTensorFlowと、Numpy、Scipy、Scikit-learnなど標準的なライブラリで構成した。公開したのは演習パートのみで、講義パートのコンテンツは別。
個人で学習する目的のみで無償で利用でき、講習会や教室などでの利用は不可。クリエイティブ・コモンズの「CC-BY-NC-ND」(表示 -改変禁止- 非営利-一般)が適用されている。

www.itmedia.co.jp

weblab.t.u-tokyo.ac.jp

Pythonで文字列をリスト化するTips

やりたいこと

  • たとえばこんな文字列をそのままリスト化したいときなどに
  • str型の数字をint型に直してリスト化したいときなど

コード

map関数をつかった場合

>>> text = '1 2 3 4 5'
>>> num_list = list(map(int, text.split(' ')))
>>> num_list
[1, 2, 3, 4, 5]
>>> text = 'A B C D E'
>>> word_list = list(map(str, text.split(' ')))
>>> word_list
['A', 'B', 'C', 'D', 'E']

リスト内包表記をつかった場合

>>> text = '1 2 3 4 5'
>>> num_list = [int(num) for num in text.split(' ')]
>>> num_list
[1, 2, 3, 4, 5]
>>> text = 'A B C D E'
>>> word_list = [word for word in text.split(' ')]
>>> word_list
['A', 'B', 'C', 'D', 'E']

解説

map関数をつかった場合

なんといってもキモはmap関数なわけですが、map関数はリストのような複数の要素をもったオブジェクト(シーケンス)と関数を引数としてうけとり、そのシーケンスの各要素をうけとった関数にわたして実行してくれます。

このように、関数をうけとる関数を高階関数と呼び、関数型言語でよく使われる機能です。
Pythonではmapのほかにfilterreduceなどの高階関数があります。

map関数の使い方は以下のように、第一引数が関数(またはlambda式)第二引数がシーケンスとなります。

map(function, sequence_object)

以下はさきほどのnum_listをつかってlambda関数をつかったmap関数の例ですが、Python3.xではmap関数の返り値はmap型のオブジェクトとなります。
リスト型のオブジェクトとして使いたい場合はlist関数などを使用します。

>>> num_list
[1, 2, 3, 4, 5]
>>> map_object = map(lambda x: x**2, num_list)
>>> map_object
<map object at 0x7f133c9660f0>
>>> type(map_object)
<class 'map'>
>>> list(map_object)
[1, 4, 9, 16, 25]

リスト内包表記をつかった場合

map関数をつかわなくてもリスト内包表記で同じような結果が得られますが、まぁ、これは好みの問題かもしれないです。
実行速度もどちらが早いというわけでもないですが、読みやすいコードであればどちらでもいいのかなというのが私の見解です。

PythonのTypeHints ~型アノテーション~

なんじゃこりゃ?

CheckIOを始めてみたらいきなりよくわからない表記が・・・。

py.checkio.org

def correct_sentence(text: str) -> str:
    """
        returns a corrected sentence which starts with a capital letter
        and ends with a dot.
    """
    # your code here
    return text

(text: str) -> strってなんなんでしょうか?(怒)

というわけで調べてみたところ、Python3.5から導入されたTypeHintsという機能のようです。

www.python.org

TypeHintsってなんぞやというところですがようするに型について注釈をつけられる(型アノテーション)ということのようです。

ちなみにアノテーションとはあるデータに対して関連する情報(メタデータ)を注釈として付与することを指します。

アノテーション - Wikipedia

コード解説

TypeHintsの仕様に従って上述のコードでアノテーションを実際に行っているのは以下の部分になります。

  • text: str: 引数textが、str型であることをアノテート
  • -> str: 関数correct_sentenceの返り値の型がstrであることをアノテート

つまり、

  • 引数の型はstr型だよ
  • 関数の返り値はstr型だよ

ということですね!

参考

qiita.com

Pythonで言語処理100本ノックするならJupyterNoterbook + Dockerがいいよという話

2年連続でインフルエンザにかかり、床に伏しております。

こないだ娘もインフルエンザにかかったからやばいかなーと思いつつやはりやばかった。
診察結果はインフルエンザB型、ちなみに娘はインフルエンザA型。

関係ないんかい。

そんなこんなで床に伏しつつ、最近あまりいじれていなかったJupyterNotebookでもいじろうと思って何やろうかなぁと思ったのですが、あまり進められていなかったこいつを再開しようかなと思ったところでございます。

www.cl.ecei.tohoku.ac.jp

この課題、一応Gitで管理しようかなぁとか思ったりしたのですが、めんどいのですよ。
しかも後半の方でDBを扱う課題もあるんですが、いちいち環境作るのもめんどくなぁ・・・、

はっ!??これってDockerも使えば幸せな感じになるんじゃないのか・・・!?

ということに気付いたため、さっそくリポジトリを作ってみました。

github.com

これでdocker-compose upするだけでJupyterNotebookの環境もMongoDBの環境も一発OKですぐにノックをすすめることができますね!!

微妙に作るのめんどくさかったので是非使って下さい^^

みんなのPython勉強会#27 に参加してきた!

はじめに

久しぶりに勉強会に参加してきました〜!

びっくりしたこと

この規模の勉強会に参加するのが初めてだったのですが、まずびっくりしたのが受付の行列の長さw

そしてちゃんと領収書もくれて手際の良さがすばらしかったです。

あとなんといっても

懇親会が楽しみになりました。

プログラム

今回のプログラムはどれも内容的に気になるものばかりだったのでとても楽しみだったのですが、期待どおりとても楽しむことができました!

Talk 1:「脱写経のススメ〜書籍のレールから踏み出そう〜」

最初のプログラムはこの勉強会に20回以上参加しているという@soogieさんの発表でした。

「脱写経のススメ」ということで今の自分にもとても刺さる内容でした。

とにかく、モチベーションがあがりました!

slideship.com

デモにJupyterNootbook使ってたのでとてもわかり易かったです。

Talk 2:「SeleniumでWebと戯れよう」

次のプログラムはテストの女王こと?@nkns165さんの発表でした。

ちょうど、今の業務でSeleniumを取り入れようかなぁと思っていたのですごく参考になりました!

SeleniumはテスティングツールではないためAllure等のテスティングフレームワークも組み合わせるといいとのことでここらへんも試してみたいなぁ。

そして8/9がバグの日として正式に認定されているということを初めて知りましたw

下記の本の翻訳もされるということで楽しみ!

The Way of the Web Tester: A Beginner's Guide to Automating Tests

The Way of the Web Tester: A Beginner's Guide to Automating Tests

Talk 3:「Pythonの会社を9年間経営してきて分かったこと〜Pythonistaの仕事、Pythonとの良いかかわりかた」

そして最後はPythonをメイン言語して採用し、Pythonという言語でブランディングを進めてきたビープラウドの@haru860社長の発表でした。

Pythonという言語でブランディングをし、採用に苦労したということがないそうで

ちゃんと信念、信条をもってチームビルディングをしている会社はやはり良い会社だなと思いました。

関係ないけど、エンバシーライティングなるものを学んでからはてブ数が飛躍的に伸びたと言っていました。

ちょっと気になる。

いちばんやさしいPythonの教本をもらいました

ビープラウド@haru860社長が発売前の書籍を三冊持ってきていて、最初の一冊目、二冊目はブログに書いてくれる人ということで贈呈していて、三冊目はFacebookやTwitterで書いてくれる人ということで乗り遅れてはいけないと手を上げてゲットしました。

いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)

いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)

  • 作者: 鈴木たかのり,杉谷弥月,株式会社ビープラウド
  • 出版社/メーカー: インプレス
  • 発売日: 2017/08/10
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

ちゃんと読んだら書評的なものも書きたいと思います!

ぱらぱらと見てみるとPythonを使った題材を広く扱っていて実際に試しているのが楽しみ!

懇親会では安定のぼっち

というわけで生ビール飲みたくて懇親会も参加したのですが、いつも通り中々他の方に話しかけることができず、しばらくぼっちでいると運営の人が声をかけてくれてすこしお話することができました。

そしてピザ等も出ていたので腹ごしらえしてきたことを若干後悔・・・。

でもこのコミュ障はちょっと早急に改善しないとまずいなぁと感じていて、どうしたものか。。。

典型的な内弁慶なもので。。。

まとめ

とりあえず、この勉強会にも定期的に参加してモチベーションを落とさずやっていきたいな!

すでに次の勉強会には登録できたので次も参加するぞ〜!