python统计分析——箱线图(sns.boxplot)

资料来源:用python学统计学、帮助文档

使用seaborn.boxplot()函数绘制箱线图

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns


data_set=np.array([2,3,3,4,4,4,4,5,5,6])
df=pd.DataFrame({
    'type':['A','A','A','A','A','A','A','A','A','A','B','B','B','B','B','B','B','B','B','B'],
    'value':[2,3,3,4,4,4,4,5,5,6,5,6,6,7,7,7,7,8,8,9]
})

sns.set()
sns.boxplot(data_set)

下面介绍sns.boxplot()函数中常用的几个重要参数(参数等号后为默认设置):

(1)x=None,y=None,用于数据显示的轴向

sns.boxplot(x=data_set)

sns.boxplot(data=df,y='value',x='type')

(2)hue=None,用于将数据拆分为不同系列。

df=pd.DataFrame(data={
    'type':['A','A','A','A','A','A','A','A','A','A','B','B','B','B','B','B','B','B','B','B'],
    'value':[2,3,3,4,4,4,4,5,5,6,5,6,6,7,7,7,7,8,8,9],
    'hue':[1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2]
})

sns.boxplot(data=df,y='value',x='type',hue='hue')

(3)order=None,指定箱线图的显示顺序。

sns.boxplot(data=df,y='value',x='type',order=['B','A'])

(4)hue_order=None,用于指定系列的显示顺序。

sns.boxplot(data=df,y='value',x='type',hue='hue',hue_order=[2,1])

(5)orient=None,当x和y都是数值型数据时,用于指定数据统计的方向,默认按y轴方向统计。

sns.boxplot(data=df,y='value',x='hue',orient='v')

sns.boxplot(data=df,y='value',x='hue',orient='h')

(6)width=0.8,用于设置箱子的相对宽度,默认为0.8,下面为0.5时的图片:

sns.boxplot(data=df,y='value',x='type',width=0.5)

(7)fliersize=5,用于设置显示异常值时标记的大小,默认值为5,注意观察下面两图异常值数据点大小的变化。

ser=pd.Series(data=[2,3,3,4,4,4,4,5,5,10])
sns.boxplot(ser)

sns.boxplot(ser,fliersize=10)

(8)whis=1.5,设置箱线图线须的位置,默认是1.5,即1.5倍的四分位距,一般采用默认设置即可。具体解释为:Q1为下四分位数,Q3为上四分位数。箱线图线须的下界值为Q1-1.5*(Q3-Q1),箱线图线须的上界值为Q3+1.5*(Q3-Q1),在上下界范围之外的数据点被认为是异常值,并标注为异常点。当数据中的最小值大于箱线图的线须的下界值时,程序会把最小值当作下界值进行作图;同样当最大值小于线须的上界值时,程序会把最大值当作上界值进行作物。

### 如何用Python进行高校招生数据分析 #### 数据采集 为了获得高质量的原始数据,可以利用Python中的`requests`和`BeautifulSoup`库构建爬虫程序来抓取来自各个高校官网以及教育部门发布的招生信息。这些信息通常涵盖了历年的报考详情、录取分数段、各专业的热门程度等方面的内容[^1]。 ```python import requests from bs4 import BeautifulSoup def fetch_data(url): response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 假设目标网页结构已知,这里解析具体页面元素并提取所需数据 data = [] for item in soup.find_all('div', class_='data-item'): record = { "year": int(item['data-year']), "university": str(item['data-univ']), "major": str(item['data-major']), "score_min": float(item['data-score-min']) } data.append(record) return data ``` #### 数据清理与预处理 一旦获得了初步的数据集合之后,则需对其进行必要的清洗操作以提高其可用性和可靠性。这一步骤涉及删除冗余记录、修正异常值,并按照特定标准对条目实施标准化转换,从而保证最终用于分析的数据集既精确又具代表性[^2]。 ```python import pandas as pd raw_df = pd.DataFrame(fetch_data("http://example.com/admissions")) cleaned_df = raw_df.drop_duplicates().dropna() # 删除重复项及缺失值 # 更多复杂的清理逻辑可以根据实际情况添加... ``` #### 数据探索性分析(EDA) 借助Pandas提供的统计函数以及其他辅助工具包如Matplotlib或Seaborn来进行描述性的总结概括;绘制直方图、箱线图等图形有助于识别潜在的趋势模式或是离群点的存在情况。 ```python %matplotlib inline import matplotlib.pyplot as plt import seaborn as sns sns.set(style="whitegrid") plt.figure(figsize=(8,6)) ax = sns.boxplot(x='year', y='score_min', hue='university', data=cleaned_df.sample(500), palette="Set3") ax.set_title('Minimum Admission Scores Over Years by University'); ``` #### 构建预测模型 如果希望进一步深入探究影响因素之间的关系,还可以考虑应用机器学习方法建立回归模型或其他类型的预测器。Scikit-Learn是一个非常适合此类任务的选择之一,在此之前可能还需要额外引入一些特征工程技巧来增强输入变量的表现力。 ```python from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression X = cleaned_df[['year']].values.reshape(-1, 1) # 特征矩阵 y = cleaned_df['score_min'].values # 目标向量 model = LinearRegression() X_train, X_test, y_train, y_test = train_test_split(X, y) model.fit(X_train, y_train) predictions = model.predict(X_test) print(f'R² Score: {model.score(X_test, y_test):.3f}') ``` #### 结果呈现与报告生成 最后阶段就是将上述过程中得到的各种发现转化为易于理解的形式——无论是静态图片还是互动式的Web应用程序都可以作为有效的传播媒介。Plotly Dash框架允许创建具备高度定制化的仪表板界面,而Jupyter Notebook则适合撰写包含文字说明和技术细节在内的综合性文档。 ```python import dash import plotly.express as px app = dash.Dash(__name__) fig = px.scatter(cleaned_df, x="year", y="score_min", color="university", title="Admission Trends Visualization") app.layout = html.Div([ dcc.Graph(id='admission-trends-graphic', figure=fig), ]) if __name__ == '__main__': app.run_server(debug=True) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值