Pythonのお勉強 Part56
■ このスレッドは過去ログ倉庫に格納されています
0775デフォルトの名無しさん
垢版 |
2018/06/01(金) 09:28:03.20ID:Lg9QUlsP
Pythonはデータ分析とかサーバーレスとか他のスキルの付属品
言語だけできても仕事はない
0778デフォルトの名無しさん
垢版 |
2018/06/01(金) 11:41:30.78ID:czZmZo8z
>>774
あまり稼げないな
てかプログラマは金にならん
プログラムで稼ぎたかったら海外に行け
近場ならオーストラリアでプログラマでも800万以上稼げるぞ
0779デフォルトの名無しさん
垢版 |
2018/06/01(金) 12:05:57.77ID:S/l41v92
でも海外でのプログラマとしてやってくのはやっぱかなりのスキルが必要だよな、あっちじゃ即戦力じゃないと採用されなさそう。そこまでの自信はないなあ
0780デフォルトの名無しさん
垢版 |
2018/06/01(金) 12:31:16.53ID:yAYIxrCg
>>775
日本では、言語は何とかできるが、機械学習とかの他のスキルがない奴は
エンジニアと言う職種ではなく土方と言う底辺職種になるからね
当然、土方は給料安い

>>779
会社で働きながら(給料もらって)先輩から手取り足取りスキルを教えてもらうようなゆとり教育はないだろう
新人でも給料分はしっかり働けだろうな
0781デフォルトの名無しさん
垢版 |
2018/06/01(金) 18:23:44.00ID:Wbxpqrec
>>779
英語も含めてな
0782デフォルトの名無しさん
垢版 |
2018/06/01(金) 18:58:04.73ID:+SmE1ReQ
現時点でAIデータサイエンティストとして院卒レベルの人材じゃないとノーチャンだよな
冷静に考えて足りないのは、機械学習の上辺を理解してる営業だけ
技術職のキャパはすでに上限ギリギリいっぱいな気がするわ
英語がネイティブレベルならまだ話は別かもだが

自分で事業起こすにしても
凄まじい計算資源がないとまともな事業展開は無理だから、超大手の研究や投資に依存せざるを得ない
量子コンピュータの機械学習への組み込みに成功したらなおさらそれが加速する
割と今ってディストピアまっしぐらじゃね?
0783デフォルトの名無しさん
垢版 |
2018/06/01(金) 19:07:52.28ID:Wbxpqrec
まるちんこ
0784デフォルトの名無しさん
垢版 |
2018/06/02(土) 21:40:26.28ID:MGrdFwMf
JSONの取得について質問です。

#encoding:utf-8
import json, urllib.request, urllib.error, urllib.parse, sys

try: citycode = sys.argv[1]
except: citycode = '400040'
resp = urllib.request.urlopen('http://weather.livedoor.com/forecast/webservice/json/v1?city=%s'%citycode).read()

resp = json.loads(resp)
print(resp['title'])
print('')

for forecast in resp['forecasts']:
print(forecast['dateLabel'] + ' ('+forecast['date']+')')
print('天気:', forecast['telop'])
print('最高気温:', forecast['temperature']['max'])
print('最低気温:', forecast['temperature']['min'])
print('')

ライブドアの天気を取得するスクリプトです。
気温は以下のようにやりたいんですが、気温のデータがない場合(noneとなっている)、max(min)の下のcelsiusもないので、エラーになってしまいます。
その場合は、どのように書くといいんでしょうか?

print('最高気温:', forecast['temperature']['max']['celsius'])
print('最低気温:', forecast['temperature']['min']['celsius'])
0790デフォルトの名無しさん
垢版 |
2018/06/04(月) 01:22:02.49ID:kbH5Vpqw
try: で例外補足して捨てろ
0792デフォルトの名無しさん
垢版 |
2018/06/04(月) 11:17:53.61ID:u6vqWCTI
>>784
参照したい項目が必ず存在するように、データの方を整理する
https://ideone.com/1Jasqb
0793デフォルトの名無しさん
垢版 |
2018/06/04(月) 12:45:18.03ID:FOPJqJUz
この辺Nullableがない言語はつらいねぇ。
0794デフォルトの名無しさん
垢版 |
2018/06/04(月) 16:06:35.84ID:aK73DBqi
>>784
そもそも、urllib.request って、その書式のままじゃ動かないんじゃないのかな?

