X



【まず1嫁】くだすれPython(超初心者用) その54

■ このスレッドは過去ログ倉庫に格納されています
2021/06/09(水) 21:05:44.61ID:zRBfpo4e
当スレに★Python以外のプログラミング言語での回答類を書くべからず★
派生言語はそれぞれ専スレがある(この板にあるとは限らない)ので、そっち池。
「Ruby」「Rails」「某言語では」「クソチョンw」をNGワード登録推奨。荒らしは、完全スルー放置が一番きらいです。

このスレッドは「お勉強」スレのほうには書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を、勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますので、お礼は Python の布教と初心者の救済をお願いします。

★エラーを解決したい場合★は、
  表示されたエラーの全文(勝手に省略やスクショうp等の横着クソ行為禁止)と、
  実行環境(Pythonのバージョン・OSとIDEの種類およびバージョン)をシッカリ書くこと。

Pythonの★ソースコードをそのまま5ちゃんに貼るとインデントが崩れてチヌ★
【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】掲示板の仕様なので、
プログラム文は↓等の、いわゆるコードうp用サイトに貼ってこいください。
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。
ttp://codepad.org/      ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Python公式◇ http://www.python.org/
◇まとめwiki◇ ttp://python.rdy.jp/wiki.cgi

〇前スレ〇 【まず1嫁】くだすれPython(超初心者用) その53
https://mevius.5ch.net/test/read.cgi/tech/1615846784/

次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
2021/07/03(土) 09:39:19.49ID:UqPPpbRy
>>234
いや単位行列は斜めに1があるやつで
逆行列は普通の行列に逆行列をかけると単位行列になるって言うのはわかるんだよ
ただその後これはスカラーですだのこれはベクトルですだの出てきて記号いっぱいになると途端に訳が分からなくなるのだよ分かる?
行列積があーだのこーだの
2021/07/03(土) 09:40:33.15ID:UqPPpbRy
>>235
偉そうなやつだなあ
友達いないだろお前?
238デフォルトの名無しさん
垢版 |
2021/07/03(土) 11:01:50.13ID:gq7PWL9B
>>236
馬鹿には無理
2021/07/03(土) 11:06:01.41ID:MyiFvpsW
おっさんは行列を高校でやってるからなあ
2021/07/03(土) 11:53:08.74ID:ENhcG6bL
内積、外積
241デフォルトの名無しさん
垢版 |
2021/07/03(土) 12:45:29.69ID:WO4lFPcp
>>236
>分かる?
とか言われてもその気持ちは分からんなぁ

普通に行列やって普通に単位取れたってことは特に苦労しなかったんだから、
ワケが分からなくなることがなかった

記号が一杯でも初見で大丈夫だったからお前の気持ちは一切分からん
2021/07/03(土) 14:35:42.16ID:ZeViGhZj
関流に弟子入りするべき
2021/07/03(土) 16:40:21.53ID:mObkgdSa
>>236
とりあえずは普通の掛け算だと思って
(可換則は成り立たないけど)
大丈夫なんだが
2021/07/03(土) 17:33:35.17ID:KyOEtNLT
pythonってプログラミング言語の中では簡単な方って本当ですか?
最近勉強してるんですが難し過ぎるんですが
245デフォルトの名無しさん
垢版 |
2021/07/03(土) 17:57:04.61ID:2G/hXmzA
[[1,2,3], [1,2,3], [1,2,3]]
がほしいとき
[[1,2,3]*3]じゃなくて[[1,2,3]]*3だけど
感覚的には前者なので違和感が強いです
なんかいい感じに納得させてもらえませんか
2021/07/03(土) 18:07:23.78ID:bc4tv4Cc
>>244
言語としては簡単な方だよ
ただ言語の難しさとプログラミングの難しさって別だからね
言語の選択ってのは迷路の広い入り口を選ぶか狭い入り口を選ぶかであって、迷路を進み始めると後は同じなんだよ
247デフォルトの名無しさん
垢版 |
2021/07/03(土) 18:15:50.79ID:WO4lFPcp
かんたん言ってる奴は先に別の言語をやってた可能性が高い
それに比べるとかんたんと言ってる
2021/07/03(土) 19:42:13.76ID:KyOEtNLT
>>246
なるほど
一つの言語を極めると他の言語を覚えるのは簡単と言うのが分かった気がします
pythonを極められるように頑張ります
2021/07/03(土) 20:08:02.32ID:IMGL3rxE
>>245
'aho'*3は
'ahoahoaho'になる
''や[]は*3に文字列やリストを渡す
役目があって*3の前に役目を終えている
2021/07/03(土) 21:33:02.67ID:I7Zt9Z8V
合成関数のとことかシグモイド関数の微分とかお前らモヤらんのか?
中卒野俺にはわからんがめっちゃ頭いいな
251デフォルトの名無しさん
垢版 |
2021/07/03(土) 23:09:47.68ID:91vjT9iB
頑張って一般化逆行列を理解しよう
2021/07/03(土) 23:27:47.89ID:avhnjRXY
YouTube で有名な、雑食系エンジニア・KENTA のサロンでは、
初心者は、Ruby on Rails から始める

