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

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

Python3 からいろいろなバージョンの SQLite3 を使ってみましょう!

# はじめに

Python3 で、いろいろなバージョンの SQLite3 や自分たちで改良した SQLite3 を使う必要がありまして、備忘録としてまとめました。

# 環境

OS は、CentOS 7.7 を使用しています。Proxyなどを設定して、外部にアクセスできる状況になっています。

“`bash
$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
“`

まず、Python3 をインストールします。Python3 のバージョンは 3.6.8 です。

“`bash
$ sudo yum install python3
$ python3 –version
Python 3.6.8
“`

SQLite3 のバージョンを SQLite3 コマンドと Python3 で確認します。

“`bash
$ sqlite3 –version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
$ python3

元記事を表示

for文でサブテストをぶん回すのはやめて動的にテスト関数を生成する。

## 目的

unittestモジュールのsuitでは、テスト関数(プレフィックスtestで番号を末尾に書くとその順にテストしてくれる)を連ねておくと一連のテストを回してくれるのだが、やっているとだんだん同じような関数が量産されてくる。
これを回避するのにサブクラスを使ってfor文の中でぶん回す方法があるが、やってみると以下の不満が出てきた。

* ループ途中でコケる(assert関数でraiseされる)と残りのサブテストが丸ごとスキップされて次のテストに行ってしまう。
* サブテストの数をカウントできないので別途カウンタを用意する必要がある。

そこで、テスト関数をテストケースの数分だけ動的に生成し、テスト数が増えてもコードの変更を伴わないように以下のUT用のコードを作った。
(lambda上に書いたUT対象のコードをUT用lambdaからコールするケースで想定)

## コード

“`:ディレクトリ構成
.
├── errorCases
│  ├── errorCase1.py
│  ├── errorCase2.py
│  └── errorCase3.py
├──

元記事を表示

Python, read(), readline(), readlines()の違い

#read()やreadline()、readlines()の違いについてメモ

#前提
例えば、testsディレクトリに以下のテキストファイルがあったとする。

“`txt:articles.txt
たま,眠いにゃー
しろ,腹減ったにゃー
クロ,なんだか暖かいにゃー
たま,ぽえーぽえーぽえー
“`

#(1)read()※文字数制限あり
readメソッドは開いたファイル全体を文字列として取得する。\nは含まれる。
引数に数字を入れると字数制限をする。

“`
with open(‘tests/articles.txt’,encoding=’utf-8′) as f:
test = f.read(10)
print(‘\n’+’\n’+test)
“`
とすると、

“`
たま,眠いにゃー

“`
となる。

#(2)read()※文字数制限なし
引数に何も入れないと全てを取得する。

“`
with open(‘tests/articles.txt’,encoding=’utf-8′) as f:
test = f.read()
pri

元記事を表示

COTOHA APIを使ってDIOっぽいセリフを生成ッ!

# 背景ッ!

[オレ プログラム ウゴカス オマエ ゲンシジン ナル](https://qiita.com/Harusugi/items/f499e8707b36d0f570c4)
[「募ってはいるが、募集はしていない」 人たちへ](https://qiita.com/omiita/items/0f811f15e569bf2539b8)

上の二つの記事に感銘を受け、似たような記事を書いてみたくなりました
[COTOHA API](https://api.ce-cotoha.com/contents/index.html)を使って、漫画[『ジョジョの奇妙な冒険』](https://ja.wikipedia.org/wiki/ジョジョの奇妙な冒険)に登場するカリスマ的悪者DIOっぽいセリフの生成に挑戦しました
(初投稿です、お手柔らかに?‍♂️)

こんな感じになります

“`
$ python TheWorld.py 僕はお腹が空いた。
このDIOはお腹が空いたッ!
$ python TheWorld.py 人生は楽しい!
人生は楽しいッ!最高に「ハイ!」ってやつだアアアアアアハハ

元記事を表示

Pythonを使って、Jupyter Notebookのテンプレートを作るCLIツールを作成した