>>792
基本的(講学的)にはそうなんだけど、
>>789 以上に複雑なことをする必要もないと個人的には思うんだよね。
0795デフォルトの名無しさん
垢版 |
2018/06/05(火) 19:44:01.68ID:YRBptDzO
>>789
>>790
>>792
どうもありがとうございます。
getとtryとdef〜について勉強してみます。

今は以下のスクショのように日付や時刻の勉強しているんですが、fmt1のフォーマットだと、
It's 2018-06-05 19:07:34
-----
と、表示されるんですが、fmt2だと何も表示されません。
日本語の文字を表示させるには特別な手順が必要なんでしょうか?

https://i.imgur.com/dOy4ycM.png
0796デフォルトの名無しさん
垢版 |
2018/06/05(火) 22:43:13.74ID:2hesoCMd
range関数で特定回情報引っ張りたいんですけど
for i in range(j(10)):
じゃダメなの?
0798デフォルトの名無しさん
垢版 |
2018/06/05(火) 23:10:43.97ID:BtMMCZLy
>>796
まずそのj(10)が何なのか説明してくれ
rangeの引数には決まったフォーマットの整数が必要だ
0800デフォルトの名無しさん
垢版 |
2018/06/06(水) 08:33:32.88ID:1A1zAmiY
ちなみに特定回っていうのはイニング、つまり次の打者が誰かってことなんで、後はよろしく
0803デフォルトの名無しさん
垢版 |
2018/06/06(水) 22:05:03.82ID:bzwOpeNt
誰が一体正しいことを言ってるんだ〜
教えてくれ〜
0804デフォルトの名無しさん
垢版 |
2018/06/07(木) 15:42:50.86ID:xzImELPT
obj = [1,2,3,4,5,6,7]
dels = [2,4,6]
から
obj = [1,3,5,7]
という感じにしたい

リストも消したいものリストも取りうる値はすべて把握できる。各リスト内で要素の重複なし
いつもforループでremoveしてるんですが、まとめてやる方法はありませんか
0806デフォルトの名無しさん
垢版 |
2018/06/07(木) 23:35:55.51ID:fBRjCnD9
>>804
list(set(obj)-set(dels))
0808デフォルトの名無しさん
垢版 |
2018/06/08(金) 18:08:38.06ID:SF+NOFIK
>>805,806
set経由すると順番変わっちゃうよね。
それに805はdelsにあってobjに出てこない要素があったらまずいと思う

forは使うけど内包表記でこう書くしかないんじゃないかな
[x for x in obj if x not in dels]
0810デフォルトの名無しさん
垢版 |
2018/06/09(土) 00:10:36.97ID:Ns8l28oa
>808
obj dels の要素数をN Mとして、計算量が、O(NM)になるよ。
N M が小さいうちはいいけど、大きくなると相当に遅いのでは。

obj dels がソート済みなら、尺取り法で、O(N+M)にできるよ。
毎回ソートする場合でも、O(N log N + M log M)に収まるよ。

N M が小さい(64以下とか)なら、要素の有無をビット列のフラグで表して、
obj -= obj & dels
とすれば、速くなるよ。
0812デフォルトの名無しさん
垢版 |
2018/06/09(土) 00:45:21.09ID:csk1Wy/Y
>>810
処理する前にdelsをsetにしとけば、mが大きすぎなければ多分ハッシュ使ってるのでO(n)になるんじゃないかな。
ヒープみたいなのでもO(n log m)でしょ。
0816デフォルトの名無しさん
垢版 |
2018/06/09(土) 09:44:21.08ID:OQQgQKSz
スクリプトは基本的にゲロ遅いから、アルゴリズムの計算量的には非効率でも
現実には実行されるPythonのインストラクション数が少ない方が速いケースが多いよ
0817デフォルトの名無しさん
垢版 |
2018/06/09(土) 09:51:35.27ID:eGSjtA/z
尺取り法でどうやるんだろ
俺もforループか内包くらいしかわからん…
配列の順番変わっていいならsetするけど
0818デフォルトの名無しさん
垢版 |
2018/06/09(土) 10:33:06.91ID:WtghSZSO
>817
尺取り法での実装はこんな感じだと思うよ。
obj を idx1 で走査して、
dels を idx2 で走査する。
更新結果はobjnew(最初は空)に保持する。

obj[idx1] < dels[idx2] なら、objnew にobj[idx1]を追加し、idx1を一つ増やす

obj[idx1] == dels[idx2] なら、idx1とidx2をそれぞれ一つ増やす

obj[idx1] > dels[idx2] なら、idx2を一つ増やす