Python, PHP も勧めていない

バックエンドは、Ruby → Go という路線
253デフォルトの名無しさん
垢版 |
2021/07/04(日) 00:07:57.92ID:DDnLb3K7
ケンタはあわしろ氏の一番弟子。
実力は折り紙付き。
2021/07/04(日) 03:15:46.12ID:kVVHiiiU
TIOBEのTOP10から転落した落ち目言語はポイーで
255デフォルトの名無しさん
垢版 |
2021/07/04(日) 08:47:31.64ID:5abFjuPT
範囲内、重複なしのreq_indexでdb(リスト)からデータ取得する
selection = [db[idx] for idx in req]
こういうのの逆で、渡されたreqに含まれてないidxデータ取得するとき、一番スマートなのはどういう書き方?
256デフォルトの名無しさん
垢版 |
2021/07/04(日) 08:50:25.61ID:5abFjuPT
db[あ,い,う,え]
req[0,2]
get[い,え]
ていう場合
2021/07/04(日) 10:13:27.09ID:hbHHSLi0
>>255
[[i, v] for i, v in enumrate(db) if i not in req]

おわり
258デフォルトの名無しさん
垢版 |
2021/07/04(日) 10:17:54.09ID:pili1Lz/
>>245
[3*3] -> [9]
[3]*3 -> [3, 3, 3]
[[3*3]] -> [[9]]
[[3]*3] -> [[3, 3, 3]]
[[3]]*3 -> [[3], [3], [3]]
259デフォルトの名無しさん
垢版 |
2021/07/04(日) 10:19:32.88ID:pili1Lz/
>>248
>一つの言語を極めると他の言語を覚えるのは簡単と言う

誰が言ったの?
2021/07/04(日) 12:15:28.10ID:1R4z78Cs
ってみんな言ってます!
2021/07/04(日) 14:20:14.26ID:BYgnURbL
わしもそう思う
2021/07/04(日) 15:29:30.76ID:uQBb7zfv
いやプログラムの根底は演算と型と制御だろ
そりゃベースが出来てれば大体何でも出来るわ
2021/07/04(日) 15:59:44.10ID:SaImNcMt
あとライブラリの探し方と使い方かな
264デフォルトの名無しさん
垢版 |
2021/07/04(日) 16:34:17.72ID:i/yFAdE3
>>255
db=[10,20,30,40]
req=[0,2]
a=list(set(db)-{db[i] for i in req})
2021/07/04(日) 17:11:19.65ID:Thc8jF3i
プログラムの根底とプログラミングの根底は全く別物
その程度の区別が出来ないようなら大体何も出来ない
2021/07/04(日) 18:27:39.63ID:CJXzLbyo
proxyを通して接続するときに、そのproxyが生きているかどうかだけ確認したいのですが
実際に存在する適当なサイトに接続してステータスコード200を確認すればよいのでしょうか?

