Python関連のことを調べてみた2019年10月31日

Python関連のことを調べてみた2019年10月31日
目次

Pythonのパッケージとモジュールを理解してみる

# はじめに

Pythonを触っていると、モジュールとパッケージの違いがよく分からなくなります。
特に、PyCharmというIDEを使っていると、変に気を利かして挙動がおかしくなります。

そのため、パッケージとモジュールとの格闘記をあとから見返せるようにまとめておこうと思います。

# モジュールに触れてみる

まずは、モジュールに触れてみます。

## モジュールとは?

モジュールは、Pythonでは`ファイル`を表します。
つまり、`add.py`というファイルを作ったら`add`というモジュールになります。

モジュールごとに機能を分けることで、シングルファイルへの機能の肥大化を避けることができます。

## ディレクトリ

現在、このようなディレクトリ構成を利用します。

Python_Tutorialというディレクトリの中に
以下が入っています。

“`
.
├── __pycache__
├── calc
│   ├── add.py
│   ├── calc_main.py
│   ├── mul.py
│   └── sub.py
└── main.py
`

元記事を表示

Pythonでシーザー暗号(漢字含む)

# シーザー暗号
[シーザー暗号 – Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%BC%E3%82%B6%E3%83%BC%E6%9A%97%E5%8F%B7)
アルファベットを指定された文字数分ズラすという、原始的な暗号化手法です。

# 実装(アルファベット・数字のみ)

アルファベット、数字のみの場合はpythonの組み込み関数のROT13を使えばできます。
Wiki曰く、伝統的にこういう場合はシフト数は13らしいです。
13にしておけば、同じ関数で暗号化と複合化をこなせるからでしょうね。

“`python
import codecs
codecs.decode(‘Hello, World!’, ‘rot13’)
# ‘Uryyb, Jbeyq!’
codecs.decode(‘Uryyb, Jbeyq!’, ‘rot13’)
# ‘Hello, World!’
“`

# 実装(漢字含む)
今回は、漢字を含む文字列のデータのマスキングが必要だったので、自前で作りました。
アルファベットと数字はA-Z,a

元記事を表示

Django, 多対多関係モデルを用いて簡易アプリケーションを作る

#はじめに
最近個人的にアプリケーション開発していて一つ詰まった箇所として、**models.py**で作成したモデルを**templates**に表示させることがありました。多対多のリレーショナルデータベースのモデルの作成に関する解説は多く見かけ参考にさせていただきましたが、それを**htmlファイル**に表示する方法に関する情報がどうしても**Django初心者**の自分には分かりにくく、理解に時間がかかりました。今回はDjangoの初心者の方でも分かりやすく、**一つの簡易アプリケーション**を開発しながら**多対多関係モデル**の作成、表示方法について解説していきたいと思います。

##今回作成する簡易アプリについて
今回のテーマとして**多対多関係モデル**を扱いますので、まずはモデルを作る前にどのような**アプリ**を作るか書いていきます。分かりやすい例としてパッと出てきたものが**動物園**(上野動物園、旭川動物園など)のリンクを押すと**その動物園にいる動物**(象、キリン、アルパカなど)を表示してくれるアプリケーションだったので、簡易的なものになりますが、そのような*

元記事を表示

Pythonで親ディレクトリにあるモジュールをインポートする

Pythonでメインのスクリプトからモジュールをインポートする方法。メインのスクリプトとモジュールのディレトリ上の位置関係で方法が異なるため、それぞれの場合でメインのスクリプト(main.py)からモジュール(submodule.py)をインポートする方法を説明。

# 同じディレクトリにある場合
ディレクトリ構成
 dir0
 ├main.py
 └submodule.py

“`python:submodule.py
a=’さぶもじゆーる’
“`

“`python:main.py
import submodule

print(submodule.a)
“`

“`shell:実行結果
dir0> python main.py
さぶもじゆーる
“`

# 子ディレクトリにある場合
ディレクトリ構成
 dir0
 ├main.py
 └dir1
  └submodule.py