これが、obj, dels のどちらかの要素が尽きたら終わり

上の説明とはちょっと違うけど、コードにすると以下のような感じ。
質問者の希望としては、ループを回さず手短に書きたいってことだろうから、期待には沿えてないかな。

CENTINEL = float("inf")
dels.append(CENTINEL)
objnew = []
i = 0
for x in obj:
__while x > dels[i]: i += 1
__if x < dels[i]:
____objnew.append(x)
0819デフォルトの名無しさん
垢版 |
2018/06/09(土) 10:35:52.27ID:hMCeqk2j
範囲がないのに尺取り法と呼ぶのか?
マッチングとか突合せとか呼ばれる、COBOLなんかでよく使われる伝統的な方法だよねそれ
O(N+M)ある程度の要素数がないとPythonインタプリタのゲロ遅さがネックになるから実際にはあまり速くないと思う
0820デフォルトの名無しさん
垢版 |
2018/06/09(土) 11:20:53.41ID:r/WMfZjs
>819
ご指摘ありがとう。
ポインタ2つ使ってリストをO(N+M)で走査する手法を、尺取り法というのだと思ってた。
尺取り法でググったところ、1つのリストの始点と終点にポインタを置いて、範囲に関する数え上げや最小区間などを求める使い方が多いんだね。
蟻本だと、区間の先頭と末尾を交互に進めながら条件を満たす最小の区間を求める手法、と説明されてた。


Pythonだと、とてつもなく遅くなるのは同意。
0824デフォルトの名無しさん
垢版 |
2018/06/10(日) 08:03:22.50ID:eKIytbed
外部コマンドを実行する場合、commands.getoutputとsubprocess.callとどっちがよいの?
0825デフォルトの名無しさん
垢版 |
2018/06/10(日) 08:06:40.10ID:eKIytbed
自己レス
osやcommandsは古いから非推奨なのか
環境変数を取得するのにos.getenvを使ってるんだけど、他の方法に置き換えた方がよいの?
0827デフォルトの名無しさん
垢版 |
2018/06/11(月) 13:01:13.27ID:K1UP5N/E
三項演算子って何だ、まったく知らんぞい!
なんかメリットとか有るのかな
0828デフォルトの名無しさん
垢版 |
2018/06/11(月) 13:09:36.63ID:tK3aH3wF
●一行で書ける
●文ではなく式として扱える
0829デフォルトの名無しさん
垢版 |
2018/06/11(月) 13:24:27.07ID:1B6gzu8+
pythonの三項演算式ってリスト内包に通ずるものがあるよな。
ある種の一貫性があるような無いような。
0830デフォルトの名無しさん
垢版 |
2018/06/11(月) 13:26:51.12ID:urgYl6nk
三項演算子のネストをしたときに
いつも優先順位が不安になる
0831デフォルトの名無しさん
垢版 |
2018/06/11(月) 13:47:22.28ID:CFwM+3k+
1 if A else 2 if B else 3

最初に評価されるのがAかBかってことだな。
Aっぽい気がするし試したら実際そうだったけど不安にはなるな。
0832デフォルトの名無しさん
垢版 |
2018/06/11(月) 14:15:29.47ID:/EsUeVn+
switch文はいらんけど、switch式は欲しいな。
0834デフォルトの名無しさん
垢版 |
2018/06/11(月) 14:59:00.26ID:539MWtkj
1 if A else 2 if B else 3 if C else 4
0835デフォルトの名無しさん
垢版 |
2018/06/11(月) 16:43:43.91ID:K1UP5N/E
Python3を始めたんだけど、これ面白いね。
他の人の書いたコードが読みやすいから参考にしやすい、勉強になるーー
他の言語は諦める。
0836デフォルトの名無しさん
垢版 |
2018/06/11(月) 18:58:31.63ID:sTqEU8aL
俺はpythonのためにラテン語諦めることにした。
0840デフォルトの名無しさん
垢版 |
2018/06/12(火) 17:09:43.65ID:bLF3+6cr
>>835
ようこそ
0841デフォルトの名無しさん
垢版 |
2018/06/12(火) 17:18:14.64ID:E+wkASA2
iOSのpythonista3でアプリ作り始めました。
画面の中のボタンを押すと、別のpyuiファイルをload_view()でcallして、
別の画面へ切り替わる、ということはできたんですが、切り替わる、というよりも
別ウィンドウが何個も立ち上がる、という状態になってるだけみたいです。
画面が切り替わる遷移ってどのメソッド使うのでしょうか?
0842デフォルトの名無しさん
垢版 |
2018/06/12(火) 17:21:25.05ID:4WaLx3zk
スクレイピングを非同期でしたいのですが
for site in sites:
 if site.run_next <= now:
  run(site)