# 3行で。
* Notebookのテンプレートを作成するツール『notelate』を作成しました。
* “`pip install notelate“`でインストール。
* “` notelate [template name]“`でカレントディレクトリにipynbファイルが生成されます。

# 動機
Jupyter Labをよく使用するのですが、毎回“`import pandas as pd“`などと書くのが非常に面倒でした。
テンプレートを用意してコピペで増やすことで対応していました。

検索すると、Jupyterlabのアドインが公開されていました。([jupyterlab_templates](https://github.com/timkpaine/jupyterlab_templates))
しかし、自らテンプレートを登録する必要があり、面倒でした。

そこで、テンプレートをシェアできる機能をもたせたツールを作ろうと思いました。

# 使い方
## インストール
pip環境下で以下を入力することでインストールされます。
“`pip install notel

元記事を表示

AtCoder日立製作所(略)2020の振りかえり

# 本ページについて
本ページは、自身が参加した2020年3月8日に行われた日立製作所 社会システム事業部 プログラミングコンテスト2020について後学のために振りかえりを行うページです。

# 結果
問題A,BはACでした。C以降は提出に至りませんでした。

# 問題Aについて
問題AについてはACになったものの、納得のいかない解答をしてしまいました。
コンテスト終了後の復習で気付いたのですが、Sの長さが1以上10以下となっており、とても短いので
“hi” x n (nは5以下の自然数)のどれかにあたるだけ見ればよかったんですね。

制約をちゃんと見なかったため、S の長さが10の5乗でも対応できるような不必要な実装をしてしまいました。

ちゃんと問題文はしっかり読みたいですね。

# 問題Bについて
問題文を理解するのに少し時間がかかりましたが、
冷蔵庫の最小値と電子レンジの最小値の和の値と、割引を使える時の値を比較すればいいということは問題なく理解できました。

### コードのその1
当初、下記のコードを提出し、WAになりました。

“`
A,B,M = [int(x) fo

元記事を表示

新型コロナの国内感染者数を数理モデルで予測してみた

## 概要

感染者数を数理モデルで予測しているThe Lancetの論文[^1]を見つけたので、日本国内の感染者数を予測するために数理モデルを実装し他の感染症と比較してみた。

### まとめ

– SEIRモデルで感染者数を予測した。
– 新型コロナの基本再生産数は約2.9でインフルエンザより少し高い。
– 感染対策の効果が無い場合は国内感染者数のピークはGW前後。
– 今後1年の国内死亡者数は1万人強(致死率0.01%の場合)。
– 外国人の入国制限は無意味。

### 目次

1. [今回の目的](#1-今回の目的)
2. [感染症数理モデル](#2-感染症数理モデル)
3. [パラメータ推定](#3-パラメータ推定)
4. [pythonで実装と図示](#4-pythonで実装と図示)
5. [補足](#5-補足)

## 1. 今回の目的

1. 新型コロナウイルス(COVID-19, 以下新型コロナ)の今後の国内感染者数を数理モデルで予測する。

2. 新型コロナの基本再生産数を他の感染症と比較する。

3. Scipyを用いた科学計算の実装。

## 2. 感染症数理モ

元記事を表示

[Python] Pythonとセキュリティ – ③Pythonで作るSQL Injectionツール

#はじめに
前回([[Python] Pythonとセキュリティ – ②Pythonで作るポートスキャニングツール](https://qiita.com/CyberFortress/items/0c18f0d773ad51ba9b78))でPythonを利用して簡単なポートスキャニングツールを作ってみた。
今回はウェブ脆弱性の中で重要度が高い「SQL Injection」の理解を深める為、ツールを作ってみよう。

**許可を得ていない対象に実施するのは犯罪です。当該の記事で問題が発生した場合、弊社では一切責任を負い兼ねますのでご了承ください。**

#SQL Injectionとは
SQL Injectionは「Injection」攻撃の一つの種類で、クライアントの入力値がサーバのデータベースに送信され、データーベースの操作、破棄、漏洩などを行う攻撃方法である。攻撃方法の難易度は低いがデータベースを直接攻撃するため、被害が大きい攻撃である。このようなInjectionの脆弱性の場合、スキャニングツールなどで発見される場合が多いため、ウェブの担当者は必ず完成されたウェブページにスキャニン

元記事を表示

肺炎による死亡数の誤差の範囲を検証する

Covid19の死亡者が肺炎でカウントされていた場合に、どの程度から誤差と言えなくなるかについてあたりをつける。あきらかに季節変動とトレンドがあるため、それぞれを取り除いた残差のバラツキで見る。

## 時系列解析
データは人口動態統計から。2,015年〜2,018年の死亡者数月別推移を重ねて確認する。
縦軸は死亡者数で、横軸は月。

![4nen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346396/d3d75488-5d6a-0c6e-392c-80042885f36c.png)

偏自己相関を見るまでもなく、12ヶ月周期。年毎に、全体が上がっていくトレンドが見られる。

今回は、肺炎による死者を全体の9%(投稿最後の資料から)ととして、加法モデルで、トレンド、季節変動、残差に分解する。StatsModelsのseasonal_decomposeを加法モデルで使う(移動平均を繰り返して季節変動を計算している、はず)

> Y[t] = T[t] + S[t] + e[t]

Tがトレンド、S

元記事を表示

Python入門 〜B3に向けて〜 part1

#Pythonとは?
* Pythonの特徴

|動的な型付け|型宣言をプログラム実行前にしなくて良い|
—–|—–
|**ガベージコレクション**|不要なメモリは自動的に解放|
|**マルチパラダイム**|オブジェクト指向、命令型、手続き型、関数型など複数の特性を併せ持つプログラミング言語|
|**外部ライブラリが豊富**|機械学習用の「TensorFlow」「Chainer」や
Web開発用の「Django」「Flask」など様々|
|**読みやすい**|簡単な短いコードによって書けて読みやすい|
|**多くのプラットフォームに対応**|Windows,Mac,Linux,ios,Android…|

##C言語でのプログラム実行まで
たった1行の出力でもいろいろしなくちゃいけない…

“`c:Hello.c
//ライブラリの読み込み
#include
//main関数の定義
int main(int argc, char *args[])
{
printf(“Hello, world!\n”);
return 0;

元記事を表示

numpyの3次元配列のソート

# 問題

2×4×3の3次元の配列xがあります。
3次元目のインデックス1の値をキーに、2次元目を安定で降順に並べ替えたい。

“`python
import numpy as np

np.random.seed(0)
x = np.random.randint(0, 10, (2, 4, 3))
print(x)
“””
以下の3次元配列を、3次元目のindex 1をキーに2次元目を(安定で)降順にソートしたい。
[[[5 0 3]
[3 7 9]
[3 5 2]
[4 7 6]]

[[8 8 1]
[6 7 7]
[8 1 5]
[9 8 9]]]
↑この列の降順にソートしたい

欲しい結果
[[[[3 7 9]
[4 7 6]
[3 5 2]
[5 0 3]]

[[8 8 1]
[9 8 9]
[6 7 7]
[8 1 5]]]]
“””
“`

# argsort

numpy には [argsort](https://docs.scipy.org/doc/numpy/reference/g

元記事を表示

[Pandas 1.0.1記念]クックブックとの激闘録

# 背景
* 事あるごとにGoogle検索で対応しているが、一時的な理解で血となり肉となっていない。
* 断片的な知識だけでは、応用力に乏しくいざという時に対応できない。
* 衰えた記憶力に打ち勝つには、手を動かし理解しそれを説明する事で脳に刻みたい。
* 先達の人たちからの金言「公式マニュアルは一読すべし」を実行したい。

# 何をどのように
* [Pandas](https://pandas.pydata.org/docs/index.html)公式ページで`User Guide`の最後にある`CookBook`を対象とする。
* 公式ページには、具体的な事例と[stackoverlow.com](https://stackoverflow.com)などに投稿され、
活発に議論された質疑のリンクが掲載されています。
* なんでそうなるの?疑問を解消しながら、実際手を動かしてゴールに至るまでを書いています

# この投稿の構成について
* クックブックの構成に従って見出しを構成し、掲載されているコードを引用します。
(一部数値やコードを修正しています)
* また`s

元記事を表示

Scrapy 各種コマンド

### モジュール作成

“`
scrapy genspider [モジュール名] [サイトドメイン]

例)
scrapy genspider hoge wwww.hoge.com
“`

### モジュール実行コマンド

“`
scrapy crawl [モジュール名]

例)
scrapy crawl hoge
“`

### 実行結果の出力ファイル指定

“`
scrapy crawl hoge -o /home/fuga.csv
“`

### デバッグコマンド

“`
scrapy shell [対象URL]

例)
scrapy shell ‘https://www.hoge.com/’

インタラクティブモードになる
以下を入力していく

>>>
import re
import mojimoji
from bs4 import BeautifulSoup
from urllib.request import urlopen

soup = BeautifulSoup(response.body, “html5lib”)

soup
↑ 取得結果が表示さ

元記事を表示

julia v1.3から始めるJupyter Notebook

[前回](https://qiita.com/doorei/items/91a52a31f917b9d7bb84)、juliaをインストールしたPCが不調になり、新型PCを導入したのでJuliaをインストールしようとしたらjuliaのバージョンが上がっていて少しだけ前回通りではいかなかったので再度書いてみる。

# やってみた環境
– Windows 10 Home (64bit) Ver 1909
– julia v1.3 (64bit)

# やり方
0. juliaがインストール済みの前提
1. juliaのコンソールを起動(緑字のプロンプト)
2. `]`キーを押してパッケージモードへ(青字のプロンプトになる)
3. `add IJulia`を実行(Cloning~となり、しばらく時間がかかる)
4. `build IJulia`を実行(Building~となり、しばらく時間がかかる)
5. バックスペースでパッケージモードを抜ける(緑字のプロンプト)
6. `using IJulia`を実行(Precompilingされる)
7. `notebook(detached=t

元記事を表示

Windows環境でpythonを動かす

windows 10環境でpythonを触りたくなったので手順をまとめておく。

## 環境

Windows 10
python 3.8.2

## pythonをダウンロードしてインストール

下記のサイトより最新版の3.8.2をダウンロード
https://www.python.org/downloads/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272635/b92dfb61-d5a3-08e1-c0cf-8b48dcac4ac6.png)

ダウンロードしパッケージ実行
このときに[Add Python 3.8 to PATH]にチェックをし、Install nowをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272635/f16048f5-df06-0c51-9f3b-01c31df0d827.png)

完了するとこちらの画面が表示されます。
![i

元記事を表示

ABC158 D問題を素人知識で解く

#はじめに
初めてのコンテストABC158後、D問題がどうしても解けず「ぐぬぬ…」って感じでしたが
なんとかAC出たのでそのまとめです。
あとQiitaの記事中にソースコード描いてみたかったので( ´艸`)

#本番中にD問題で躓いたとこ
とにかくTLE(実行時間超過)が問題でした。
問題文中にあるテストケースでは通過するも、提出後の判定では…(TдT)

本番後1日経過し、おそらく様々なエレガントな解法が上がる中
***謎の負けず嫌いを発揮し、ごり押しで解くことを決意。***(1日かかりました(汗))

D問題へのリンクは[こちら](https://atcoder.jp/contests/abc158/tasks/abc158_d)

#まず考えたこと
Twitterで「文字列の結合って時間かかるよ」的なニュアンスのツイートを見かけて、藁にも縋る思いでPythonのライブラリを確認したり検索して調べてみました。

##判明したこと
どうやら、Pythonにはミュータブルとイミュータブルというものがあるらしく
***文字列はイミュータブル***であり、下のようなコードだとオブジェクトを

元記事を表示

AtCoder 日立製作所 社会システム事業部 プログラミングコンテスト2020 参戦記

# AtCoder 日立製作所 社会システム事業部 プログラミングコンテスト2020 参戦記

## hitachi2020A – Hitachi String

3分で突破. どう書くのが楽か戸惑ったけど、長さが10までなので、ありえる解答総当りが一番速いかとこうなった.

“`python
S = input()

for i in range(1, 6):
if S == ‘hi’ * i:
print(‘Yes’)
exit()
print(‘No’)
“`

## hitachi2020B – Nice Shopping

8分で突破. B問題だから総当たりでいいかと思ったら、制限を見るに無理. ちょっと考えたけど、割引券が無ければ最小金額は min(a) + min(b) に決まってるので、後は割引券だけ総当りすればいいやとこうなった.

“`python
A, B, M = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(in

元記事を表示

Pythonで日立製作所 社会システム事業部 プログラミングコンテスト2020を解きたかった

### はじめに
こんばんは、tax_freeです。前回のABC(ABC157,158)は忘れていて参加できませんでした。もったいない。
今回は、ARC相当のコンテストでした。私は、A,Bの二つしか解けませんでした。とても悔しい。

###A問題
[問題](https://atcoder.jp/contests/hitachi2020/tasks/hitachi2020_a)

**考えたこと**
最初は問題文を読み間違えていて3WAも出してしまいました。今回の敗因はここ。
問題文の**’hii’はhitachi文字列ではありません**を完全に読み落していました。
最初は、’hi’が含まれていればよいと思ったので

“`
‘hi’ in [文字列]
“`
でif文にかけていました。
それだけでは、’hii’に対応できないので改善しました。

“`python
s = str(input())

checker = True
if ‘hi’ not in s:
checker =False

while ‘hi’ in s:
s = s.replace(‘hi’,’

元記事を表示

egaoスクールフォトサービスの写真をpython baseで一括ダウンロードする手順

# 背景 (Situation & Task)

子供を保育園にあずけていると写真を保育園のスタッフが撮影をしてくれていることがある。

こういった写真について、共有される方法はいくつかあり、その中の一つの方法として、「egaoスクールフォトサービス」というものがある。スタジオアリスのサービスなのだが、我が子の写真を選んで購入し、後日ウェブからダウンロードできるなかなか優れたシステムだと思う。

![ホームページ___egao_スクールフォトサービス.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115038/951ec5f9-bb85-743b-b405-0d65b9f85ed4.jpeg)
https://egao.photo/store/

しかしながら、たいていの親は、あれよあれよとたくさん写真を選ぶ訳だが(我が家は百枚を超えた)、なんとこのウェブサービス、一括ダウンロードのオプションがない。一つずつクリックしてるとだんだんどれがなんだかわからなくなってくる。。。。恐ろしい。。。。

きっ

元記事を表示

【Python】Python版lodashのpydashを試してみる

# Python版lodashのpydashを試してみる
## TL;DR
会社ではフロントサイドをReact、バックエンドでDjangoで開発してるんですね。
フロントサイドでは`lodash`というライブラリーをよく利用するんですが、めちゃくちゃく便利で、そのあとPythonを書くときに、`lodash`がないため、もどかしさを感じることがあります。
そんなもどかしさに苛まれているある日`pydash`というPython版`lodash`とも言えるlibraryを見つけたので紹介します。

## インストール
利用できるPtyhonのバージョンは2.6以上、または3.3以上とのことなので、適当にPython 3.7.6で試すことにします。

“`shell
$ pip install pydash
“`

## 軽く触ってみる

“`python
>>> import pydash
>>> from pydash import flatten

# Arrays
>>> flatten([1, 2, [3, [4, 5, [6, 7]]]])
[1, 2, 3, [4, 5,

元記事を表示

OTHERカテゴリの最新記事