“`python:submodule.py
a=’さぶもじゆーる’
“`

“`python:main.py
import dir1.submodule as submodule

p

元記事を表示

anaconda navigatorが起動しなかった話

##前置き
– 動作環境
OSX Catalina

– Anaconda3の配置先
/Users/me/anaconda3

既知の問題通り、Catalinaバージョンアップ後にAnacondaがルートディレクトリから除外されることで様々なエラーが連発しています。
参考:https://qiita.com/akinko/items/1909c8d0145d9ba530b9

私の場合、上記URL通り修正しましたが、Anaconda Navigatorが起動しなかったので解消方法をまとめました。

##本題
結論から言うと下記で直りました。
`conda install -c anaconda qt`

###症状
zshでAnaconda Navigatorを起動しようとすると下記エラーが発生
>QFactoryLoader::QFactoryLoader() checking directory path “/Users/me/anaconda3/bin/platforms” …
>This application failed to start because it

元記事を表示

【python】sakuraサーバー上でpythonを使ってtwitter投稿するまでの話

## 前提

– 環境:さくらレンタルサーバースタンダードプラン(設定は全くいじっていない)。
– 目的:ローカルで動くpythonによるtwitter投稿スクリプトを、ssh接続した上記のサーバー上にて実行できるようにする。

以下のページのコードをサーバー上で実行するために色々セットアップが必要で困ったので、備忘録として記事にしました。
>[PythonでTwitter API を利用していろいろ遊んでみる](https://qiita.com/bakira/items/00743d10ec42993f85eb)

## 手順
### シェルをbashに変更

さくらレンタルサーバーのデフォルトではシェルはcshになっていルため、ログインシェルをbashに変更し、再ログイン。

`$ chsh -s /usr/local/bin/bash`

慣れたシェルじゃないと戸惑うからね。

### pythonのバージョンを3系にアップデート(初期設定では2.7だったので3.7へ)

#### pyenvのインストール

`$ git clone https://github.com/y

元記事を表示

楽天証券からお気に入り登録している銘柄の情報をスクレイピングする

はじめまして。この度、初投稿になります。
最近、データ分析や機械学習を学んでいるため、自分で何か課題を設定してデータ収集や分析のスキルを磨こうと思ったので投稿のきっかけです。

普段は放送関係のエンジニアをしているのですが、投資が好きなので株価取得からまずははじめてみました。

## 前提条件
取得したいデータは日本の個別株ですが、無料でデータを提供しているサイトが非常に限られていることと、以下の問題があることから証券会社から取得する方針にしました。
* サービス終了の恐れがある(過去にも普通にありました)
* 欲しい情報を取得出来ない(出来高がないとか)

また、証券会社はログインしないとサービスが利用出来ず、スクレイピング対策も厳しいため、Seleniumでデータを取得する方針にしました。

## Seleniumの実装
### (1)Chromeドライバを使ってサイトにアクセス
webドライバの使い方は他にもたくさん記事があるのでここでは省略します。