今は、
プロキシ経由OKの(なるべくレスポンスの速い)サイトでrequests.getして200返ってきたらproxy生存
みたいにしてるのですが
それ専用のチェックの仕方があるのかな、と気になりました
2021/07/04(日) 19:06:12.27ID:KdurfuN3
>>265
確かに1行目と2行目の文章が繋がってないお前が言うと説得力あるなあ
2021/07/04(日) 20:09:32.45ID:L4Prcy4Z
>>255
[db[i] for i in {i for i in range(len(db))}-set(req)]
2021/07/04(日) 21:43:55.75ID:aHJdtdht
>一つの言語を極めると、他の言語を覚えるのは簡単

これ自体が嘘。
10年以上掛かるし、各言語の特殊性を学んでも、再利用できないから無駄

YouTube で有名な、雑食系エンジニア・KENTA は全く逆の事を言ってる

80 : 20 の法則。
簡単な80% の部分だけを学ぶべき

難しい20%の部分は、特殊だから再利用できない・使う頻度が少ない割に、
学ぶ時間が何倍も掛かるので、効率が悪い

専門学校で必ず言われること

例えば、法律の条文の暗記とか、
15題ずつ、重要度A・B・Cのランクがあったら、
AB だけ暗記して、C を捨てろとか

使う・出る確率が低いから、そこに暗記コストを掛けるのが無駄

ドラゴン桜で言う、京大英語・赤本で英語を学ぶなという格言。
特殊で、誰も使わないようなトリビア表現に、時間を掛けるな

数百人のネイティブがチェックしてる、英検をやれ
2021/07/04(日) 21:52:26.25ID:1R4z78Cs
>>269
その20:80割合逆だろ
簡単以前なことも学べてないじゃないか
2021/07/04(日) 22:03:17.62ID:9C8iWrP9
推奨NGWord
Ruby
あわしろ氏
雑食系エンジニア
272デフォルトの名無しさん
垢版 |
2021/07/04(日) 22:19:49.10ID:YfSOCxWP
そうして簡単な単純労働しかできない人が量産されるんですね
2021/07/04(日) 22:21:45.55ID:1R4z78Cs
簡単な部分の精度を上げろってこった
2021/07/04(日) 22:35:43.14ID:ZDZVmq0W
難しい2割を理解できる人が世の中をまわす
2021/07/04(日) 22:38:11.14ID:1R4z78Cs
むつかしいほうは8割だっつっとろうが
2021/07/04(日) 22:39:45.78ID:SVViFRUT
>>270
横からだが逆じゃないと思うよ
もちろん全体の100をどう捉えるか次第だけど
277269
垢版 |
2021/07/04(日) 22:40:16.40ID:aHJdtdht
簡単な80% の部分を、横に進めていく。
Ruby on Rails なんて、まさにそう。浅く広く

Rails, Linux, Docker Compose, Node.js(Webpack, Babel), Bootstrap
VSCode(Remote Container, WSL2 ならRemote WSL), Heroku, CircleCI、データベース

さらに、AWS Fargate, Terraform, Vue.js, TypeScript

KENTA のサロン、AWSのくろかわこうへいのサロンに入る。
だから、1年の未経験者が、10年以上のプロよりも技術力が上になる!

時間が掛かる、難しい20%の部分を勉強しないから。
これを、KENTAが勉強方法のチートと言ってる

簡単な80%の部分の勉強時間は、20%しか掛からないのに、
難しい20%の部分の勉強時間は、80%掛かる

つまり、勉強時間では逆になる。
しかも、特殊だから再利用できない・使う頻度が少なく、役に立たない

例えば、C を10年やってる香具師の大部分の時間が、ポインターを追っかけている時間

だから、時間が掛かるだけで、何も学べていないから、
Railsを1年やっただけの未経験者に負けてしまう

Rubyの女神・池澤あやかも言ってる。
大学生がプログラミングで挫折するのは、Cをやるからだって

