X



くだすれPython(超初心者用) その36
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2018/01/01(月) 20:18:42.82ID:iOcRvNll
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで

前スレ
くだすれPython(超初心者用) その35
http://mevius.5ch.net/test/read.cgi/tech/1496411341/
VIPQ2_EXTDAT: checked:default:1000:512:----: EXT was configured
0535デフォルトの名無しさん
垢版 |
2018/02/26(月) 06:35:30.76ID:CZMjr0z3
>>532
事務系社会人です。独学なので宿題ではないです。自分用の簡単なツールを作りたいというのがきっかけです。
始めはnumpyで、行列内部で要素の演算させるつもりでしたが、うまくできませんでした。
次にpandasで、表形式でやろうとしましたが、今一わかりません。

すみません、今日の夜にでも、不完全な自分のコード提示します。
お目通しいただきご教示くださるとありがたいです。
0536デフォルトの名無しさん
垢版 |
2018/02/26(月) 07:24:03.85ID:GTfBnsec
>>533
ブーメラン乙です
0537デフォルトの名無しさん
垢版 |
2018/02/26(月) 07:37:58.92ID:IuGyHUGL
>>524
Juliaを中学生から教えたらいい。sympy使えるし。
0538デフォルトの名無しさん
垢版 |
2018/02/26(月) 07:41:38.60ID:IuGyHUGL
>>526
scratchからやったら。
0540遊園地
垢版 |
2018/02/26(月) 10:11:37.79ID:cTQBZcAI
>>535
目的を人間っぽく書いて、その為の実現したいコード処理を記載
読み込んだデータ形式も簡易表現で構わないから、コードにコメント等で書いて。


numpyで、行列内部で要素の演算
どの様な演算なのか? 受け取るデータ形式は、どの状態なのか?
何が想定と違うのか?


pandasで、表形式
どの様な表なのか? 上記と同じ


  コード書きや想像可能な命令後のキーワド検索は、後回し。
0541デフォルトの名無しさん
垢版 |
2018/02/26(月) 10:19:53.48ID:oHOLuzwx
なんかnumpyって使いにくいのよね
全部pandasでやっちゃう
計算速度とかは知らん
0543デフォルトの名無しさん
垢版 |
2018/02/26(月) 14:50:55.91ID:Q2qtK4xZ
数字(str)
0545デフォルトの名無しさん
垢版 |
2018/02/26(月) 15:55:59.62ID:NcBRNf65
before_data = [[100,50,250,300], [101,20,150,150], [101,30,200,150], [102,80,100,200], [102,20,150,200]]
hashed_data = before_data.group_by { |row| row[0] }

#=> {100=>[[100, 50, 250, 300]], 101=>[[101, 20, 150, 150], [101, 30, 200, 150]], 102=>[[102, 80, 100, 200], [102, 20, 150, 200]]}

# 配列の蓄積器に、結果を入れながら、処理を繰り返す
result = hashed_data.each_with_object([]) do | (key, rows), ary |
if rows.length >= 2
puts "rows"
p rows

# 配列の蓄積器に、結果を入れながら、処理を繰り返す
r = rows.each_with_object([]) do | row, ary2 |
if ary2.length == 0
ary2.push *row # 展開
ary2[2] = row[1] * row[2]
else
ary2[1] += row[1]
ary2[2] = ary2[2] + row[1] * row[2]
end
end
r[2] = r[2] / r[1].to_f
ary.push r
else
ary.push rows.flatten
end
end
p result

Ruby で作った。結果
[[100, 50, 250, 300], [101, 50, 180.0, 150], [102, 100, 110.0, 200]]
0546デフォルトの名無しさん
垢版 |
2018/02/26(月) 16:23:21.61ID:B76OQfBv
プログラミングのレポート課題としていいテーマありますか?
2週間くらいで0から理解できる内容で
機械学習とか候補に入ってるんですが2週間じゃキツイですか?
0548デフォルトの名無しさん
垢版 |
2018/02/26(月) 17:52:45.87ID:OBKUk/zi
>>546
1. ユーザーが入力した何らかの文字列を受け取る
2. 1. の文字列が以前までに入力されたものと同じなら、そのときの回答と同じ回答を表示する
3. そうでない場合は、回答をユーザーに入力させ、入力内容を回答としてそのまま表示する
これで教師データに対しては精度100%のAIができる
2週間ならこんなもんだろ
0549デフォルトの名無しさん
垢版 |
2018/02/26(月) 18:08:45.28ID:91BhH+0u
今日からpythonを勉強し始めました
ここのfibo()関数が、fibo(37)ぐらいで恐ろしく時間がかかる(10秒ぐらい)んですが、
こんなものなんでしょうか?あまりに遅すぎると思うのですが。。。
試しにcで書き直したらfibo(37)が一瞬で終わりました。
環境:Windows10上のWSL+Ubuntu上のpython3.5.2、CPU corei7
https://qiita.com/Wreulicke/items/e8f7290f6b4ff98e6142
0550デフォルトの名無しさん
垢版 |
2018/02/26(月) 18:22:50.71ID:wtxU8Pq4
数千万回の関数呼び出ししてるから、Pythonなら10秒くらいで正常。
100万回の単純な演算なら、1秒以内でいける。
1000万回の演算だと、かなり単純なのでも、1秒以内は厳しい、というのが相場かな。
cやc++よりは、50倍くらい遅いよ。
0551デフォルトの名無しさん
垢版 |
2018/02/26(月) 18:25:26.87ID:91BhH+0u
>>550
あーそうなんですね!
pythonは科学計算ではなくテキスト処理?とか
ぱっと簡単に処理を書くのに向いてそうですね
ありがとうございました!
0554デフォルトの名無しさん
垢版 |
2018/02/26(月) 19:05:04.37ID:wtxU8Pq4
>551
科学計算するときは、numpy使うらしい。

>552
速いPC使ってるんだね。
うちのi7 では13.5秒かかった。
アルゴリズムを変えて、メモ化したり、ループに書き直したりすれば、一瞬で終わるけど。。
0555デフォルトの名無しさん
垢版 |
2018/02/26(月) 19:07:56.71ID:/Zv3SJNj
>>554
あ、すまん
>>549のURL見てなかった
自分で勝手に関数作ってたわw

でも、URLの関数使っても3秒くらいで終わったわ
0556デフォルトの名無しさん
垢版 |
2018/02/26(月) 19:10:09.18ID:wtxU8Pq4
>553
corei3なの?
ideone.com で、pypy2.7で計算したら、0.56 secまで速くなったけど、0.1 sec には届かない。

リンク先のコードと違うので計算したのでは?
0560デフォルトの名無しさん
垢版 |
2018/02/26(月) 20:07:38.88ID:GTfBnsec
あぁ、末尾再帰とか、lazyとかね、昔はよくやったよね懐かしいわw
まあ今は機械学習が全盛だし、もう末尾再帰とか、lazyとかの時代じゃないっしょw
0561デフォルトの名無しさん
垢版 |
2018/02/26(月) 20:10:49.36ID:noERqLSe
末尾再帰はみみっちい、男らしくない考え。
そんなんだったら最初からforループ使っとけ
0562デフォルトの名無しさん
垢版 |
2018/02/26(月) 20:28:42.84ID:YPK1H5Uc
Jupyterから実行したかどうか判定する方法ってあります?
0564デフォルトの名無しさん
垢版 |
2018/02/26(月) 21:59:17.46ID:mANSF+RP
>>563
お前答えられへんだけやんけwww
ちなみに、俺は知らん
0566デフォルトの名無しさん
垢版 |
2018/02/26(月) 22:30:00.38ID:QuhxkvaQ
>>564
知らないのはお前、俺、>>562ぐらいだろう
このスレの連中は遊園地を筆頭に人間性に大問題ある奴ばかりなために
知っているが教えない奴が圧倒的。pyスレに来る目的が基地ル、雑談するためだからな
0568デフォルトの名無しさん
垢版 |
2018/02/26(月) 23:30:50.93ID:Q2qtK4xZ
>>567
何を作りたいかでかわってくる
それがないならどっちでもいいんじゃないですかね
0570529=535
垢版 |
2018/02/26(月) 23:38:23.76ID:CZMjr0z3
>>542
ご面倒をおかけしました。
ありがとうございました。
コードの中身をよく拝見させていただき、
これからpythonを勉強する励みにいたします。
ありがとうございました。
0571529=535
垢版 |
2018/02/26(月) 23:41:34.76ID:CZMjr0z3
>>540 遊園地様
>>542様が回答を示していただきましたが、下記のとおり
私のポンコツコードを示したいと存じます。

