Python3関連のことを調べてみた2020年05月09日

Python3関連のことを調べてみた2020年05月09日
目次

型ヒントを使ってソースの可視性をアップする

# 型ヒントとは

型ヒントでは、プログラム内に引数や戻り値に型を定義し、あたかも静的型付け言語のようなコーディングができる。
型ヒントはメタ情報のように扱われるため、実行されるプログラムには影響がない。

pythonでは基本的に型を書くことはない。それはpythonが動的型付け言語とされているためである。
動的型付けとはプログラム実行時にpythonが型を判別し、適切な型を選択していることである。
⇔静的型付け・・・コンパイル時に型を判定する。対象言語はCやJava。

# 型ヒントを使用する目的

## ソースコードの可視性向上

pythonにも型の概念はあるものの、型を意識せずにプログラムを書ける。
しかし、型を意識しないでプログラムを書くと、データの構造が漏れていたり処理内容が間違っていることに気付きにくい。
実行時に想定外のエラーが発生しても原因を特定しづらい。
レビューにおいても作成したプログラムの本質や目的が第三者にも伝わりにくい。

型ヒントを用いることで、クラスや関数の引数がより明確になる。プログラムの意図がより伝わりやすくなる。
ソースファイルが多ければ多いほど

元記事を表示

【初心者向け】回帰モデルの自前データで止まっている人向け(statsmodels(第1回目))

### 【初心者向け】回帰モデルの自前データで止まっている人向け(statsmodels(第1回目))
ほぼ、備忘録

**サンプルデータで止まっている人向け、statsmodels(OLS)入門**

statsmodelsで回帰のサンプルをやってみて、自分で作ったデータで止まっている人向けの入門記事です。

最近、データの予測をはじめまして、時系列の分析としてfacebookのprophetは、やってみたところ、用意したデータも少なく、精度はまだ未知数ですが、ともかくひとまず動きました。基本だと思われるstatsmodelsやsklearnで回帰を始めたところ、自分でデータを作ったところで、エラー等が出て止まっておりました。

statsmodelsの公式サイトを見たり、色々なサイトを参考にして、少しずつ進めていったところ、なんとかほぼ想定どおり動いたようです。

モデル適用のところで、渡すデータで止まっていました。
自作のデータで、なんとか想定に近い動きになった為、投稿したいと思います。

このスクリプトで想定しているケースは、架空

元記事を表示