“`
import time
from selenium import webdriver
import csv
import

元記事を表示

ABC 087 B – Coins 解説

# はじめに
https://atcoder.jp/contests/abc087/tasks/
の提出済みの優秀な方(kyunaさん)のコードを解説。

# 問題
**【問題概要】**
500 円玉を $A$ 枚、100 円玉を $B$ 枚、50 円玉を $C$ 枚持っています。これらの硬貨の中から何枚かを選び、合計金額をちょうど $X$ 円にする方法は何通りあるでしょうか?

**【制約】**

+ $0 \le A, B, C \le 50$
+ $A + B + C \ge 1$
+ $50 \le X \le 20000$
+ $A, B, C$ は整数である
+ $X$ は $50$ の倍数である

**【数値例】**
1)
 $A = 2$
 $B = 2$
 $C = 2$
 $X = 100$
 答え: $2$

条件を満たす選び方は以下の 2 通りです。

+ 500 円玉を 0 枚、100 円玉を 1 枚、50 円玉を 0 枚選ぶ
+ 500 円玉を 0 枚、100 円玉を 0 枚、50 円玉を 2 枚選ぶ

# 完成コード
お手本として、kyunaさんのコードが

元記事を表示

「PythonでFlickr APIから画像取得」に掲載されているテンプレートコードをリファクタリングしてみた(前編)

# 前説
[OpenCVで画像をハッシュ値に変換する方法](https://qiita.com/satsukiya/items/de260a7d69f0af6d4305) でハッシュ値を元に画像検索しようとしていて、約10万画像をテストデータとして集めたいと思っています。[画像を扱う機械学習のためのデータセットまとめ](https://qiita.com/leetmikeal/items/7c0d23e39bf38ab8be23)
などから[ImageNet](http://www.image-net.org/)をみてダウンロードをしようとしたのですが、ロードが遅くて使い方も分からずすぐにフリーズしてしまった。:fearful:
てことで、あるときにflickrにある画像を収集して何かしらの画像処理をしていたことを思い出したのでflickr APIを使うことに決めたとです。その当時は[FlickrDownloadr](https://archive.codeplex.com/?p=flickrdownloadr)使っていた気がします。

で、qiitaか調べていくうちにarticleで

元記事を表示

【Python】データ分析環境をコンテナで作るならAlpineベースイメージはやめとけ

Numpy/Pandas、scikit-learnを使うPython実行環境を整えようとしているあなたへ。

悪いことは言わない、alpineイメージを使うのは**やめとけ**。

# 結論から

**slim**イメージを使いましょう。
3.7系の最新であるバージョン`3.7.5`のベースイメージサイズの違いは以下の通り。

“`shell
$ docker images
python 3.7.5-alpine3.10 b11d2a09763f 8 days ago 98.8MB
python 3.7.5-slim 46cf279fff55 11 days ago 179MB
python 3.7.5 023b89039ba4 11 days ago 918MB
“`

# あれこれパッケージ追加するのにAlpineは不向き

Pythonでコンテナ環境を立ち

元記事を表示

日本※で一番※ポーカーが上手い※のは誰か計算してみた(TrueSkill)~評価編~

# 記事へのリンク

1. [理論編](https://qiita.com/syym88/items/6d19b24ce2eebed730d8)
2. [実装編](https://qiita.com/syym88/items/be75914c742dcdca33ae)
3. 評価編(←本記事)

# 本記事におけるお断り
本記事は筆者が自学自習のためにデータ取得から計算までを行ったものです。特定の団体や個人から許可許諾はとっていないため、もし内容に問題があるとお考えの場合にはご連絡いただければ幸いです。
また、タイトルにもある通り、単純に強い、上手いを判断するのが困難であるポーカーにおけるスキルの『推定』がやりたかったことです。
本記事を通じて少しでもポーカーに興味を持ってアミューズメントやオンラインでポーカーを始めたいと思う人が増えれば何よりです。

#実行結果
GitHubに計算した結果を格納しました。以下から参照&DL可能です。
列名等はReadMeをご覧ください。個人的な感覚では上二つがある程度良い感じの並び順だと思います
[TrueSkillのエクスポース、レーティング順](

元記事を表示

スマホゲームアプリ「逆転オセロニア」を画像解析して自動でダメージ計算 part3 (キャラ識別編)

# 逆転オセロニア画面を解析して自動でダメージ計算

逆転オセロニアとはオセロのルールで駒を置いていき、スキルやコンボを駆使して相手のHPを削ったら勝ちという対戦型のスマホゲームアプリになります。

そのためダメージ計算はかなり重要な部分になってきます。

詳しくは

[逆転オセロニア最速攻略wiki](https://xn--cckp5c6czi2302avwxa.gamematome.jp/game/964/wiki/%E3%83%88%E3%83%83%E3%83%97%E3%83%9A%E3%83%BC%E3%82%B8)

で確認してみてください。

その逆転オセロニアのダメージ計算を自動で行うためのプログラムを1年ほど前に作成していましたが、その時の作業手順を思い出しながら少しだけ解説していこうと思います。

元記事を表示

トップレベルのループと関数内のループの違い

# 動機

「[競技プログラミングで Python を使う時は関数にしよう](https://qiita.com/takecian/items/10bca93004ca9d7dd138)」という記事を見て、トップレベルに処理を記載した場合:

“`loop_toplevel.py
for i in range(10**7):
pass
“`

と、関数内に処理を記載した場合:

“`loop_function.py
def main():
for i in range(10**7):
pass
main()
“`

で大きな性能差があることを知りました。実際に時間を測ってみると

“`
$ python3 –version
Python 3.7.2
$ time python3 loop_toplevel.py
python3 loop_toplevel.py 0.66s user 0.02s system 95% cpu 0.712 total
$ time python3 loop_function.py
python3 loop_fu