再掲 
[100,50,250,300]
[101,20,150,150]
[101,30,200,150]
[102,80,100,200]
   ・
   ・
目的
・ 1列目:商品コード、2列目:数量、3列目:仕入金額(単価)、1列目:販売金額(単価)です。
  上記例では、数字を単純化しています。また実際は、重複含め100以上のデータ(行)があります。
・  重複している商品コードを整理し、その場合、数量の合算、金額(単価)の加重平均を行い、
  最終的に、きれいな行列に整理したい。
・  データはCSVで与えられている。
・ Excel上で計算やVBAも使用できるだろうが、CSVのデータを取込み、pythonの中?で計算して、結果を出してみたかった。

以下、連投します。すみません。
0572529=535
垢版 |
2018/02/26(月) 23:47:35.71ID:CZMjr0z3
#coding: UTF-8

import pandas as pd
import numpy as np

nan = float("nan")

#データ読込
data = np.loadtxt('data.csv',delimiter=',',dtype='float',skiprows=0) #データ全体を読込
data_code = data[:,0]                                  #データ全体から「商品コード」部分を取出す 

df1 = pd.DataFrame(
{'CD': data[:,0],
'quantity':data[:,1],
'@': data[:,2]},
columns=['CD', 'quantity', '@'])
print(df1)                       # とりあえず、表みたいな形式になるか確認してみた

data_code = np.array(data_code.reshape(len(data_code),))   # 商品コードの重複を削除してみた
print(data_code)

# ここから重複のない純粋な商品コードをkeyにして、そもそものデータ全体を対象に、上から回して行って、
 Excelのvlookup関数のような感じで、2列目、3列目の数字を取出し、目的の演算を行おうとしていた。
