Как построить гистограмму и гистограмму, используя для цикла и отображать их вместе? - PullRequest
0 голосов
/ 08 октября 2019

Я хочу построить гистограмму для числовых данных и гистограмму для категориальных данных. Я классифицировал тип данных, уже сохраненный в types.

Я не уверен, как поместить plt.hist() и plt.bar() в цикл for, чтобы две гистограммы (одна для возраста и другая для сохранения) отображались вместе рядом. То же самое относится и к категориальным данным, я хочу 2 гистограмму для 2 категориальных данных (пол и работа). Код, способный рассчитывать частоту данных также для построения гистограммы.

Это означает, что в конце у меня будет 4 графика, 2 - гистограмма и 2 - гистограмма, которые будут отображаться все вместе рядом.

Пожалуйста, помогите мне с этим вопросом. Любая помощь будет оценена! Заранее спасибо.

import numpy as np
from scipy import stats

# first data is age
# 2nd data is gender
# third data is saving
# 4th data is job

data = np.array([[11, "male",1222,"teacher"],[23,"female",333,"student"],
                 [15,"male",542,"security"],[23,"male",4422,"farmer"],[25,"female",553,"farmer"],
                 [22, "male", 221, "teacher"],[27, "male", 333, "agent"],[11, "female", 33, "farmer"]])

# type of the data above
types = ["num","cat","num","cat"]
idx1 = []
idx2 = []
for index, _type in enumerate(types):
    if _type == 'num':
        idx1.append(index)
    else:
        idx2.append(index)

mean = []
std = []
for i in idx1:
    mean.append(np.mean(data[:,i].astype("float32")))
    std.append(np.std(data[:,i].astype("float32")))

print("mean: {}".format(mean))
print("std: {}".format(std))

mode = []
for i in idx2:
    mode.append(stats.mode(data[:,i]))
print("mode: {}".format([sub[0][0] for sub in mode]))

1 Ответ

0 голосов
/ 08 октября 2019

Я позволю вам разобраться в деталях графика, а также в том, как их настроить, но я бы предложил вместо этого превратить его в объект DataFrame.

data = pd.DataFrame({'Age': [11, 23, 15, 23, 25, 22, 27,11],
                     'Gender': ['M', 'F', 'M', 'M', 'F', 'M', 'M', 'F'],
                     'Saving': [1222, 333, 542, 4422, 553, 221, 333, 333],
                     'Occupation': ['teacher', 'student', 'security', 'farmer', 'farmer', 'teacher', 'agent', 'farmer']})

fig, ax = plt.subplots(nrows = 2, ncols = 2, figsize=(10, 5))

# Plot Data
plt.subplot(1,2,1)
plt.hist(data['Age'], edgecolor = 'k')
plt.subplot(1,2,2)
plt.hist(data['Saving'], edgecolor = 'k')
plt.show()
plt.subplot(2, 1, 1)
data['Gender'].value_counts().plot(kind = 'bar')
plt.show()
plt.subplot(2, 2, 2)
data['Occupation'].value_counts().plot(kind = 'bar')
plt.show()
...