これの if site.run_next <= now を↓のようにするにはどうしたらいいですか?
asyncio.wait([ task_run(site) for site in sites ])

恥ずかしながらこれでは上手くいってないようです
t = []
for site in sites:
 if site.run_next <= now:
  t.append(run(site))


tasks = asyncio.wait(t)
0843841
垢版 |
2018/06/12(火) 17:26:17.13ID:E+wkASA2
こんな感じです。
それぞれのメソッドはAとBのpyuiに配置されたボタンに紐付いています。
import ui
def return(sender):
ui.load_view('A').present('sheet')
def goto(sender):
ui.load_view('B').present('sheet')
v = ui.load_view()
v.present('sheet')
0844842
垢版 |
2018/06/12(火) 18:18:15.86ID:4WaLx3zk
すいません
for site in sites if site.run_next <= now
これでいけるのですね

あと先程のは配列が空になってるのが上手くいかない原因だったみたいです
0845デフォルトの名無しさん
垢版 |
2018/06/12(火) 23:21:59.66ID:gk0+6nOB
プログラム実行中にエラー(例外)を生じた時の処理は、
try-except と if文(条件分岐) はどのように使い分けてる?
0847デフォルトの名無しさん
垢版 |
2018/06/13(水) 00:09:27.19ID:rT/gcgHi
例外処理はめんどうだからやらないなあ
どこでどんなエラーが発生するか事前にわかったらエスパーだろ
0848デフォルトの名無しさん
垢版 |
2018/06/13(水) 00:33:47.66ID:+CjawHix
ifで変数があることを確認して、その変数を用いた処理をするところを、
いきなりtryで処理して、エラー時のみ例外処理で済ますという方法もあるから、
どちらで処理したほうがいいかということだな。

タイプで絞り込めば、例外処理は意外と簡単だし、
更に細かい絞り込みはすでにキャッチした結果の条件分岐でもできる。
でも、なんか手抜きというか作法としてどうかという感じもしないではない。
0849デフォルトの名無しさん
垢版 |
2018/06/13(水) 01:13:22.99ID:nKOKvJ/8
例外が起こるまで想定内なら基本的に拾うべきでは
それで走らせてちゃんと例外拾って正常終了すれば、そこまでは思い通りに動けてるってことだし
予期される例外が起こるか起きないかわからなくて、かつそれが全体的に支障を来さないと断定できるなら
条件文で避けるのもあるかもだがなんかきもいな
0851デフォルトの名無しさん
垢版 |
2018/06/13(水) 02:23:17.41ID:WszqQhwI
そういう意味なら、最終的にプログラムが速く動くように使い分ける
(最後に本音がある)

以下、例外をスローする関数を関数t
事前条件を検証する関数を関数cとする

関数t: 呼び出しが低コスト、かつ呼び出し回数が少ない
→try~catch

関数c: 関数tと同等の呼び出しコスト
→try~catch

関数t: 呼び出しが高コスト、または呼び出し回数が多い
関数c: 事前条件の判定に成功したら関数tは例外をスローしない
→if

関数t: 呼び出しが高コスト、または呼び出し回数が多い
関数c: 事前条件の判定に成功しても関数tは例外をスローすることがある
→if+try~catch

…新人に聞かれたらこう答えるかな
実際は長時間ブン回す機械学習ならともかく、Pythonで速度を気にしても仕方がないケースが多いので
あまり厳密に考えてはいない…
0852デフォルトの名無しさん
垢版 |
2018/06/13(水) 08:00:31.25ID:xCQwBm/v
>>850
Python とかの例外機構が備わってる言語だとそれぐらいですむけどC言語とかでまともに異常処理を行うと 2/3 程度は異常処理になるのはよくある
0853デフォルトの名無しさん
垢版 |
2018/06/13(水) 09:05:52.82ID:nKOKvJ/8
何かとすぐ速度って言葉でマウント取るけど例外キャッチは書き手の意図を拾うって意味でも大事でしょ
例外を迂回しただけだったら例外でる可能性についてどこまで書き手が想定してるのか分からない
例外キャッチが明文化されていれば少なくとも意図された挙動の範疇かどうかはすぐにわかる
0854デフォルトの名無しさん
垢版 |
2018/06/13(水) 12:31:02.16ID:stoLLb9S
何かとマウントって言葉が出てくる繊細チンピラ。
死ぬまでママとだけお話しててくんねーかな。
0855デフォルトの名無しさん
垢版 |
2018/06/13(水) 12:34:43.41ID:IIqCHZSl
今から大事な事言うからよく聞けおまけら