つまり、ほぼ無意味なことを長時間やるから、しょーもない
2021/07/04(日) 22:41:49.47ID:ZDZVmq0W
重要なのは2割って話は知ってるけど
簡単なのは2割って知らんな
2021/07/04(日) 22:48:09.20ID:1R4z78Cs
統失煽りで文化人を一人殺したので
名前が同じだけでもてはやされてたKENTAは用済み
2021/07/04(日) 23:01:11.65ID:PTs94Rmb
Rubyって時点でお察し
281デフォルトの名無しさん
垢版 |
2021/07/05(月) 00:27:11.73ID:SA0zdM26
> だから、1年の未経験者が、10年以上のプロよりも技術力が上になる!

プロ舐めすぎやろ
自分のレベルすら正確に把握出来てないだけじゃん
282デフォルトの名無しさん
垢版 |
2021/07/05(月) 01:30:50.54ID:cyuSl6kj
>>245
演算規則を考えよう
1 * 3 = 1 + 1 + 1 = 3
[1] * 3 = [1] + [1] + [1] = [1, 1, 1]
であるので、
[[1]] * 3 = [[1]] + [[1]] + [[1]] = [[1], [1], [1]]
となる
加算と乗算に一貫性をもたせるとしたらこうするか、
1 + 1 = [1, 1]
[1] + [1] = [[1] + [1]]
のような規則にするしかないけど、明らかに1 + 1がリストになっちゃうのは使いにくいでしょ
2021/07/05(月) 01:54:24.43ID:ts/O0CHN
>>281
ダニングクルーガー効果ってのがあってぇ…
284デフォルトの名無しさん
垢版 |
2021/07/05(月) 08:07:41.22ID:308oM4PQ
>>255
db=[10,20,30,40]
req=[0,2]
a=len(db)
for i in req: db.pop(i-a)
285デフォルトの名無しさん
垢版 |
2021/07/05(月) 11:09:29.47ID:c503ASju
>>281
https://bokurema.com/
2021/07/05(月) 11:52:44.70ID:DJ8mSFAE
Railsはすべて分かっている人にとっては楽
初心者は設定や、細かいチューニングで必ずつまずく
2021/07/05(月) 14:49:22.59ID:WfBg4Dd7
pandasで特定の列(横)の重複した値を削除して一つだけにするのってどうするの
例えばA,B,C,B,C,DってあったらA,B,C,,,Dにしたい(BやCのみでも可)
288デフォルトの名無しさん
垢版 |
2021/07/05(月) 14:56:34.11ID:zfQ+6anv
kwsk
289デフォルトの名無しさん
垢版 |
2021/07/05(月) 17:20:56.75ID:rH8GS2yx
>>287
あえてPandas使ってとなるとむずいな
2021/07/05(月) 18:56:50.40ID:+tp9LwEv
BやCのみでも可なら
df.replace('B','').replace('C','')

それとは別にdf.duplicatedで空白にしたいインデックスがTrueになる
データフレームが得られる

データフレームにSQLほどの機能はないようだ
291デフォルトの名無しさん
垢版 |
2021/07/05(月) 20:17:35.08ID:41zUyXOD
dfの横はlist的に扱えるから一次元リストの重複要素を任意の値に置き換えるという操作をするだけでは?
2021/07/05(月) 21:27:56.39ID:WfBg4Dd7
サンクス!
2021/07/06(火) 00:10:38.82ID:c1bms/+C
みんなのPythonで勉強しているのですがP340のwith文の説明がよくわかりません
私の理解では、with文でopen()した場合は、ファイルを最後まで読み切ったら自動的にclose()する処理になると思っています
この参考書には、openするファイルが存在しなかったらファイルを開かないで処理を終了する、ということが書いてあるのですが間違っていないでしょうか
openするファイルが存在しないと普通にエラーになるのですが
294デフォルトの名無しさん
垢版 |
2021/07/06(火) 00:38:25.59ID:wcT5LwJn
modeによるとしか
readならその通り。writeはファイルが存在しなければ作成される。
295デフォルトの名無しさん
垢版 |
2021/07/06(火) 00:48:09.74ID:IX8Wt/RA
modeの話?
2021/07/06(火) 00:52:21.13ID:AJxevGXU
Ruby では、存在しないファイルを読もうとしたら、エラーになる。No such file

