- 1. PythonでDICOM画像を扱う
- 2. Pythonでlistに連続でappendするときに便利な書き方
- 3. Python3.8から始めるモダン型付けvol.1 (without class)
- 4. Rotrics DexArmを使ってみた #2
- 5. [TensorFlow 2.x (tf.keras)] 乱数シードを固定して再現性を向上
- 6. Pythonによる螺旋本・AOJの解答(ALDS1 #7~#12)
- 7. Pythonでコンソールに綺麗なグラフを描画できる「AsciichartPy」使ってみた。
- 8. [CovsirPhy] COVID-19データ解析用Pythonパッケージ: Data loading
- 9. たった3行でVSCode(codeserver)をGoogle Colabで使う方法
- 10. yukicoder contest 265 参戦記
- 11. 【Udemy Python3入門+応用】 64. 名前空間とスコープ
- 12. Herokuに入れたPostgreSQLの並び順を変更する
- 13. 【Udemy Python3入門+応用】 63. ジェネレーター内包表記
- 14. pythonでスゴロクゲームと足し算ゲーム
- 15. Windows10でBleakを使ってSwitchBotを動かす
- 16. メモ : CmdStanPyの環境をdockerで用意する
- 17. Python フォルダ内の全Zipを解凍処理(再帰的)文字化け対応 (Qiita初投稿)
- 18. LambdaでDynamoDBに複数レコードの書き込みをする(Python、JavaScript)
- 19. Keras好きがPyTorchに挑戦してみた
- 20. set型で利用できるメソッド
PythonでDICOM画像を扱う
#きっかけ
[Kaggleコンペ](https://www.kaggle.com/c/osic-pulmonary-fibrosis-progression)で胸部のCTスキャン画像、DICOM画像が出てきてどのように扱えばいいか分からなかったから。#何ができるようになるか
・DICOM画像とは何か
・DICOM画像の表示、データの扱い方#DICOM画像とは何か?
>DICOM(ダイコム)とは、CTやMRI、CRなどで撮影した医用画像のフォーマットと、それらを扱う医用画像機器間の通信プロトコルを定義した標準規格である。
[wiki](https://ja.wikipedia.org/wiki/DICOM#:~:text=DICOM%EF%BC%88%E3%83%80%E3%82%A4%E3%82%B3%E3%83%A0%EF%BC%89%E3%81%A8%E3%81%AF%E3%80%81,Medicine%E3%81%AE%E7%95%A5%E3%81%A7%E3%81%82%E3%82%8B)#使用例
インストール“`ruby:qiita.rb
%pip inst
Pythonでlistに連続でappendするときに便利な書き方
下記のように何度もappendを書かずに書けるようです。
“`
>>> v = []
>>> a = v.append
>>> a(‘aaa’)
>>> a(‘bbb’)
>>> v
[‘aaa’, ‘bbb’]
“`
Python3.8から始めるモダン型付けvol.1 (without class)
# イントロダクション
最近オライリーの『プログラミングTypeScript』を読み、非常に感銘を受けました。
ジェネリクスの奥深さ面白さ、型がある事による関数やオブジェクト情報の増加、そして生まれる安心感……。型無しでは不安で昼寝できない身体になってきました。そんな折『飛騨高山Pythonモクモク会』で今月も発表することになり、大概ネタ切れ状態だった私は思いました。そうだ、めっちゃ感銘を受けたTypeScriptを絡めれば楽しく発表できるぞ、と。
幸いPythonにも型ヒントがあります。Pythonの型システムはTypeScriptに比べれは少々貧弱だと思っていたのですが、調べてみたらなかなかどうして! これは便利という機能が揃っていました(特に3.8以降)
この記事ではシリーズを通して型システムの奥深さ面白さ便利さを少しでもお伝えできればと思っています。
##完全にネタかぶりしました
途中まで書いた時、ふとPyConJP2020の演目を見ていたら『Rotrics DexArmを使ってみた #2[Rotrics DexArmを使ってみた #1](https://qiita.com/lumbermill/items/638826797a5d2ee0ff70)の続きです。SDKが出てくる気配がないので、シリアル通信でGCodeを送ってなんとかします。意外と応答が素直だから、これで良いのかという気もしてきました。
“`python
#!/usr/bin/env python3
import serial, time#Serial setting
s = serial.Serial(“/dev/ttyACM0″,115200)def w(gcode):
”’
Send GCode to Dexarm and wait for the response.
”’
print(gcode)
s.write(gcode.encode(‘utf-8′)+b’\r\n’)
r = None
while r == None or “echo:” in r:
r = s.readline().decode(‘u
[TensorFlow 2.x (tf.keras)] 乱数シードを固定して再現性を向上
`Tensorflow 2.x` (`tf.keras`)で乱数シードを固定する方法を紹介します。
## 実行環境
* Python: 3.6 | 3.7
* Tensorflow: 2.0 | 2.1 | 2.2 | 2.3
* GitHub Actionsでテストテストに使用したコードは[こちら](https://github.com/tokusumi/tf-keras-random-seed)にあります。
## 背景
機械学習の開発において、「学習を再現可能にしたい」や「テスト用に、モデルの初期値を固定したい」などの要求があります。
重みの初期値の違いは学習結果に影響を及ぼすので、初期値を固定できるとこれらの悩みの解消に役立ちそうです。重みの初期値生成は乱数を利用してます。乱数は乱数シードに基づいて生成されています。TensorFlowはデフォルトでは乱数シードは可変です。よって、毎回異なる初期値をもったモデルが生成されてしまいます。
そこで今回は、乱数シードを固定することで再現性の向上を目指します。## 乱数シードの固定
TensorFlowに加えて、
Pythonによる螺旋本・AOJの解答(ALDS1 #7~#12)
この記事では、螺旋本・AOJのALDS1コース(アルゴリズムとデータ構造入門)のトピック#7〜#12にPythonで解答を与えます。
前回の記事[Pythonによる螺旋本・AOJの解答(ALDS1 #1~#6)](https://qiita.com/nakasan/items/f32a63bd48494b1c822f)の続きです。螺旋本・AOJとは何かについてはこちらの記事を参照して下さい。
### **目次**
– [トピック #7 木構造](https://qiita.com/nakasan/items/9ed9c858b6473fef49e2#%E3%83%88%E3%83%94%E3%83%83%E3%82%AF-7-%E6%9C%A8%E6%A7%8B%E9%80%A0)
– [トピック #8 二分探索木](https://qiita.com/nakasan/items/9ed9c858b6473fef49e2#%E3%83%88%E3%83%94%E3%83%83%E3%82%AF-8-%E4%BA%8C%E5%88%86%E6%8E%A2%E7%B4%A2%E6%9C
Pythonでコンソールに綺麗なグラフを描画できる「AsciichartPy」使ってみた。
![Screen Shot 2020-09-12 at 2.18.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535270/8026d956-b17b-1774-b651-a44a5c677d3b.png)
# はじめに
グラフといえば[matplotlib](https://matplotlib.org/)が恐らく一番有名ですが、コンソールに直接ASCII文字としてグラフを描画する[AsciiChart](https://github.com/kroitor/asciichart)という便利なライブラリがあります。
ざっと見たところ、未だQiitaで紹介されていそうな記事が見当たらなかったので少しでも参考になればと思い、書いてみました。# pip
pipコマンドで`asciichartpy`をインストール。
“`sh
$ pip install asciichartpy
“`# サンプルコード
トップにある画像で使ったサンプルソースです。
`cfg`というパラメータで、色々
[CovsirPhy] COVID-19データ解析用Pythonパッケージ: Data loading
## Introduction
COVID-19のデータ(PCR陽性者数など)のデータを簡単にダウンロードして解析できるPythonパッケージ [CovsirPhy](https://github.com/lisphilar/covid19-sir)を作成しています。
紹介記事:
– [SIR model](https://qiita.com/Lisphilar/items/ac5a5fda02d8359d6a94)
– [SIR-F model](https://qiita.com/Lisphilar/items/99c1e7673bc13d77dfcc)英語版のドキュメントは[CovsirPhy: COVID-19 analysis with phase-dependent SIRs](https://lisphilar.github.io/covid19-sir/index.html), [Kaggle: COVID-19 data with SIR model](https://www.kaggle.com/lisphilar/covid-19-data-with-s
たった3行でVSCode(codeserver)をGoogle Colabで使う方法
## packageをインストール
“`zsh
!pip install colabcode
“`GitHub
https://github.com/abhishekkrthakur/colabcode/## colabcodeを起動
“`py
from colabcode import ColabCode
ColabCode(port=10000)
“`上記を実行すると、ngrokのリンクがJupyte Notebookに表示されるので、そのリンクをクリックするとVSCode(codesever)が表示されます。
## python
![Screen Shot 2020-09-11 at 10.42.54 AM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24723/c35df081-60c1-b56c-3aa1-9e544c10a514.png)あとはターミナルを開いて、普通に`python test.py`で実行できます。
ちなみに、エディタのサイドバーのGearアイコ
yukicoder contest 265 参戦記
# yukicoder contest 265 参戦記
## [A 1223 I hate Golf](https://yukicoder.me/problems/no/1223)
[ABC177A – Don’t be late](https://atcoder.jp/contests/abc177/tasks/abc177_a) かなと思ったが、座標がマイナスの可能性があった. まあ、abs つけるだけだよねと思いつつ、ABC177 のときにはやらなかった = 付け忘れをやらかすなどした.
“`python
N, K, T = map(int, input().split())if K * T >= abs(N):
print(‘Yes’)
else:
print(‘No’)
“`## [B 1224 I hate Sqrt Inequality](https://yukicoder.me/problems/no/1224)
a,b≤1018 を見て、素因数分解して共通の素数で割りたいけど、エラトステネスの篩が使えない値域じ
【Udemy Python3入門+応用】 64. 名前空間とスコープ
**※この記事はUdemyの
「[現役シリコンバレーエンジニアが教えるPython3入門+応用+アメリカのシリコンバレー流コードスタイル](https://www.udemy.com/course/python-beginner/ “現役シリコンバレーエンジニアが教えるPython3入門+応用+アメリカのシリコンバレー流コードスタイル”)」
の講座を受講した上での、自分用の授業ノートです。
講師の[酒井潤](https://twitter.com/sakaijun “酒井潤”)さんから許可をいただいた上で公開しています。**##■名前空間とスコープ
“`python
animal = ‘cat’def f():
print(animal)f()
“`
“`:result
cat
“`
ここでの `animal` はグローバル変数なので、もちろん `f()` 内で呼び出すことができる。
“`python
animal = ‘cat’def f():
animal = ‘dog’
print(‘after:’, animal)
Herokuに入れたPostgreSQLの並び順を変更する
#背景
Djangoに関して。データベースに入っている投稿を作成順(ID順)に並べる際に、ローカル環境ではデフォルトで入っているMySQLがID順で格納されていくため、特に苦労することはなかった。しかしHerokuでデプロイした後はMySQLが使えないので、PostgreSQLを使うことになる。PostgreSQLのデータの並び順はデフォルトではID順ではないため(更新順?いまだにどう並んでいるか分かりません)、自分で設定する必要がある。
#対応策
データベースの中に入ってそこでORDER_BY句を設定することも考えたが(おそらくこれが王道)、慣れていないためより簡単なDjangoのviews.py上に一つコードを加える対応をとった。“`ordering = [‘id’]“`を入れることで表示上は問題なくなる。“`python:views.py
class DataList(ListView):
template_name = “list.html”
model = DataModel
ordering = [‘-id’]
“`#order
【Udemy Python3入門+応用】 63. ジェネレーター内包表記
**※この記事はUdemyの
「[現役シリコンバレーエンジニアが教えるPython3入門+応用+アメリカのシリコンバレー流コードスタイル](https://www.udemy.com/course/python-beginner/ “現役シリコンバレーエンジニアが教えるPython3入門+応用+アメリカのシリコンバレー流コードスタイル”)」
の講座を受講した上での、自分用の授業ノートです。
講師の[酒井潤](https://twitter.com/sakaijun “酒井潤”)さんから許可をいただいた上で公開しています。**##■ジェネレーター内包表記
#####◆普通に記述した場合
“`python
def g():
for i in range(10):
yield ig = g()
print(type(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))“`
“`:result
0
1
2
3
pythonでスゴロクゲームと足し算ゲーム
同じ変数への代入等あり
テキストにあった内容を使ってpythonの挙動確認と備忘録
# 30までの交互スゴロクゲーム
“`python
pl_pos = 1
com_pos = 1while True:
input(“enter-playerが動く”)
pl_pos = pl_pos + random.randint(1,6)if pl_pos>30:
pl_pos = 30banmen()
if pl_pos ==30:
print(“plのかち”)
breakinput(“enter-comが動く”)
com_pos = com_pos + random.randint(1,6)if com_pos>30:
com_pos = 30banmen()
if com_pos ==30:
print(“comの
Windows10でBleakを使ってSwitchBotを動かす
# はじめに
この記事は、Windows10でBleakを用いたSwitchBotのBLE通信を行いたい人向けのチュートリアルの記事です。SwitchBotに接続して命令バイトを送信するまでを行います。言語はpythonです。
また、今回の記事ではSwitchBotを用いていますが、接続して命令バイトを送信しているだけなので、Bleakを用いたBLE通信として他のBrueTooth機器にも利用できると思います。(おそらく)# 要件
* Windows10
* python 3.7.6
* bleak 0.7.1
* SwitchBot
* Bluetooth_Dongle 5.0(PCに内蔵の送受信機がなければ必要)#SwitchBot
Bluetoothによって遠隔で操作できるスイッチです。複数の種類がありますが、今回は以下のSwitchBotを使用します
https://www.switchbot.jp/bot# BLE通信
BLE(Bluetooth Low Energy)通信はBluetoothバージョン4.0から追加された低電力でBluetooth機器
メモ : CmdStanPyの環境をdockerで用意する
「[StanとRでベイズ統計モデリング](https://www.kyoritsu-pub.co.jp/bookdetail/9784320112421)」を読むために、CmdStanPy環境をdockerで用意しました。CmdStanPyの環境構築については日本語の資料はほとんどなさそうだったので、もしかしたら誰かの役に立つかもしれないと思い、メモに残しておきます。
# はじめに
[公式document](https://cmdstanpy.readthedocs.io/en/latest/getting_started.html#install-package-cmdstanpy)にもある通り、PyStanを既にインストールした環境を使っている方はご注意ください。
> Note for PyStan users: PyStan and CmdStanPy should be installed in separate environments. If you already have PyStan installed, you should take care to instal
Python フォルダ内の全Zipを解凍処理(再帰的)文字化け対応 (Qiita初投稿)
初Qiita投稿
普段はRとかPythonとデータ可視化をTableauでやっています。#ZipをPythonで解凍したいけど文字化けするしてしまうとき
#import
“`
from zipfile import ZipFile
“`
#文字化けしないで解凍
“`
for file in zip_files:
with ZipFile(file) as zip:
for info in zip.infolist():
info.filename = info.filename.encode(‘cp437’).decode(‘cp932’)
zip.extract(info)
“`
人によってはunicodeとかでもできるらしい。
これで解凍できます。##Qiita初投稿
何年も私、助けられすぎているので少しずつノウハウを更新できれば。
がんばります
LambdaでDynamoDBに複数レコードの書き込みをする(Python、JavaScript)
## はじめに
DynamoDBに複数レコードを書き込み(更新)する必要があったので、実装してみた結果と注意的なものを書き留めたいと思い記事を投稿した
またPythonとNode.jsの両方での実装を載せようと思います## 前提
### テーブル
今回書き込みをするテーブルは以下を想定
テーブル名:Users
カラムと型(スキーマ自体に型はありませんが、登録するデータの型として便宜上決めておきます)は以下の通り– id(primary key):Number
– name:String
– address:String
– friends: List[Map]friendはid, name, addressのキーを持つMapの一覧を想定
今回は複雑めな型(Userテーブルのfriendのような型)であっても、書き込みができることも示しておきたいことの一つなので、そもそもテーブルの設計がベストであるかは一旦無視でいきます### Lambdaの準備
今回はLambda上で動くコードを掲載するので、Lambdaは各自で準備ができていることを前提とします### 記事の流
Keras好きがPyTorchに挑戦してみた
# はじめに
ずっとKerasでばかりDeep Learningのプログラムを書いてきたが、いよいよPyTorchで書かなくてはいけない状況になってきたので、お勉強がてら、MNISTを例にとりあえず動くものを作ってみました。# まずはチュートリアル
とりあえず最初はチュートリアルだろうということで、[PyTorchのチュートリアル](https://pytorch.org/tutorials/)を最初から始めてみました。しかし、これが実に分かりづらい。
「Autograd」が感覚的につかめず、モチベーションが10%以下まで落ち込みました。今では、最初からではなく、「[What is torch.nn really?](https://pytorch.org/tutorials/beginner/nn_tutorial.html)」から初めて、わからないところを調べたほうがよかったと思っています。
# バックアップ
そんな予感がしていたので、チュートリアルを始めるとともに、書籍の購入を行いました。
色々調べて、以下の2冊を選びました。– 「[現場で使える!PyTorch
set型で利用できるメソッド
#set型で利用できるメソッド
以下の例では数上記のを使用しましたが、文字列でも同様に動作します。
* union()メソッド
重複のない和集合を返すメソッドです、演算子「 | 」と同じように使えます。
>a1 = {1, 2, 3}
>a2 = {2, 3, 4}
>a3 = {aa, bb, cc}
>a3 = {bb, cc, dd}>union_a = a1.union(a2)
>print(union_a)
># {0, 1, 2, 3}上記のような結果となります。union()メソッドは重複しない和集合を返すので「2,3」が重複して返って来ることはないです。
* intersection()メソッド
重複している集合体を返します。演算子「 & 」と同じように使えます。
>a1 = {1, 2, 3}
>a2 = {2, 3, 4}>intersection_a = a1.intersection(a2)
>print(intersection_a)
># {2, 3}上記のような結果となります。intersection()メソッドは重複している