例外はキャッチするな
0857デフォルトの名無しさん
垢版 |
2018/06/13(水) 15:24:39.05ID:mbrmHeFX
なんでpythonの例外の話してるのに
CとかJavaの例出してくるの?
馬鹿なの?
0858デフォルトの名無しさん
垢版 |
2018/06/13(水) 17:11:58.37ID:f64ViDwD
fuga = "{},{},{}\n".format(
hoge[0],
hoge[1],
hoge[2],
)
output.write(fuga)

って感じのことをしたいんですが、hoge[300]とかまで続くときはどうしたら良いのでしょう?
0860デフォルトの名無しさん
垢版 |
2018/06/13(水) 17:14:43.92ID:HXlAcUu8
"\n".join(hoge)
0861デフォルトの名無しさん
垢版 |
2018/06/13(水) 17:50:47.15ID:mbrmHeFX
fuga = '{}\n'.format(','.join(f'{_}' for _ in hoge))
0862デフォルトの名無しさん
垢版 |
2018/06/13(水) 17:56:50.72ID:e5rB4/3b
fmt = "{}" + (",{}" * (len(hoge) - 1)) + "\n"
fuga = fmt.format(*hoge)
0864デフォルトの名無しさん
垢版 |
2018/06/13(水) 18:22:34.93ID:f64ViDwD
hoge = ["さんま","うなぎ","カッパ"]
fmt = "{}" + (",{}" * (len(hoge) - 1)) + "\n"
fuga = fmt.format(
hoge[0].replace("さんま","ぐんま")
)

これだと
hoge[1]
hoge[2]に変更が無いとしても書かないとエラーになりますよね?

hogeが300個くらいあるとき、どうしたら良いでしょう?
0865デフォルトの名無しさん
垢版 |
2018/06/13(水) 18:29:08.68ID:HXlAcUu8
イマイチやりたいことが見えないが、
fuga =",".join([str(s).replace("さんま","ぐんま") for s in hoge])+ "\n"
0866デフォルトの名無しさん
垢版 |
2018/06/13(水) 18:33:39.96ID:f64ViDwD
>>865
ありがとうございます。
補足説明したいのですが、いかんせん私が初心者すぎて説明すら難しいのです。
joinを調べてみます。
0867デフォルトの名無しさん
垢版 |
2018/06/13(水) 18:43:39.13ID:f64ViDwD
なんというか列300、行400くらいのファイルが有りまして。
一行毎に変換処理を書いてるのですが、列は処理しない項目が多いのです。
300の内、10項目ほどしか処理が無いのです。
hoge[0]〜hoge[300]とか力技でも良いかなと思って書いてますが、"変換しない"箇所はスキップできないかなーと思っているしだいです。
0869デフォルトの名無しさん
垢版 |
2018/06/13(水) 19:53:45.62ID:hQ1ezRY5
import csv

with open("1.csv") as input:
&nbsp; writer = csv.writer(output)
&nbsp; reader = csv.reader(input)
&nbsp; for row in reader:
&nbsp; &nbsp; row[0] = row[0].replace("さんま", "ぐんま")
&nbsp; &nbsp; writer.writerow(row)
0870デフォルトの名無しさん
垢版 |
2018/06/13(水) 19:55:11.91ID:hQ1ezRY5
あら
ごめん、&nbsp; は空白に置き換えて
0872デフォルトの名無しさん
垢版 |
2018/06/14(木) 10:01:22.21ID:b+x6hMO7
fuga =",".join(str(s).replace("さんま","ぐんま") for s in hoge if s == 0)+ "\n"
じゃないのか
0873デフォルトの名無しさん
垢版 |
2018/06/14(木) 10:07:09.32ID:zDlcM/ZJ
>>868
csvならpandas使ったらいいよ。ちょっと慣れないとつかいにくいけど色々と処理も用意されてるし、速いし。
0874デフォルトの名無しさん
垢版 |
2018/06/14(木) 13:13:48.87ID:bu9zg9Xo
ありがとう、pandasは選択肢に入っていますが基本的な処理を覚えたいので使用せずに試行錯誤しています
■ このスレッドは過去ログ倉庫に格納されています

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