数据挖掘实验之数据的基本统计描述(五数概括)
实验内容:对一个二维数组求其统计每一行的众数和五数(最小值、四分位、中位数、四分之三位、最大值)
具体实现:
1.初始化一个范围在0到100的二维矩阵
n = 5; % 行数
m = 10; % 列数
a = uint8(rand(n, m).*100)
2.给每一行排序
其实可以直接用sort排序,但是实验要求自己写个排序,我就随便写了个选择排序。。。
for i=1:n
for j=1:m-1
for k=j+1:m
if a(i,j)>a(i,k)
temp = a(i,j);
a(i,j) = a(i,k);
a(i,k) = temp;
end
end
end
end
3.统计五数
思路:既然都已经排好序了,那就直接按照它的位置取出即可
min = [];
Q1 = [];
Q2 = [];
Q3 = [];
max = [];
for i=1:n
min(end+1) = a(i, 1);
Q1(end+1) = a(i, uint8(m/4));
Q2(end+1) = a(i, uint8(m/2));
Q3(end+1) = a(i, uint8(m*3/4));
max(end+1) = a(i, m);
end
4.统计众数
思路:首先先把每一行的数的数量统计到一维矩阵cou当(因为数的范围在0到100)中,所以定义的矩阵应该是cou(1,100),初始化全为0,然后计数。因为要找到所有的众数,所以先找第一个众数,按照第一个众数的数量再去找后面的众数,然后就晕了······
其实还可以把它放到一个二维矩阵里每一行统计每一行的众数并将其保存,但我懒得写了
for i=1:n
cou = zeros(1, 100);
for j=1:m
cou(1,a(i,j)) = cou(1,a(i,j))+1;
end
% 众数
number = 0;
for k=1:100
if cou(1,k)>number
number = cou(1,k);
end
end
maxCou = []; % 统计众数
for k=1:100
if cou(1, k)==number
maxCou(end+1) = k;
end
end
maxCou
end
然后就写完了,,,