#graph #stata
#График #stata
Вопрос:
Рассмотрим следующий набор данных toy:
clear
input group str10 name n
1 "Jenny" 1
1 "Jenny" 1
1 "Ben" 1
1 "Tiffany" 1
1 "Sun" 1
2 "Jenny" 1
2 "Sun" 1
2 "Tiffany" 1
2 "S" 1
2 "T" 1
2 "R" 1
2 "Y" 1
2 "U" 1
2 "I" 1
2 "E" 1
2 "A" 1
2 "B" 1
3 "U" 1
3 "I" 1
3 "E" 1
3 "A" 1
3 "B" 1
end
Мой код следующий:
gen n=1
graph hbar (count) n, over(name, sort(1)) over(group)
Это показывает мне все перепутанные имена, если я использую вышеупомянутые данные:
Как я могу создать столбчатую диаграмму, которая показывает только 10 лучших категорий с точки зрения частоты, определяемой отдельно для каждого отдельного значения group
?
Комментарии:
1. Большое спасибо обоим за вашу помощь и понимание
Ответ №1:
Вот слегка измененный пример:
clear
input group str50 name n
1 "Jenny" 1
1 "Jenny" 1
1 "Ben" 1
1 "Tiffany" 1
1 "Jenny" 1
1 "Sun" 1
2 "Jenny" 1
2 "Sun" 1
2 "Sun" 1
2 "Tiffany" 1
2 "Tiffany" 1
2 "Tiffany" 1
2 "Tiffany" 1
2 "Tiffany" 1
2 "S" 1
2 "T" 1
2 "R" 1
2 "Y" 1
2 "U" 1
2 "I" 1
2 "E" 1
2 "A" 1
2 "B" 1
3 "U" 1
3 "Ramon" 1
3 "Ramon" 1
3 "Ramon" 1
3 "Ramon" 1
3 "I" 1
3 "I" 1
3 "I" 1
3 "E" 1
3 "A" 1
3 "B" 1
end
Вы можете сначала collapse
свой набор данных:
collapse (count) n, by(group name)
Затем вы можете управлять количеством отображаемых имен, регулируя порог частоты следующим образом:
gsort group -n
bysort group: generate tag = _n < 3
graph hbar (asis) n if tag, over(name) over(group) nofill
Ответ №2:
Чтобы проиллюстрировать выбор 10 наиболее часто встречающихся классов, мы построим здесь набор данных с двумя группами. В каждом из них есть 11 классов. Затем мы покажем общий метод выбора 10 наиболее частых.
* create sandbox dataset
clear
set obs 22
tokenize "`c(ALPHA)'"
generate name = ""
generate freq = _n
generate group = cond(_n <= 11, 1, 2)
forval j = 1/11 {
replace name = "``j''" if inlist(_n, `j', 23 - `j')
}
tabulate name group [fw=freq]
expand freq
drop freq
Вот как выглядит набор данных (результаты tabulate
команды выше):
| group
name | 1 2 | Total
----------- ---------------------- ----------
A | 1 22 | 23
B | 2 21 | 23
C | 3 20 | 23
D | 4 19 | 23
E | 5 18 | 23
F | 6 17 | 23
G | 7 16 | 23
H | 8 15 | 23
I | 9 14 | 23
J | 10 13 | 23
K | 11 12 | 23
----------- ---------------------- ----------
Total | 66 187 | 253
Десятью наиболее частыми классами являются K, J, …, C, B для группы 1 и A, …, J для группы 2.
Вот один из способов получить и отобразить 10 наиболее частых, определенных отдельно для каждой группы. Код пользователя начинается здесь, с другого номера пользователя вместо 10, если это необходимо. В этом случае ничто не зависит от наличия только двух групп, как в примере.
bysort group name : generate freq = _N
egen tag = tag(group name)
gsort group -tag -freq name
by group: generate selected = _n <= 10
bysort group name (selected) : replace selected = selected[_N]
graph hbar (count) if selected, over(name, sort(1) descending) by(group) nofill scheme(s1color)