0573529=535
垢版 |
2018/02/26(月) 23:48:06.01ID:CZMjr0z3
質問では、1行4列の行列が、nあるとしましたが、本当はCSV全体で1つの行列になると思いましたので、
numpyを使って、重複を発見したときに、i行2列、同3列の数値を取出し、目的の演算をしようと初め思っていました。
しかし、行列の内部での要素の取出しが今一つわかりませんでした。(初心者用の本しか持っておらず、ネット頼りでしたが
必要な情報を見つけられませんでした。
それで、表形式になるpandasのDataframeを用いてみましたが、重複除きの商品コードから、
当該の行データを取出し、同様に2列目、3列目の数値を用いて演算させるのがわかりませんでした。

かなり自分でも能力が足りないのに、欲張っていたかと思います。
反省いたします。
機械学習に興味関心がありますので、今後、pythonの勉強を頑張りたいです。
ご迷惑でなければ、また皆様にご教示いただきたいです。
0574デフォルトの名無しさん
垢版 |
2018/02/27(火) 00:24:03.42ID:WS3TaZ0C
行列の大きさ次第では計算量がすごいことなるで

メモリとか時間を気にせんのと、初心者っぽくやるなら、numpyのuniqueをまず使ってループ回すかな
0575デフォルトの名無しさん
垢版 |
2018/02/27(火) 00:37:56.53ID:tquTMsI7
>>571
最初からその説明(具体的な処理目的説明)していたら展開が違ったような気がする
俺なら
重複している商品コードを整理し
全データ(100以上のデータ)で重複している商品コードを洗い出す処理をして
{101:[20,150,150], [30,200,150]} <= valueが2個以上なら重複とわかる
とかを生成して、
これ(商品コード101)に対して数量の合算、金額(単価)の加重平均を行うような処理にするが
0576デフォルトの名無しさん
垢版 |
2018/02/27(火) 00:47:13.10ID:FXmriiXi
import numpy as np
a=np.array([0,1,2,3,4,5])
b=np.array([0,1,2,3,4,6])
print(np.sum(a == b))
>>5

numpyを使って2つの配列の要素が一致している個数を求めました。
配列が2つの場合は上のコードで求まるのですが、
下の様に3つの配列がある場合、全ての配列の要素が一致する個数を求める場合はどうすればよいのでしょうか?

a=np.array([0,1,2,3,4,5])
b=np.array([0,1,2,3,4,6])
c=np.array([4,1,2,3,4,5])
>>4
0577デフォルトの名無しさん
垢版 |
2018/02/27(火) 00:48:09.81ID:FXmriiXi
できるだけ、forやifなどを使わない簡単な方法を探しております。。。
よろしくお願いします。
0579デフォルトの名無しさん
垢版 |
2018/02/27(火) 01:09:04.37ID:Rrp6rDyp
>576

numpyは使ったことないから、リファレンス見ながら適当に書いた。
a==b==cだとエラーになるので、a==bとb==cをlogical_andでつないだら動いた。

print(np.sum(np.logical_and(a == b, b == c)))
0580デフォルトの名無しさん
垢版 |
2018/02/27(火) 01:16:19.46ID:FXmriiXi
>>579
ありがとうございます。
自分も a==b==c でエラーがでて困ってました。
とても助かりました。
0581デフォルトの名無しさん
垢版 |
2018/02/27(火) 07:33:45.62ID:WS3TaZ0C
>>577
forやif使う方が(作るのは)簡単なんだけど…
お前、自分でどうにかする気全くないってことじゃん
0582デフォルトの名無しさん
垢版 |
2018/02/27(火) 07:52:03.09ID:ckmPPEEZ
(作るのは)
どこでこんな括弧の使い方教えとんねんwww
0583デフォルトの名無しさん
垢版 |
2018/02/27(火) 08:47:20.59ID:4ixkfDNT
学校(幼少期の)だよ
0585遊園地
垢版 |
2018/02/27(火) 10:59:17.74ID:gK8Y9TGp
思った以上に難しいな。
発狂モードで、人から聴きながら、公式ドウキュメントと睨めっこ
してるけど、未だに熟考してるな。

defaultdict
items()

https://ideone.com/rbwrKz
0586デフォルトの名無しさん
垢版 |
2018/02/27(火) 11:05:15.46ID:FXmriiXi
>>581
forやifを使う方法なら自分でも分かるので。。。
コードがシンプルで動作が早いものを求めてました。
賢いあなたなら素晴らしい解決策をご存知では?
0588遊園地
垢版 |
2018/02/27(火) 11:09:43.96ID:gK8Y9TGp
結合前のindexが有るから適当に逆算して。
データが最後まで欲しいなら んぐぅうううーーー ::

defaultdict
lambda
enumerate
append
0591遊園地
垢版 |
2018/02/27(火) 12:16:23.97ID:gK8Y9TGp
おちんぽっぽ  おちんぽっぽ

   ぶひひいいいいいいいいいいいいいいいい

l=[[100,50,250,300],[101,20,150,150],
[101,30,200,150],[102,80,100,200]]

r=[]
for i in l:
□r.append(['ID_'+str(i[0]),i[1:3]])


from collections import defaultdict
d = defaultdict(lambda :[[], []])


for i, j in enumerate(r):
□d[j[0]][0] += [j[1]]
□d[j[0]][1] += [i]


for key in sorted(d):
□print(key,d[key])
0592遊園地
垢版 |
2018/02/27(火) 12:35:38.76ID:gK8Y9TGp
エクセル仕様の縦配列ならpandasなんだけどなー。

l=[[100,50,250,300],[101,20,150,150],
[101,30,200,150],[102,80,100,200]]

1列目:商品コード
2列目:数量
3列目:仕入金額(単価)
4列目:販売金額(単価)

print(list(zip(*l)))
[(100, 101, 101, 102),  商品コード
(50, 20, 30, 80),  数量
(250, 150, 200, 100),  仕入金額(単価)
(300, 150, 150, 200)  販売金額(単価)]

import pandas as pd
df = pd.DataFrame(
{
'id':['ID_100','ID_101','ID_101','ID_102'],
'数量':[50,20,30,80],
'仕入金額_単価':[250,150,200,100],
'販売金額_単価':[300,150,150,200]
}
)
print(df)
0594遊園地
垢版 |
2018/02/27(火) 12:49:34.98ID:gK8Y9TGp
キーワードに関する文法を覚えて、高校までの数学A,B,C &適当なフレームワークとモジュール
0595遊園地
垢版 |
2018/02/27(火) 12:56:52.38ID:gK8Y9TGp
基本の文法が理解できてるなら、
>>591
の解説を俺の代わりにしといてクレ |д゚)チラッ