print File.read 'abc.txt'

出力
No such file or directory @ rb_sysopen - abc.txt (Errno::ENOENT)
2021/07/06(火) 01:06:54.99ID:c1bms/+C
参考書の例文はモード指定しない既定なのでreadです
with文のreadモードで開いたファイルをfor文で一行ずつprintしています
説明によると、ファイルが存在していたら処理を行うという意味のコードになるとのことです
2021/07/06(火) 01:21:35.74ID:n3HBlCzk
おじちゃんせっかくマニュアルあるのに読まない子の気持ちはわからないよ
https://docs.python.org/ja/3/library/functions.html?highlight=open#open
2021/07/06(火) 01:33:10.58ID:M25Qh6q2
>>293
>私の理解では、with文でopen()した場合は、ファイルを最後まで読み切ったら自動的にclose()する処理になると思っています

違うよ

>この参考書には、openするファイルが存在しなかったらファイルを開かないで処理を終了する、ということが書いてあるのですが間違っていないでしょうか

サンプルコードではFileNotFoundErrorをハンドリングしてるね
https://colab.research.google.com/github/shibats/minpy_samplecodes_4th/blob/master/Chapter10/10-01.ipynb
300デフォルトの名無しさん
垢版 |
2021/07/06(火) 16:37:29.04ID:ewE8N/dz
def test():
__return random.randint(2,5)

obj=[test(), 0, 1]
l = random.choices(obj, k=3)
# -> [4,2,0]

testが毎回実行されて(lに違う数字で入って)ほしい
どう書けばいいの?
2021/07/06(火) 16:45:42.95ID:Fj5fpx8O
>>293
withブロックを出るときにclose
open関数の中で
ファイル確認して
ファイルを開く
ファイル確認でエラー
開いてない
ないのに開けない
2021/07/06(火) 16:46:46.00ID:8bcWgGBz
def test():
__return random.randint(2,5)

def exectest():
__obj=[test(), 0, 1]
__l = random.choices(obj, k=3)

exectest()
2021/07/06(火) 18:44:35.16ID:yuAoY/NP
numpy.loadtxtでcsvファイルを読み込むんだが、csvファイルのデータが崩れていることがある。
で、何行目にエラーがあって取り込めなかったのかを知りたいんだが、いい方法ない?

データが崩れているというのは、例えば、
-1.234,123.45.789,
みたいに、ありえない数値表現が紛れているということなんだが

csvファイルが崩れないようにするのが本筋だけどそっちに頑張る気がないので
おかしな行を見つけたら手動でその行を削除して再度処理という感じで運用したい
2021/07/06(火) 19:22:28.01ID:BTTPD25v
typeでチェックすれば
305デフォルトの名無しさん
垢版 |
2021/07/06(火) 20:02:32.04ID:MGYt6+tS
通常はどういう数値が入るのか分からんとなんとも言えないな
2021/07/06(火) 21:14:42.87ID:yuAoY/NP
>>304
詳しく

>>305
通常は小数点付きの数値でマイナスの場合もある
307デフォルトの名無しさん
垢版 |
2021/07/07(水) 00:12:50.55ID:eWdID8i0
>>303
1pandasで文字列としてロード
2走査しつつ数値にパース
3失敗したらスキップ
2021/07/07(水) 00:17:53.03ID:bUHYGk47
例えば、Ruby では各列を、変換器・converter で変換して、
変換できたかどうか、型を確認するとか

require "csv"

input_str = <<"EOT"
-0.0,1.2.3
9..9,-0
EOT

csv = CSV.new( input_str )
csv.convert( :numeric ) # 数値型へ変換する

line_num = 0 # 行番号
csv.each do |row|
line_num += 1
p [ line_num, row[ 0 ].class, row[ 1 ].class ]
end

出力
[1, Float, String]
[2, String, Integer]

