Как построить дискретную переменную против другой дискретной переменной в Юлии? - PullRequest
1 голос
/ 14 марта 2020

Предположим, у меня есть база данных, состоящая из двух столбцов, первый из которых соответствует полу респондента, а второй - области, которую он изучает. Эта таблица основана на импорте файла CSV с использованием библиотеки CSV.

Gender,Field
Male,Physics
Female,Physics
Female,Mathematics
Male,Physics
Male,Physics
Male,Physics
Female,Mathematics
Female,Mathematics
Male,Physics
using CSV

data = CSV.read("data.csv")

Используя Джулию, я хотел бы представить эту базу данных в виде гистограммы , сгруппированной по одному из этих символов.

Я искал несколько библиотек, но, будучи новичком в языке, я не нашел практического метода.

1 Ответ

2 голосов
/ 15 марта 2020

Вот один из способов сделать это с помощью графиков (http://docs.juliaplots.org/latest/basics/)

using CSV, Plots
using StatsBase: countmap

data = CSV.read("data.csv")

genders = unique(data[!, :Gender])
categories = unique(data[!, :Field])

cm = countmap(Tuple.(eachrow(data)))
# Dict{Tuple{String,String},Int64} with 3 entries:
# ("Female", "Mathematics") => 3
# ("Female", "Physics")     => 1
# ("Male", "Physics")       => 5

# With Plots you can pass a Matrix to plot multiple series
# each column is a series and each row is a category
y = [get(cm, (g, c), 0) for c in categories, g in genders]
# 2×2 Array{Int64,2}:
# M  F
# 5  1 Physics
# 0  3 Mathematics

# We want each label to apply to a series,
# so instead of an n-length Vector, we pass a 1xn Matrix.
labels = permutedims(genders) 
# 1×2 Array{String,2}:
# "Male"  "Female"

bar(categories, y, labels = labels)

enter image description here

...