□ は インデント
0596デフォルトの名無しさん
垢版 |
2018/02/27(火) 12:57:32.12ID:Icbybavp
遊園地さんへ
defaultdictにlambdaを渡せば、長さ固定で0初期化したリストを初期値に出来るっていうのは、初めて知りました。
参考にして作ったコードが、こちらです。
https://ideone.com/Y8yQsm
0597遊園地
垢版 |
2018/02/27(火) 14:09:26.24ID:gK8Y9TGp
中途半端な数学とあやふやな日本語表記だったから、もっとできない奴だと思ってた。
遊園地 より お前の方が 上だな。


通常運営に戻るかwww

 おちんぽっぽ おちんぽっぽ

ぶひひいいいいいいいいいいいいいいいいwwwwww

( ゚д゚)ハッ! ┌(_Д_┌ )┐

     ( ゚д゚)ハッ! ┌(_Д_┌ )┐

ヘ(゚∀゚ヘ)アヒャ  φ(..)メモメモ
0598デフォルトの名無しさん
垢版 |
2018/02/27(火) 18:51:07.34ID:QPaDq+KZ
ここですか
0599444
垢版 |
2018/02/27(火) 18:59:22.39ID:QPaDq+KZ
>>1
O2
やっとこさわかった
0600デフォルトの名無しさん
垢版 |
2018/02/27(火) 20:02:12.99ID:668fk3cP
>>562は煽りのおかげで自己解決しました
サンクス
0601デフォルトの名無しさん
垢版 |
2018/02/27(火) 22:39:14.30ID:ckmPPEEZ
>>600
煽って欲しくなったらまたいつでも来な
俺達はいつもここに居るぜ
0602遊園地
垢版 |
2018/02/28(水) 09:37:18.44ID:81tKqnQ0
(ずっと初心者のままって事だから)「居たら駄目だろw」
0603デフォルトの名無しさん
垢版 |
2018/02/28(水) 10:57:25.07ID:8lfCgpCk
Pyton始めて触ったけどなんか楽しい
C#は凄くつまらないけどこれはなんか楽しい
0604デフォルトの名無しさん
垢版 |
2018/02/28(水) 12:36:21.50ID:A/91+nvq
残念ながらPython使いにはC#好きが多いらしいぞ
つまり君はPythonに向いてない可能性がある
0605デフォルトの名無しさん
垢版 |
2018/02/28(水) 13:28:16.40ID:FB6O8UTn
コンパイルや型宣言が迂遠に思うとかなら型宣言のなさが口惜しくなる時も…
(制約は実行時チェックだから遅くなるし、numbaとかはimportコスト高いし
でも日曜プログラミングには最適。C#はお堅すぎてC++の方が好きだが、開発効率でC#
0606デフォルトの名無しさん
垢版 |
2018/02/28(水) 14:07:22.37ID:q5eChUM3
pycharmでプログラム書いて、
後から弄ってたりすると、
失敗することが多いのですが、
失敗する前には、戻せないですよね、
書いたプログラムを、万一に備えてバックアップとかしてますか?
バックアップする場合はどうやるといいでしょうか?
0607遊園地
垢版 |
2018/02/28(水) 14:11:34.30ID:81tKqnQ0
任意の開発環境のテキストエディター

右クリックで[元に戻す]
もしくは、メニューから戻れよな。
0608デフォルトの名無しさん
垢版 |
2018/02/28(水) 14:20:29.71ID:q5eChUM3
>>607
ありがとお、
英語だから読めなかったけど、
ツールバーのEditのところに、
Undoっていのあって、押してみたら元に戻った、
PC壊れた時のための、
バックアップとかはしなくても、大丈夫かな?
0609デフォルトの名無しさん
垢版 |
2018/02/28(水) 15:17:54.83ID:sMQ4/p2k
pycharm って日本語化プラグイんがあったはずだからそれ入れてみたら?
もちろん自己責任で

って言うか、初心者ならIDLE でいいと思うけどなぁ
0610デフォルトの名無しさん
垢版 |
2018/02/28(水) 15:31:59.71ID:72oZA9I7
昨日pythonをはじめたばかりの俺が言うのも何だけど
IDLEはリドゥの機能が最低限文化的な水準じゃないすぎると思うの
0611デフォルトの名無しさん
垢版 |
2018/02/28(水) 17:46:56.48ID:F8/eMdWm
>>608
うどん
0613デフォルトの名無しさん
垢版 |
2018/02/28(水) 19:39:47.11ID:6WnrRHIY
>>608
このスレの経験が長い俺から一言だけ助言させてもらうけど
5chでgit勧めるやつはキチガイかバカだから>>612は無視する事を勧める
0615遊園地
垢版 |
2018/02/28(水) 21:05:43.63ID:81tKqnQ0
gitから好きなソフト入れろって事だなw
0617デフォルトの名無しさん
垢版 |
2018/02/28(水) 21:11:36.61ID:Dbfz2UG/
>>606
Pythonに限らず、プログラミングではバージョン管理するものだと思う
個人で開発する分にはgitでもsubversion でも好きなの使えばいいと思うよ
0618デフォルトの名無しさん
垢版 |
2018/02/28(水) 21:15:16.83ID:6WnrRHIY
>>617
超初心者スレでわけのわからんもん勧めるなキチガイ
0620デフォルトの名無しさん
垢版 |
2018/02/28(水) 21:26:02.07ID:6WnrRHIY
>>619
初心者未満は質問だけしてろ
0622デフォルトの名無しさん
垢版 |
2018/02/28(水) 21:32:52.78ID:6WnrRHIY
>>621
世の中の99%のコードはバージョン管理など必要ない
0623デフォルトの名無しさん
垢版 |
2018/02/28(水) 21:45:13.43ID:R7Cjm0oP
Pythonの関数やライブラリもよう覚えられんのに
gitのコマンドなんか覚えてる暇ないわ
0625デフォルトの名無しさん
垢版 |
2018/02/28(水) 21:49:46.54ID:1ock86up
デバックのこと考えるとVisual Studio が使いやすいな
まあ慣れてるだけかもしれんが
0626デフォルトの名無しさん
垢版 |
2018/02/28(水) 21:51:53.14ID:RqbzVfd9
型宣言があったほうが他人のコードは読みやすい
pythonでコード書くなら変数の型が予想付きやすいようにコードを書くべきではある
0627遊園地
垢版 |
2018/02/28(水) 22:04:25.10ID:81tKqnQ0
等と発言しているが、作業所はゴミ箱のpythonふぁいる
変数名は、unko_A001 unko_B002 geri_a___ hoge hage などを多様
そして、全てローカル定数[任意]だなww
0628デフォルトの名無しさん
垢版 |
2018/02/28(水) 22:06:33.39ID:81tKqnQ0
うんこ あ お お イ
unko_A001

うんこ ぶ おお とぅ!!
unko_B002

げり あ!(はっ?)
geri_a___

ほげ
hoge

はげ
hage
0629デフォルトの名無しさん
垢版 |
2018/02/28(水) 22:40:32.28ID:P/LuZq3k
>>621
5chのpythonスレに来る連中はバージョン管理が必要なレベルにない奴が圧倒的に多いだろ
なんせ超初心者レベルなんだから
0632デフォルトの名無しさん
垢版 |
2018/02/28(水) 22:48:27.55ID:6WnrRHIY
>>630
じゃあいいんじゃん
初心者だもの
人間だもの
■ このスレッドは過去ログ倉庫に格納されています

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