元記事を表示

NBA選手のクラスタリング

#やること
・アメリカのプロバスケットボールリーグNBAのプレイヤーデータをスクレイピングして
k-meansを使ってプレイスタイル別に選手をクラスタリングする。
・クラスタリングしたデータをPCAで次元削減して可視化した後、コサイン類似度で選手同士の類似度を求める。
#動機
動機としては[こちら](https://towardsdatascience.com/clustering-nba-playstyles-using-machine-learning-8c7e8e23c90c)の方の記事を見て再現してみたいと思ったからです。
内容としては、チームのエースKevin Durant選手がトレードされ、代わりに入ってきたD’Angelo Russell選手がチームにどれくらいフィットするかの指標としてプレイヤーをプレイスタイル別にクラスタリングし、トレードされたプレイヤーと同じクラスタに所属しているプレイヤーならチームの中で機能するのではないかというものです。
#データ
NBAには大量のデータを提供している[サイト](https://stats.nba.com/)があり、こちらでSel

元記事を表示

Data Campの「Data Scientist with Python」の受講を悩んでいる方へ

# はじめに
データサイエンティストを含めたAI人材の需要増加が見込まれ、「2022年にまでに世界で1.2億人のAI人材の教育が必要(※1)」や「AI人材不足 2030年までに12万4000人(※2)」などと言われています。そこで、社会要請に応える事、自身の市場価値を高める為にオンラインコースのDataCampによる学習を試みました。クチコミ検索をしたところの受講判断に必要な情報が少ないと感じた為、Data Campの「Data Scientist with Python」のコース内容を共有し、ご自身が受講するかの判断材料にしていただきたいです!!
(※1) https://japan.zdnet.com/article/35142455/
(※2) http://www.news24.jp/sp/articles/2019/06/10/07448945.html

# 目次
1. 本記事のメッセージ
2. Data Campとは
3. Data Scientist with Pythonの内容紹介
4. コースの良い点/注意点
5. 個人所管

# 1. 本記事のメッセージ
本記事は

元記事を表示

Qiitaにコードを投稿するための.pyファイルの変換

AtCoder Beginner Contest (A~C問題) の過去問回答を投稿するために用いているコードです。

手順
1. .pyファイル -> .txtファイル変換
2. .txtファイルの中身を、1つの.txtファイルに格納

自身なりの工夫
・ 対象回をrangeで選択できるようにした

(初回投稿日: 2019/10/30, 最終更新日: 2019/10/30)

““python
import re
import os
import shutil
import glob

for num in range(136, 137):

fld_path = ‘C:/path/02_Atcoder/ABC’
fld_path_txt = ‘C:/path/02_Atcoder/ABC/txt’
file_num = ‘/ABC’ + str(num)
file_num_list = glob.glob(fld_path + file_num + ‘*’)
print(file_num_list)

#該当num回のファイルを

元記事を表示

tensorflow2.0で強化学習を試みたが強制終了した理由

#流れ
僕:今まであまり変数の多くない学習を機械学習を試していたが,弊ラボには折角GPU4枚刺しマシンがあるので,tensorflow-gpuを使ってみよう.
僕:ついでに心新たにtensorflow2.0のkerasを使ってみよう.
僕:openaigymのtaxiでこんな感じに...
僕:さ~て学習は進んでいるかな???
PC:ターミナル「強制終了」
僕:え?
PC:強制終了!

決まって120学習ステップくらいで停止するのであった.

#環境
OS:ubuntu18系
GPU:GTX1080x4枚
python:3.6.9(Anaconda)
cudnn:7.6.0
cudatoolkit:10.0.130
以下使用したニューラルネットワーク構成

“`
Model: “sequential”
_________________________________________________________________
Layer (type) Output Shape Param #
===============

元記事を表示

[ゼロから作るDeep Learning]誤差逆伝播法理解のために計算グラフについて解説してみた

#はじめに
この記事は**ゼロから作るディープラーニング 6章誤差逆伝播法**を自分なりに理解して分かりやすくアウトプットしたものです。
文系の自分でも理解することが出来たので、気持ちを楽にして読んでいただけたら幸いです。
また、本書を学習する際に参考にしていただけたらもっと嬉しいです。

#誤差逆伝播法を用いた勾配式
前回の記事で実装したニューラルネットワークの勾配式は、各パラメータに微量な値の増加をして偏微分を求めて勾配を出していました。(数値微分)
しかし、数値微分は単純で実装もしやすいですが、処理が遅いという欠点があります。DeepLearningには相当な時間がかかるので、できる限り時間を省略できる工夫をしていかなくてはいけません。
そこで用いられるのが、誤差逆伝播法を用いた勾配式です。

これを用いることで、処理にかかる時間を大幅に短縮することができます。ですが、実装がかなり複雑になるので、実装に手間取ったりミスが起こってしまいます。それがデメリットです。

まず、誤差逆伝播法を理解するには**計算グラフ**というものを理解することが一番の近道と言えます。
これから計算グラ

元記事を表示

本当に正規分布の正規四分位範囲が標準偏差と一致するのか SymPy になったので確かめてみた

第 3 四分位数と第 1 四分位数の差によって導かれる**四分位範囲** (IQR: Interquartile Range) は、標準偏差と同様に**統計的ばらつき**の指標としてよく用いられ、標準偏差と比較して**外れ値などの外乱に対して頑強** (ロバスト) であるために有用であるといわれる。 統計の知識がない一般の人でも、**標準偏差より計算の理屈がわかりやすい**[^definition]ため、そういう意味でも有用といえる。

さらに、四分位範囲を「**標準正規分布における四分位範囲**」で除した値を**正規四分位範囲** (NIQR: Normalized Interquartile Range) といい、**正規分布の正規四分位範囲は標準偏差に一致する**ので、これまで標準偏差を利用した経験が多い人には、それに近いスケール感で統計的ばらつきを把握できる正規四分位範囲は輪をかけて有用そうだ。

しかし、この「**正規分布の正規四分位範囲は標準偏差に一致する**」という話は、単に Wikipedia から仕入れた情報に過ぎない。 不特定多数によって編集される Wikipedi

元記事を表示

Pygameを使ってテトリスを作った

# 初めに
2ヶ月ほど前に作ったテトリスです。供養のために記事として投稿しました。プログラムについての説明は気が向いたら追記する予定です。

# プレイ画面
![Screenshot from 2019-10-30 18-42-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407395/6837bdbb-f264-9ca9-7cf6-08c3c0cfd2b4.png)
なんかそれっぽいですね

# プログラム本体
割とガバガバ設計なので、本家と比べると使用感が異なると思います。

実行にはpygameが必要なので、ない人はインストールしてください。

“`Python3
import pygame
from pygame.locals import *
import sys
import random
import copy

# 定数
MAX_ROW = 20
MAX_COL = 10

class Block:
def __init__(self, block_type):

元記事を表示

OTHERカテゴリの最新記事