質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

あるカラムに含まれる文字列の値によってランダムデータの値のとる範囲を変えたい

8960
8960

総合スコア106

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1回答

-1評価

1クリップ

243閲覧

投稿2022/04/14 03:13

編集2022/04/15 00:39

前提

Pythonのnumpyで作成するランダムデータに関する質問です。

ランダムデータを作成したいのですが、いくつか条件があります。
●Type”FF”
・Score1が150.0~160.0の範囲
・Score2が20.0~50.0の範囲
・Score3が20.0~40.0の範囲
●Type"SL"
・Score1が140.0~150.0の範囲
・Score2が-50.0~30.0の範囲
・Score3が-40.0~40.0の範囲

のように、ランダムで作成する中でもdf["Type"]の値によって、とる範囲を変化させたいです。

以下のコードのように、ランダムデータ全体の範囲指定はできたのですが、Typeでさらに範囲を区別する方法が分かりません。

詳しい方、ご教授の程よろしくお願いいたします。

該当のソースコード

Python

## ランダムデータの作成 import pandas as pd import numpy as np pd.options.display.float_format="{:.2f}".format N = 1000 type = ["FF","SL"] type = np.random.choice(type,size=N) df = pd.DataFrame({ "Type":type, "Score1":np.random.sample(N) * 20.0 + 140.0, "Score2":np.random.sample(N) * 100.0 - 50.0, "Score3":np.random.sample(N) * 80.0 - 40.0, })

追記(条件が3種以上の場合は?)

Python

## ランダムデータの作成 import pandas as pd import numpy as np pd.options.display.float_format="{:.2f}".format type = ["FF","SL","CU"] N = 1000 type = np.random.choice(type,size=N) df = pd.DataFrame({ "Pitch Type":type, "Score1":[np.random.rand()*10+150 if t == "FF" elif np.random.rand()*20+130 if t == "SL" else np.random.rand()*10+140 for t in type], "Score2":[np.random.rand()*40+30 if t == "FF" else np.random.rand()*20+30 for t in type], "Score3":[np.random.rand()*20+20 if t == "FF" else np.random.rand()*30-10 for t in type], })

追記(発生しているエラー)

File "C:\Users\DELL\AppData\Local\Temp/ipykernel_18992/3232225939.py", line 13 "Score1":[np.random.rand()*10+150 if t == "FF" elif np.random.rand()*20+130 if t == "SL" else np.random.rand()*10+140 for t in type], ^ SyntaxError: invalid syntax

追記2 - 同じTypeであっても値は一定ではなくランダムに設定したい

Python

import pandas as pd import numpy as np import matplotlib.pyplot as plt import japanize_matplotlib pd.options.display.float_format="{:.2f}".format type = ["FF","CU","SP","SL","SI","CB"] N = 1000 type = np.random.choice(type,size=N) df = pd.DataFrame({"Type":type}) # Score1 df.loc[df.Type=="FF","Score1"] = np.random.rand()*10+150 df.loc[df.Type=="CU","Score1"] = np.random.rand()*10+140 df.loc[df.Type=="SP","Score1"] = np.random.rand()*10+130 df.loc[df.Type=="SL","Score1"] = np.random.rand()*10+120 df.loc[df.Type=="SI","Score1"] = np.random.rand()*10+145 df.loc[df.Type=="CB","Score1"] = np.random.rand()*20+100 # Score2 df.loc[df.Type=="FF","Score2"] = np.random.rand()*30+35 df.loc[df.Type=="CU","Score2"] = np.random.rand()*30+10 df.loc[df.Type=="SP","Score2"] = np.random.rand()*20+0 df.loc[df.Type=="SL","Score2"] = np.random.rand()*20-10 df.loc[df.Type=="SI","Score2"] = np.random.rand()*20+20 df.loc[df.Type=="CB","Score2"] = np.random.rand()*30-40 # Score3 df.loc[df.Type=="FF","Score3"] = np.random.rand()*30+15 df.loc[df.Type=="CU","Score3"] = np.random.rand()*30-10 df.loc[df.Type=="SP","Score3"] = np.random.rand()*30+10 df.loc[df.Type=="SL","Score3"] = np.random.rand()*40-30 df.loc[df.Type=="SI","Score3"] = np.random.rand()*20+30 df.loc[df.Type=="CB","Score3"] = np.random.rand()*10-25 #画像サイズ、軸サイズ調整 plt.figure(figsize=(11,11)) #各タイプの色を定義づけ pitch_colors = {"FF":"b","SI":"c","SL":"r","SP":"g","CB":"pink","CU":"y"} ax1 = plt.subplot(1,1,1) # make ScatterPlot ax1.axis([-70,70,-70,70]) x = df[["Score3"]] y = df[["Score2"]] #各タイプを色別でplot for k in pitch_colors: df_selected = df[df['Type'] == k] if not df_selected.empty: df_selected.plot.scatter(x='Score3', y='Score2', marker='o', c=pitch_colors[k], s = 50, label=k, ax=ax1) #プロットのグリッド線 ax1.grid(True,linestyle = "dotted") # adding vertical line in data co-ordinates ax1.axvline(0, c='silver', ls='-') # adding horizontal line in data co-ordinates ax1.axhline(0, c='silver', ls='-') #凡例の表示 flg=12 ax1.legend(loc='upper left',fontsize=flg,title='Type')

### 追記2 -現状と理想
現状
イメージ説明

理想(ランダムで作成したものではないため例です)
イメージ説明

補足情報(FW/ツールのバージョンなど)

python3.9、VSCode

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

meg_

2022/04/14 11:23 編集

> ランダムデータ全体の範囲指定はできたのですが、Typeでさらに範囲を区別する方法 やりたいことがよく分かりません。 欲しい結果のサンプルを提示いただけませんか? ⇒ これかな?と思った回答をしました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。