1.2.3, 9..9 が、変換に失敗して、文字列型のまま
2021/07/07(水) 00:41:11.10ID:DonMIAPH
>>293です
よく分からなかったのは私の勘違いが原因でした
P340に記載されている内容はP338の差分だったことが分かりました
やっと理解できました
失礼いたしました、皆様ありがとうございました
2021/07/07(水) 00:49:15.09ID:85qcEXGX
>>308
せめてnumpyを移植してから知った風な口を利け
2021/07/07(水) 14:46:15.07ID:JFEXb6g2
pep8に
単一の文字 'l' (小文字のエル)、'O' (大文字のオー)、'I'(大文字のアイ) を決して変数に使わないでください。
フォントによっては、これらの文字は数字の1や0と区別が付かない場合があります。

ってあるけど、上のような理屈であれば、単一の文字でなくても同じ理由で使うべきではないことになるんでは?
312デフォルトの名無しさん
垢版 |
2021/07/07(水) 15:11:46.21ID:49748z4f
10ng と long と IONG を間違うかって話だな
2021/07/07(水) 16:43:31.83ID:2KJNjcti
$python hoge.py 10 | python hoge2.py | python hoge3.py

### hoge.py ###
import sys
for i in range(int(sys.argv[1])):
_print(i)

### hoge2.py ###
import sys
a=''.join(sys.stdin.readlines()).strip().split('\n')
a.append(len(a))
for n in a:
_print(n)

### hoge3.py ###
import sys
print(len(''.join(sys.stdin.readlines()).strip().split('\n')))

ざっくり
(1)hoge.py 10で10個数字を出力
(2)hoge2.pyで受け取り、値を追加して出力
(3)hoge3.pyで受け取り、1個増えたことを確認
なのですが、受け取った値を成形する
''.join(sys.stdin.readlines()).strip().split('\n')
の部分はこの書き方でよいでしょうか?
そもそも標準出力をprintでやるのかもわかりません
それ専用の標準ライブラリとかあるのかな
2021/07/07(水) 17:49:17.95ID:vUBZA2na
>>313
標準出力はprintでやるのでいいよ
1行ごとに処理したいわけじゃなければ.read().splitlines()すればいいと思う

#hoge2.py
import sys
a = sys.stdin.read().splitlines()
a.append(len(a))
for n in a:
__print(n)

#hoge3.py
import sys
print(len(sys.stdin.read().splitlines()))
2021/07/07(水) 18:46:33.05ID:2KJNjcti
>>314
なるほどprintでよかったんですね
splitlinesできました!ありがとうございました
2021/07/08(木) 21:41:26.17ID:g5ngXWNu
raspbian buster上のpython3.7.3で、
subprocess上で読み込むcsvファイルをStringIOにするとうまくいかず困っています。

以下2つのソースで、異なるのは1行目だけです。

[test1.py]
CSVFILE = '/tmp/1.csv'
with open(f'{CSVFILE}', 'a') as CSV:
writer = csv.writer(CSV)
writer.writerow([12,34,56])
CSV.close()
cmd = (f'cat {CSVFILE}')
proc = subprocess.run(cmd, shell=True)

[test2.py]
CSVFILE = io.StringIO()
with open(f'{CSVFILE}', 'a') as CSV:
writer = csv.writer(CSV)
writer.writerow([12,34,56])
CSV.close()
cmd = (f'cat {CSVFILE}')
proc = subprocess.run(cmd, shell=True)

$ python3 test1.py
12,34,56

$ python3 test2.py
/bin/sh: 1: Syntax error: end of file unexpected

何を見落としてるんでしょうか…?
2021/07/08(木) 22:38:29.83ID:PyDOiOef
何をしたいかが全く分からないがとにかく
そのエラーは/bin/shが
cat <_io.StringIO object at 0x7f1360de01f0>
とかいう文字列を実行しようとして
>が出力のリダイレクトと解釈してその後にファイル名がないからエラーになってる
318316
垢版 |
2021/07/09(金) 07:49:00.55ID:6wIK8ZSE
>>317
ありがとうございます!
例で実現したいことは、
$ python3 test2.py
12,34,56
この結果が出るにはどうしたら良いかが知りたいです。