【初心者向け】10行以内のスクリプト(8.foliumで地図のプロット【2】

### 【初心者向け】10行以内のスクリプト(8.foliumで地図のプロット【2】)
pythonで色々なライブラリを使えば、「少ないコードでもちょっとした事が出来て、少なければ5行程でもちょっとしたスクリプトが作れ、便利だな。」と思ったので、pythonやその他、コマンドを羅列しただけのものも出てくるかも知れませんが、10行程のスクリプトを不定期で投稿してみようと思います。

**第8回**として、以前、「foliumで銀座周辺の地図をマーカー付きで3ヶ所プロットするスクリプトを投稿したのですが、事前に場所と緯度・経度をcsvで用意してプロットする様にしてみました。

拠点が多い場合は、この方法が可読性・メンテナンス性が良さそうです。

このスクリプトでは、以下3ヶ所をプロットしました。
– 有楽町駅: 位置情報【35.6749187,139.7606366】
– 銀座コリドー街: 位置情報【35.6703699,139.7573871】
– Ginza-SIX: 位置情報【35.6695908,139.7618857】

【環境】

元記事を表示

【django】models.DateTimeFieldに現在の時刻(timezone.now)を格納するときデータベース内の値が現在時刻にならない問題

models.DateTimeFieldに現在の時刻(timezone.now)を格納するときデータベース内の値が現在時刻にならない問題の解決に1時間くらい費やしました。
なので、その解決法?について残しておきます。

models.DateTimeFieldに現在の時刻を入れたい場合は下の記事を参考にしてみてください。

[[Django]モデルmodels.DateTimeFieldに現在の時間を挿入する方法](https://sleepless-se.net/2018/06/09/django%E3%83%A2%E3%83%87%E3%83%ABmodels-datetimefield%E3%81%AB%E7%8F%BE%E5%9C%A8%E3%81%AE%E6%99%82%E9%96%93%E3%82%92%E6%8C%BF%E5%85%A5%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/:embed:cite)

# 結論
データベース内の値は、現在時刻になっている必要はないみたいですね。(UTCになっているから)
そして、表示す

元記事を表示

【python3】json でdatetime のisoformatで読み書きする

python で辞書型のデータをjson でやりとりすることが多いのですが、辞書の値ではdatetime で保持し、文字列やファイルにするときは“`”YYYY-MM-DD HH-MN-SS”“`という文字列で扱うようにする方法をメモします。

## datetime <--> 文字列

datetime のisoformat という関数で文字列にできます。separator を空白にして使うことにします。

“`[python]
In [1]: from datetime import datetime

In [2]: t1 = datetime.now()

In [3]: t1.isoformat()
Out[3]: ‘2020-05-08T22:16:39.287433’

In [4]: t1.isoformat(” “)
Out[4]: ‘2020-05-08 22:16:39.287433’
“`

もっとstrftimeを使うこともできます。

“`
In [5]: t1.strftime(“%Y/%m/%d %H:%M:%S.%f”)
Out[5]: ’20

元記事を表示

yukicoder contest 247 参戦記

# yukicoder contest 247 参戦記

## [A 1046 Fruits Rush](https://yukicoder.me/problems/no/1046)

正の新鮮さの果物があるのであれば、正の新鮮さの果物だけ大きい方から順にK個採用する(K個無い場合は全部). 0以下の果物しか無いのであれb、一番0に近いやつを1つだけ採用する.

“`python
N, K = map(int, input().split())
A = list(map(int, input().split()))

A.sort(reverse=True)
print(A[0] + sum([a for a in A[1:] if a > 0][:K – 1]))
“`

## [B 1047 Zero (Novice) ](https://yukicoder.me/problems/no/1047)

分からないので、多めにループを回して0になるかどうか確認するだけのコードを書いたら AC した(酷い). A, B が大きいので、105 回したら TLE

元記事を表示

Cython関数の書き方による実行速度の違い

# 目的
Cythonの関数の書き方によって実行速度がどう変わるか調べました。

# 背景
+ Pythonで数値計算する場合には、高速化のためにNumpyを使います。Numpyで簡単に書けない場合にはNumbaやCythonを使いますが、Numbaは効果が出ない場合がありますし、Cythonは書き方によって実行時間が大きく変わります。
+ Cythonによる高速化は型付けが全てのように思いがちですが、実際にはそれ以外にも注意すべき点があります。それに気づかないと「Pythonは速度は全然ダメ」と早合点して、他の言語を勉強しているうちに時間が経ってしまうということにもなりかねません。
+ そこで、書き方による実行時間の違いを、ある程度系統的に評価してみました。

# 方法
+ $n$個の実数 $v_{1}, \ldots, v_{n}$ の二乗和 $s=v_{1}^{2}+v_{2}^{2}+\cdots+v_{n}^{2}$ を計算する問題を考えます。単純化のために $v_{1}=v_{2}=\cdots=v_{n}=1.0$、$n=10^6$ とします。
+ 実行速度に影響を及ぼす

元記事を表示

[現代数理統計学の基礎 with python]3章:代表的な確率分布

# はじめに
 このシリーズは久保川達也氏著「現代数理統計学の基礎」を簡潔に説明し、その内容をpythonで実装してみよう、というものです。実装にはGoogle Colaboratory(以下:Colab)を使いました。ご指摘があればコメント欄に書いて下さるとありがたいです。
 説明が必要だと思ったところにだけ触れて、アウトプットできればいいよねくらいのスタンスで書くので本の内容をちゃんと全部理解したい方にとっては向いていないかもしれないです。
 式番号や命題・定義のインデックスは本に合わせて書いた場合、この記事では番号がとびとびになることがありますので予めご了承ください。

# 3章の概観
 変数を与えると確率を求められる関数が確率分布でしたね。様々な種類の確率分布にはそれぞれ特徴があり、使いどころがあります。想定する確率分布を間違えると予想を誤ることになるので、それぞれの確率分布にどんな特徴があるかを知っておくことは重要です。
 確率分布の期待値や分散を前章の確率生成関数や積率生成関数、特性関数を用いて求めることができますが、覚えてしまってよいと思います。使ってるうちに覚えるかもし

元記事を表示

ゼロから作るDeepLearning 4.4.2 ニューラルネットワークに対する勾配 numerical_gradient関数についての疑問が解決しました。

# 本記事の内容
内容は「ゼロから作るDeepLearning」の4.4.2 ニューラルネットワークに対する勾配 (p.110あたり)についてです。
疑問が解決したので記事にします。

# 疑問
私が疑問に感じていたのはp.111の下の方のコードです。(下記)

“`python
>>> def f(W):
… return net.loss(x, t)

>>> dW = numerical_gradient(f, net.W)
>>> print(dW)
[[ 0.21924763 0.14356247 -0.36281009]
[ 0.32887144 0.2153437 -0.54421514]]
“`

関数`f`を定義して、それを本書の少し前で定義した`numerical_gradient`関数の引数として渡しています。
この`numerical_gradient`関数の第二引数を適当な値に変えてみると、`dW`の値が変わりました。(下記)

“`python
# 第二引数にnet.Wを指定。(net.Wについては本書のp.110からの解説を参照してくださ

元記事を表示

PandasでMultiindex

参考URL : [https://jakevdp.github.io/PythonDataScienceHandbook/03.05-hierarchical-indexing.html](https://jakevdp.github.io/PythonDataScienceHandbook/03.05-hierarchical-indexing.html)

データフレーム作成

“`
# hierarchical indices and columns
index = pd.MultiIndex.from_product([[2013, 2014], [1, 2]],
names=[‘year’, ‘visit’])
columns = pd.MultiIndex.from_product([[‘Bob’, ‘Guido’, ‘Sue’], [‘HR’, ‘Temp’]],
names=[‘subject’, ‘type’])

# mo

元記事を表示

Pythonで競プロするのに必要な機能をまとめてみた~itertools~

#初めに

[ABC165のC問題](https://atcoder.jp/contests/abc165/tasks/abc165_c)が解けず、コンテスト後にツイッターで解法を見て回っていたところ、以下のような[maspyさん](https://twitter.com/maspy_stars)のツイートを拝見し、**itertoolsの関数はよく使うものの整理できていない**と感じました。
また、itertools関連の記事はQiitaにあるものの、競技プログラミングにおける使用法に触れつつ網羅的に扱っている記事がなかったので、記事としてまとめることにしました。

初心者だって「Python完全に理解した」って言いたい

我が子「おぎゃあおぎゃあ!!Python全然わかんないよう!!」

ぼく「おやおや、Python初心者の我が子ちゃんがPythonわかんなくて今日もないとるで…」

ぼく「Pythonは誰でもさくっと簡単にプログラムを組むことができんねんけど、そのせいで仰山あるスーパー便利機能が知られていない気がすんねん。しかも便利機能を使おうとすると途端に意味わからんくなるんやな。」

ぼく「だから今回は比較的新しいけどあんまり知られてなさそうな文法とか紹介するで!みんなでPython完全理解マン目指そうな!」

# 目次

– [型ヒント](#型ヒント)
– [Docstring](#Docstring)
– [f-string](#f-string)
– [セイウチ演算子](#セイウチ演算子)
– [内包表記](#内包表記)
– [ジェネレータ](#ジェネレータ)

## 型ヒント

ぼく「最初はバージョン3.5で追加された型ヒントや!」

ぼく「Pythonは**動的型付け**言語なのはみんな知っとるか?」

ぼく「**動的型付け**っていうのは型を指定しなくても自動で判別してくれるってことな

元記事を表示

Pythonでソートする時のテクニック

## はじめに

Python3で競プロをしているときにソートの方法をド忘れすることがあるのでメモ

以下、インタプリタモードで実行しているため、行の最初に `>>>>` がついているものは入力だと思って見てほしい。

## list.sort() と sorted(list) の違い

`list.sort()` は元のリストをソートする。返り値は `None`

“`python
>>>> list = [2, 3, 5, 1, 4]
>>>> list.sort()
>>>> list
[1, 2, 3, 4, 5]
“`

`sorted(list)` は元のリストは変更せずにソートした結果を返す

“`python
>>>> list = [2, 3, 5, 1, 4]
>>>> sorted(list)
[1, 2, 3, 4, 5]
>>>> list
[2, 3, 5, 1, 4]
“`

## 逆順にソートしたい時

以下、 `list.sort()` でも `sorted(list)` でも同じオプションを使うので `sorted(list)` のみ扱う

元記事を表示

【django】アップロード画像を表示できない原因

djangoでアップロード画像の表示に苦戦したので、表示できない原因を残しておきます。
# 開発環境
– Windows 10(WSL Ubuntu18.04)
– django 3.0.5

# 前提条件
– FileField、ImageFieldなどを利用して画像アップロードができていること

# 画像を表示できない原因
## 1. settings.pyのMEDIA_ROOTとMEDIA_URLの設定が間違っている
MEDIA_ROOT→アップロードファイルを保存する場所を指定
アップロードした画像はMEDIA_ROOTで指定したディレクトリ内のupload_atで指定したフォルダ内に保存される。

MEDIA_URL→メディアディレクトリの公開用URLを指定
例えば、

MEDIA_URL=’/media/’とした場合、
http://127.0.0.1:8000/media/{画像名}が画像を表示するための公開用URLになる。

## 2. {アプリ名}/urls.pyにstat

元記事を表示

【自動化】WEBサイトの変更を検知してLINEに通知する

# はじめに
高校生になりました。
このコロナの影響で学校にいけなくなり、学校側が用意したWEBサイトを定期的に見てそのサイトに書いてある指示に従って自宅で学習するように言われましたが、そのWEBサイトが重く、また毎日更新を確認するのは面倒です。しかしできるだけ情報は早く入手したいです。そこでWEBサイトの更新を検知してLINEに通知するPythonのプログラムを書くことにしました。

# 全体の流れ
1. Pythonの標準ライブラリであるurllibを使ってWEBサイトのHTMLを取得します。
2. それをBeautifulSoupというライブラリを使って分析し、必要な部分だけ抽出します。
3. (2ループ目以降)今回抽出したものと前回抽出してファイルに保存したものを比較します。
3. 新しく抽出したものをCSV形式でファイルに保存します。
4. 3で比較した結果をLINENotifyで通知します。

これを繰り返します。
実行するたびに前回実行したときに取得したものと比較します。(このプログラム自体は毎回起動しては終了する)
このプログラム自体に定期的に実行する機能はなく、こ

元記事を表示

#Python基礎(#matplotlib)

環境は以前の記事で作った環境を使用しています。 → [Windows10でAnaconda python環境構築](https://qiita.com/hiwasawa/items/2d802b3471d4be1da341)
numpyの使い方に関しては以前の記事を参考にしてください。 
→ [#Python基礎(#Numpy 1/2)](https://qiita.com/hiwasawa/items/8907980293acc90c82ca)
→ [#Python基礎(#Numpy 2/2)](https://qiita.com/hiwasawa/items/9950f7882ca67407b805)

#1.Matplotlibインポート

グラフ描画 : `pyplot`モジュールを使用
jupyter lab上で描画 : `%matplotlib inline`

“`python
%matplotlib inline

import numpy as np
import matplotlib.pyplot as plt
“`

“`python
import num

元記事を表示

外部からDjango REST FrameworkのAPIを叩いた時にNot Foundが出る時の解決法

# 問題

Nuxt.jsからDjango REST Framework(以下DRF)のAPIを叩いて特定の情報を表示させようとした時にDjango側のログにNot Foundが出ました。

まずはDjango側の不具合かと思い、一旦DRFのコンソールで確認しましたが、データは存在し、かつ閲覧できる状態です。
単純な問題ですが、うっかりミスをしていたので念のため記事として残しておきます。

# 解決法

以上の前提条件からNot Foundが起こっている場合、十中八九エントリーポイントの設定を間違えています。

そもそもの前提の話ですが、Djangoのルーティングではurls.pyに記述されているもの以外のurlが打ち込まれた場合は404のエラーハンドリングをしていない場合は無条件でNot Foundになります。なので、Nuxt.js側で呼び出すエントリーポイントの記述を間違っている可能性が高いです。

例えば、

“`JavaScript
async asyncData ({ $axios, params }) {
try {
const user = awai

元記事を表示

Pythonでトランプのカードゲームを実装する

## はじめに

Pythonの入門として、[プログラミング入門者からの卒業試験は『ブラックジャック』を開発すべし](https://qiita.com/hirossyi73/items/cf8648c31898216312e5)に挑戦しようと思います。要件はそのまま参考にしております。不慣れな点もあるのでこここうしたらいいよ!とかあるとコメントいただきたいです!

## 実装前にやったこと

Pythonの構文などの学習については下記を参考に行いました。

* [独学プログラマー Python言語の基本から仕事のやり方まで](https://www.amazon.co.jp/%E7%8B%AC%E5%AD%A6%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC-Python%E8%A8%80%E8%AA%9E%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%81%8B%E3%82%89%E4%BB%95%E4%BA%8B%E3%81%AE%E3%82%84%E3%82%8A%E6%96%B9%E3%81%BE

元記事を表示

[Python] pytestで処理の遅い箇所を可視化して特定する

プロジェクトのテスト数が増えてくるとCI回すのも遅くなるし、ローカルでこまめにテスト回すぞっていうときもストレスは増えていきます。テストが1万件もあればしょうがないかな、という気にもなりますが、時に「あれ、なんかやたら遅いテストケースがあるぞ?」ということもあります。テストが遅い原因がプロダクトコードにあるのであればより問題です。
pythonのテストフレームワークはpytestを使っているので、以下pytestの場合はこんなことして遅い処理を探し出しているという備忘録。

主にやったことは以下の2つ。

① pytestの`–durations`オプションで処理時間の大きいテストケースを出力する
② [pytest-profiling](https://pypi.org/project/pytest-profiling/)でプロファイルして処理の遅い箇所を特定

# テストコード

本記事で使用したテストコードです。1~10000000の整数を順に突っ込んだリストを4パターンの方法で作成して最後にassertで比較しています。
**setup()**のなかでスリープを読んでいるの

元記事を表示

OTHERカテゴリの最新記事