我想创建一个数据集,其中我有从1到10年的工作经验,工资从3万到10万,我希望这些工资是随机的,并遵循这些年的经验有时一个经验丰富的人比经验少的人赚得少。
例如:

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行

最佳答案

scikit learn提供了一些有用的函数来生成相关数据,例如make_regression
例如,您可以:

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
python - Python-创建具有相关数值变量的数据集-LMLPHP
或使用noise=250
python - Python-创建具有相关数值变量的数据集-LMLPHP
顺便说一句:这为“多年的经验”创造了持续的价值。如果希望它们四舍五入为整数,可以使用X = np.rint(X)

10-04 22:54