シェルから見て実体のあるファイル名でないとダメってことですね。それはそうか。
一度ファイルシステムに書き出せば良いのでしょうが、それ以外の手はないでしょうか。

なお、例では長くなるのでcatコマンドに書き換えましたが、実際にやりたいことは
「pythonの前段処理結果をcsvに書き込み、そのcsvをgnuplotで読み込んで作図(を毎秒繰り返し)」というプログラムです。
処理結果の数字は毎秒積み上がっていくのと、プログラム終了時には実体のcsvファイルに書き出したいのとで
プログラム上では、StringIOを使ったcsvファイルとして処理したいです。
2021/07/09(金) 08:12:26.61ID:2AR12dC9
>>318
>「pythonの前段処理結果をcsvに書き込み、そのcsvをgnuplotで読み込んで作図(を毎秒繰り返し)」
だったら質問の意味が尚更分からん
上記の処理を1プログラムでやりたいなら
Pythonで前処理⇒直接前処理結果をグラフ作画⇒作画後に必要に合わせてデータをcsv出力
っていう流れの方が良くね?
書き込んでから読み込む必要性が全く分からん
320316
垢版 |
2021/07/09(金) 08:30:32.97ID:6wIK8ZSE
>Pythonで前処理⇒直接前処理結果をグラフ作画
前処理では複数行複数列の数字(時間と温度です)を積み上げていくので、
その前処理結果のgnuplotへの渡し方としてcsvが適当かな、と思ったためです。

それとも、そもそもpythonスクリプトとしては前処理のアウトプットだけでexitし、
gnuplotはOS側シェルで普通に動かして前処理結果を使えば?という意味だとすれば、
今回はpythonスクリプト内でgnuplotを動かしたいです。
2021/07/09(金) 08:51:54.66ID:sj/mydTS
データが来るたびにファイルに追記していく(writeのあとにflush)
gnuplotは別に起動して毎秒ファイルを読み直す
と分けるのがよさそうに見える
2021/07/09(金) 09:04:12.08ID:2AR12dC9
>>320
>その前処理結果のgnuplotへの渡し方としてcsvが適当かな、と思ったためです
gunplotのマニュアル確認したけど、それなら素直にCSVファイルとして書き出さないと無理じゃないか?

大学か会社の都合か分からんけど
Pythonで素直に一連の動作をさせるなら
matplotlibの方がよっぽど楽だけど、それだとダメなんだよな
323316
垢版 |
2021/07/09(金) 09:08:57.43ID:6wIK8ZSE
もともとはシェルスクリプトでそんな感じでやっていて、
拾ってきたpythonで温度を測定し、結果を/tmp/temp.csvに書いてそれをgnuplotに読ませてました。
実はgnuplotが書いたグラフ(png)をまた(拾ってきた)pythonでOLEDに描画するという後処理もあって、
全工程で1秒ちょっとかかってました。
そこで、おっしゃ自前でpythonの1スクリプト化して高速化や!コピペマンから脱却するやでー!
という素人考えで今に至っています。
pythonの1スクリプトで、>>316に書いたtest1の方法(中間ファイル書く)でも
シェルスクリプト版の倍は速く動いてるので、あとはStringIOさえできれば…と思ってました。

何分素人なのでそもそもの考え方が間違ってるところもあるとは思いますが、
なぜそう思うに至ったか、という話でした。
324316
垢版 |
2021/07/09(金) 09:14:25.66ID:6wIK8ZSE
>>322
やっぱ実体としてのcsvファイルがないとダメですかね…ありがとうございます。

matplotlibはグラフ描くがgnuplotより難しそうだから見なかったことにしてました。
いい機会だから、もう一度調べてチャレンジしてみます。
2021/07/09(金) 09:20:09.59ID:2AR12dC9
>>323
すげえ面倒な方法で見える化やってるなwwwwww
慣れたらmatplotlibも描くの簡単だぞ、Pandasとかnumpyとの相性も良いし

