当前位置: 首页> 财经> 访谈 > 【数据分析】数据的计量尺度、数据集中趋势

【数据分析】数据的计量尺度、数据集中趋势

时间:2025/8/28 10:28:28来源:https://blog.csdn.net/u010528690/article/details/141186560 浏览次数:0次

一、数据的计量尺度

  • 数据的计量尺度分为四类:定类尺度、定序尺度、定距尺度、定比尺度。
数据的计量尺度特点逻辑与数学运算常见的例子数据类型
定类尺度无等级次序是否相等

性别:男、女...

民族:汉族、满族...

职业:医生、消防员...

定性数据
定序尺度内在固有顺序比较大小、是否相等

职称:高级、初级...

健康状况:优良中差

质量等级:优良中差

定距尺度

“0”只是尺度上的一个点,不代表“不存在”

比较大小、加减运算摄氏温度、纬度定量数据

定比尺度

(比率尺度)

"0"表示“没有”或“不存在”

可以计算两个测度值之间的比值

比较大小、加减乘除质量、长度、能量

二、数据的集中趋势

  • 集中趋势在统计学中指一组数据向一中心值靠拢的程度,反应一组数据中心店所在位置。
  • 集中趋势测度就是寻找数据水平的代表值或中心值。
  • 常见指标:平均数、分位数、众数。

1、平均数

  • 适用于定量数据,不适用于定性数据。
  • 平均数有不同的计算形式和计算公式,主要包括:算术平均数、加权算法平均数、几何算法平均数等。
  • 平均数容易受极端值影响:平均数随着极端值的变化而变化,且有向极端值靠近的趋势。

2、分位数

  • 适用于顺序数据、定量数据。
  • 常见分位数:中位数、四分位数、百分位数

   百分位数:

  • 在按升序排序的数列中,其左侧的观察个数在整个样本中占比p%,右侧的观察个数在整个样本中占比为 (100-p)%。

   四分位数:

  • 是特殊的百分位数,不受极端值的影响。
  • 将所有数据按升序排序,并分成四等份,处于三个分割点位置的数字就是四分位数。
  • 第一四分位数(Q1)为较小四分位数,是第 25% 的数字。
  • 第二四分位数(Q2)为中位数,是第 50% 的数字。
  • 第三四分位数(Q3)为较大四分位数,是第 75% 的数字。

   中位数:

  • 特殊的四分位数
  • 不收极端值的影响
  • 计算公式分两种情况:
    • 当 n 为奇数时:中位数 = (n+1)/2 位置上数据的值
    • 当 n 为偶数时:中位数 = (n)/2 位置和 (n)/2+1 位置上数据的平均值

3、众数

  • 适用于分类数据、顺序数据、定量数据。 
  • 描述分类数据的集中趋势最常见的测度值
  • 只有在数据量较大的情况下,众数才有意义
  • 主要特点是不收极端值的影响
  • 一组数据中,不是只有一个众数,有可能有多个众数或者没有众数

三、Python 中如何计算平均数、分位数、众数?

1、简单公式运算

import numpy as np
import pandas as pd
from scipy import stats# 生成包含 10 个介于 0 到 5 之间的随机浮点数,再转换成整数
data_floats = np.random.random(size=10)*6
data = data_floats.astype(int).tolist()print(data)mean_value = np.mean(data)
print(f'平均数:{mean_value}')quantiles = np.quantile(data, [0.25, 0.5, 0.75])
print(f'分位数:第一四分位({quantiles[0]}), 中位数({quantiles[1]}), 第三四分位({quantiles[2]})')mode_value = stats.mode(data)
print(f'众数:{mode_value[0][0]}')
  • 输出: 

>>>  [5, 3, 5, 2, 2, 2, 4, 3, 4, 2]
>>> 平均数:3.2
>>> 分位数:第一四分位(2.0), 中位数(3.0), 第三四分位(4.0)
>>> 众数:2

2、图表中呈现

import dash
from dash import dcc, html
from dash.dependencies import Input, Output
import plotly.express as px
import pandas as pd
import numpy as np# 生成随机数据
# 1. 可以手动生成列表
# data = np.array([11, 7, 33, 30, 21, 57, 25, 92, 24, 64, 8, 64, 77, 39, 27, 99, 51, 4, 66, 31,
#                  6, 87, 39, 46, 73, 36, 24, 65, 70, 78, 87, 9, 85, 23, 45, 93, 77, 2, 77, 15,
#                  76, 77, 32, 89, 33, 23, 80, 28, 93, 70, 36, 12, 96, 39, 11, 97, 57, 36, 75, 30])# 2. 可以用 random 生成包含 120 个介于 0 到 100 之间的随机浮点数,再转换成整数
# data_floats = np.random.random(size=120) * 100
# data = data_floats.astype(int).tolist()# 3. 可以用 randint 生成包含 120 个介于 0 到 100 之间的随机整数列表
data = np.random.randint(0, 100, size=1000).tolist()df = pd.DataFrame(data, columns=['Value'])app = dash.Dash(__name__)
# 假设 bin_size 是我们知道的或者从直方图创建时确定的
m_bin = 30  # 直方图的 bin 数量
bin_size = (max(df['Value']) - min(df['Value'])) / m_bin# 创建 Dash 应用程序
def create_histogram(df, m_bin):mean_value = df['Value'].mean()mode_value = df['Value'].mode()[0]quantiles = np.quantile(df['Value'], [0.25, 0.5, 0.75])# 创建直方图histogram_fig = px.histogram(df, x='Value', nbins=m_bin,barmode='overlay',labels={'Value': '数据值'},title='直方图 - 四分位数、平均数和众数',color_discrete_sequence=['lightblue'])histogram_fig.update_traces(marker=dict(line=dict(width=1, color='gray')))# 添加统计信息的线条和注解histogram_fig.add_vline(x=mean_value,line_dash='dash',line_color='red',annotation_text=f'平均数: {mean_value:.2f}',annotation_position='top left')histogram_fig.add_vline(x=mode_value,line_dash='solid',line_color='lightgreen',annotation_text=f'众数: {mode_value}',annotation_position='top right')for i, q in enumerate(quantiles, 1):histogram_fig.add_vline(x=q,line_dash='solid' if i == 2 else 'dash',line_color='orange',annotation_text=f'第{i}四分位数: {q:.2f}',annotation_position='top')return histogram_fig# 回调函数:根据直方图的点击事件更新箱线图
@app.callback(Output('box-plot', 'figure'),[Input('histogram', 'clickData')]
)
def update_box_plot(clickData):if clickData and clickData['points']:# 获取点击的柱状图的索引和 x 值point = clickData['points'][0]x = point['x']# 根据点击的柱状图确定数据范围lower_bound = x - bin_sizeupper_bound = x + bin_size# 筛选数据filtered_df = df[(df['Value'] >= lower_bound) & (df['Value'] < upper_bound)]# 更新箱线图fig = px.box(filtered_df, y='Value', title=f'Box plot for bin {lower_bound} : {upper_bound}')else:# 如果没有点击数据,显示完整数据的箱线图fig = px.box(df, y='Value', title='完整数据的箱线图')return fighistogram_fig = create_histogram(df, m_bin)
# 定义应用程序的布局
app.layout = html.Div([html.H1('数据统计图'),# 初始为空的箱线图组件dcc.Graph(id='box-plot'),# 将创建的直方图添加到布局中dcc.Graph(id='histogram', figure=histogram_fig)
])# 运行应用程序
if __name__ == '__main__':app.run_server(debug=True)
  • 输出:

关键字:【数据分析】数据的计量尺度、数据集中趋势

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: