Python-创建具有相关数值变量的数据集
我想创建一个数据集,其中我有1到10年的工作经验,工资从3万到10万。我希望这些工资是随机的,并遵循多年的经验。有时,经验丰富的人可能比经验较少的人赚得少 例如:Python-创建具有相关数值变量的数据集,python,random,Python,Random,我想创建一个数据集,其中我有1到10年的工作经验,工资从3万到10万。我希望这些工资是随机的,并遵循多年的经验。有时,经验丰富的人可能比经验较少的人赚得少 例如: years of experience | Salary 1 | 30050 2 | 28500 3 | 36000 ... 10 | 100,500 以下是我迄今为止所做的工作: impor
years of experience | Salary
1 | 30050
2 | 28500
3 | 36000
...
10 | 100,500
以下是我迄今为止所做的工作:
import numpy as np
import random
import pandas as pd
years = np.linspace(1.0, 10.0, num=10)
salary = np.linspace(30000.0, 100000.0, num=10) + random.uniform(-1,1)*5000#plus/minus 5k
data = pd.DataFrame({'experience' : years, 'salary': salary})
print (data)
这给了我:
experience salary
0 1.0 31060.903965
1 2.0 38838.681742
2 3.0 46616.459520
3 4.0 54394.237298
4 5.0 62172.015076
5 6.0 69949.792853
6 7.0 77727.570631
7 8.0 85505.348409
8 9.0 93283.126187
9 10.0 101060.903965
我们可以看到,我们没有得到一些记录,其中一个具有较高经验的人比一个具有较低经验的人赚得少。我怎样才能解决这个问题?当然,我想按比例给我1000行随机的。统一(-1,1)*5000意味着你的工资值将在-5k到+5k之间变化,但由于统一在其输出中是连续的,工资很可能会发生非常小的变化。
看看没有随机因素的工资是如何变化的7777.77。。。经验的每一步提升,都不太可能获得更高经验的低工资。我建议你增加随机元素背后的因子。
例如,尝试
random.uniform(-1,1)*10000
。随机性的程度取决于你自己,这取决于一个没有经验的人获得高薪的可能性有多大。scikit learn提供了一些有用的函数来生成相关数据,例如
例如,您可以执行以下操作:
import numpy as np
import pandas as pd
from sklearn.datasets import make_regression
np.random.seed(0)
n_samples = 1000
X, y = make_regression(n_samples=n_samples, n_features=1, n_informative=1,
noise=80, random_state=0)
# Scale X (years of experience) to 0..10 range
X = np.interp(X, (X.min(), X.max()), (0, 10))
# Scale y (salary) to 30000..100000 range
y = np.interp(y, (y.min(), y.max()), (30000, 100000))
# To dataframe
df = pd.DataFrame({'experience': X.flatten(), 'salary': y}
print(df.head(10))
从您描述的情况来看,似乎您希望在响应中添加一些差异。这可以通过调整noise
参数来实现。让我们把它画出来,让它更明显:
from matplotlib import pyplot as plt
plt.scatter(X, y, color='blue', marker='.', label='Salary')
plt.xlabel("Years of Experience")
plt.ylabel("Salary")
plt.show()
例如,使用noise=80
:
或者使用噪音=250
:
作为旁注:这会为“多年经验”产生持续的价值。如果您希望将它们四舍五入为整数,可以使用
X=np.rint(X)
在这种情况下,我将更改行:
salary = np.linspace(30000.0, 100000.0, num=10) + random.uniform(-1,1)*5000#plus/minus 5k
我认为最好将随机部分分开,这样您就可以轻松地更改它,并根据您想要达到的值进行所有修改
以下是我做的一些事情:
import numpy as np
import random
import pandas as pd
years = np.linspace(1.0, 10.0, num=10)
random_list = [random.random()*1000*_*5 for _ in range(10)]
print(random_list)
salary = np.linspace(30000.0, 100000.0, num=10)- random_list
data = pd.DataFrame({'experience' : years, 'salary': salary})
print (data)
当薪资增长时,随机成分的方差更大。您可以将薪资定义为年数乘以某个系数,再加上某个常量值,再加上某个随机值
import numpy as np
import random
import pandas as pd
N = 1000
intercept = 30000
coeff = 7000
years = np.random.uniform(low=1, high=10, size=N)
salary = intercept + years*coeff + np.random.normal(loc=0, scale=10000, size=N)
data = pd.DataFrame({'experience' : years, 'salary': salary})
data.plot.scatter(x='experience', y='salary', alpha=0.3)
您可以将正负5k增加到一个更大的值(可能是15k),并使用random.normal而不是uniform,这样大多数人最终还是会得到更多的钱和更多的经验,但有些人不会。您只需使用random.randint函数即可。我希望它对你有用这不适用于制作相关数据。它给了我30k到100k之间的随机数。例如,在你的例子中,一个有1年工作经验的人可以挣10万英镑,一个有10年工作经验的人可以挣3万英镑。工资一般应该随着经验的增加而增加
import numpy as np
import random
import pandas as pd
years = np.linspace(1.0, 10.0, num=10)
salary = np.random.randint(30000.0, 100000.0, 10)
data = pd.DataFrame({'experience' : years, 'salary': salary})
print (data)