ただ根本的な所で言えば、既存の見える化フローが結構ヤバイな
(グラフ画像をOLEDで映し出すっていうのが衝撃だわ)

抜本的に改善したいなら
Pythonでデータ処理⇒データベースに書き込み⇒データ系の見える化ツール
っていうのが理想形だな
TableauとかPower BIみたいなツール使うと見やすくなる(有償だけど)
無償ツールなら英語だけどGrafanaとかかな?
326316
垢版 |
2021/07/09(金) 09:39:34.13ID:6wIK8ZSE
>>325
今回はラズパイローカルでグラフを物理画面に即描画したいんですよね。
趣味の焙煎釜の温度変化を熱電対で計測し、手元でリアルタイムにグラフ描画したい、
そして記録をcsvに残したい、というのが目的です。
今は単機能の熱電対プローブでやっていて、温度変化が全くわからないので。

そこでまずはアリエクで300円しないOLEDを買ってラズパイに繋いで
gnuplotのpngをSPI接続のoledに送り出し続けるという形にしました。
ほんとはpythonからoledのライブラリとか使って直接描画とかもできるのかもしれませんが、
matplotlibともどもフタをしてました…
これがうまくいったら、OLEDやめてラズパイケース一体液晶にしても良いかなとは思っています。

GrafanaやPowerBIは別件で使ったこともあって、後分析には良いですよね。
2021/07/09(金) 09:47:38.88ID:2AR12dC9
>>326
>今回はラズパイローカルでグラフを物理画面に即描画したいんですよね。
あーなるほど、そういう使い方もあるのか……俺の知識不足だったすまん
ただ結局グラフのpng画像を生成出来れば問題なさそうだし、matplotlibの差し替えが無難な気はするな
2021/07/09(金) 23:58:06.76ID:dI9qqvw1
int型の足し算ではintクラスの持っている__add__メソッドが暗黙的に呼び出されていると思います。
ですが、
1.__add__(2)
のようにすると1+2が実行されず構文エラーになります。これは何故でしょうか?

str型の場合は問題なく実行され、以下の場合"aabb"が返ってきます。
"aa".__add__("bb")
2021/07/10(土) 00:16:00.86ID:8UKJFvZ/
詳しくないが 1. が小数になるのが原因だろう
(1).__add__(2)
とか
1..__add__(2)
ならエラーにならない
2021/07/10(土) 00:16:24.03ID:Rm9mfcPV
1.x(float)か1のメソッドなのか決まらないから
1.1.__add__とかはメソッドなのが分かるから通る
2021/07/10(土) 00:59:10.02ID:MSe133Oz
>>329
>>330
納得しました!
ありがとうございます
2021/07/10(土) 10:33:46.40ID:chyfa+iT
Python3.7で、pdbのtrace中とそれ以外でプログラムの挙動が異なるという問題に悩んでいます。
■現象
PySimpleGUIのpng画像をwhile True:で延々と更新し続ける処理が、
・pdb set_trace中は想定通りに画像が更新され続ける(ただし途中でpdbが止まる)
・traceを外すとそもそも画像が表示されない

■処理
"conv_image"を別関数で更新し続け、
このwindow更新行をwhileで回すだけの処理です。
window['-image-'].update(data=get_img_data(conv_image))

■pdbが止まる件
不思議なのは、通常pdbはデバッグ中に一度nで次に進むと、次行からはEnterだけでエラーのない限り進みますよね。
でもEnter押しっぱなしにしてると、この行でエラーの表示もなくpdbがいったん止まります。
nを押すと進み、画像が更新されます。
そこが問題のポイントなのかなと思いますが、それ以上の手がかりがありません。
2021/07/10(土) 10:43:05.45ID:lk+ovMEl
>>332
再現できる最小限のコードを提示しましょう
2021/07/10(土) 11:13:10.52ID:Ai3MLyk0
> get_img_data(conv_image)
この計算は一回でいいんじゃ
2021/07/10(土) 13:30:27.85ID:nAGZi/ZP
GUIがメッセージを処理する時間がねえんじゃねえの
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況