import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.compose import ColumnTransformer # 加载数据 housing = pd.read_csv("housing\housing.csv") #使用head()方法查看前五行 housing.head() #使用info()方法查看数据描述 housing.info() #使用housing[“ocean_proximity”].value_counts()查看非数值的项,也就是距离大海距离的项包含哪些属性,每个属性包含多少个街区 housing["ocean_proximity"].value_counts() #使用housing.describe()方法查看数值属性的概括 housing.describe() import matplotlib.pyplot as plt housing.hist(bins=50,figsize=(20,15)) plt.show() #随机取样 from sklearn.model_selection import train_test_split train_set,test_set=train_test_split(housing,test_size=0.2,random_state=42) test_set.head() #收入中位数柱状图 housing["median_income"].hist() plt.show() # Divide by 1.5 to limit the number of income categories import numpy as np housing["income_cat"]=np.ceil(housing["median_income"]/1.5) housing["income_cat"].head() # Label those above 5 as 5 housing["income_cat"].where(housing["income_cat"]<5,5.0,inplace=True) housing["income_cat"].hist() plt.show() #根据收入分类,进行分层采样,使用sklearn的stratifiedShuffleSplit类 from sklearn.model_selection import StratifiedShuffleSplit split=StratifiedShuffleSplit(n_splits=1,test_size=0.2,random_state=42) for train_index,test_index in split.split(housing,housing["income_cat"]): strat_train_set=housing.loc[train_index] strat_test_set=housing.loc[test_index] #查看分层抽样之后测试集的分布状况 strat_test_set["income_cat"].value_counts()/len(strat_test_set) len(strat_test_set) #查看原始数据集的分布状况 housing["income_cat"].value_counts()/len(housing) # .value_counts():确认数据出现的频数 len(housing) #对分层采样和随机采样的对比 def income_cat_proportions(data): return data["income_cat"].value_counts()/len(data) train_set,test_set=train_test_split(housing,test_size=0.2,random_state=42) compare_props=pd.DataFrame({"Overall":income_cat_proportions(housing), "Stratified":income_cat_proportions(strat_test_set), "Random":income_cat_proportion
时间: 2025-07-14 08:00:10 浏览: 8
<think>嗯,用户想知道如何用Python中的pandas、scikit-learn和matplotlib实现数据加载、预处理、可视化和分层采样。首先,我得理清楚每个步骤需要用到哪些库以及具体的方法。
数据加载方面,pandas肯定是主力,支持多种格式的数据,比如CSV、Excel。记得用pd.read_csv这样的函数。然后预处理部分,可能需要处理缺失值,标准化数据,或者编码分类变量。Scikit-learn的SimpleImputer、StandardScaler和OneHotEncoder应该能用上。可视化的话,matplotlib的pyplot模块,还有seaborn可能也会有用,不过用户没提seaborn,可能就只用matplotlib吧。
分层采样是关键点,Scikit-learn的train_test_split里面有stratify参数,可以保持类别比例。但用户可能还需要更详细的分层方法,比如交叉验证中的分层K折,不过问题里主要提到分层采样,可能指的是简单的训练测试分割。需要确保在split的时候设置stratify参数为目标的类别列。
然后,用户提供的引用里提到了Scikit-learn的安装和导入,还有RandomizedSearchCV的分布参数设置,但当前问题主要是数据处理的基础步骤,可能暂时用不到超参数搜索。不过引用中的信息可以提醒我要提到如何安装这些库,但用户可能已经安装了,所以可能只需要简单带过。
接下来,我需要把这些步骤按顺序组织起来。先加载数据,然后检查缺失值,处理分类变量,标准化,可视化分布,最后分层采样。代码示例要简洁,每个步骤给出关键函数的使用方法。
可能需要注意的地方:在数据预处理时,分类变量可能需要独热编码或者标签编码,这里用OneHotEncoder更合适,因为如果是无序类别的话。标准化用StandardScaler,而缺失值处理用SimpleImputer填充均值或者中位数。
可视化部分,用户可能想看到如何绘制直方图、散点图等,用matplotlib的hist和scatter函数。分层采样的代码示例需要展示train_test_split中的stratify参数。
另外,用户的问题可能涉及到机器学习流程的前期步骤,所以最后的分层采样是为了后续的模型训练做准备。需要确保数据集被正确分割,保持类别分布一致。
检查是否有遗漏的步骤,比如特征选择或者降维,但根据用户的问题,主要集中在加载、预处理、可视化和分层采样,这些步骤可能不需要包括更复杂的处理。不过引用3提到了特征选择,但用户的问题没直接提到,可能暂时不需要涉及。
最后,生成的相关问题需要考虑用户可能的后续需求,比如处理缺失值的其他方法,特征工程,或者更高级的可视化技巧,以及分层采样的其他应用场景。</think>以下是使用Python进行数据分析处理的完整流程示例,涵盖数据加载、预处理、可视化及分层采样的关键步骤:
---
### 一、数据加载与查看(使用Pandas)
```python
import pandas as pd
# 加载CSV数据
df = pd.read_csv('data.csv') # 支持Excel、JSON等多种格式[^1]
# 查看数据结构
print(df.head()) # 显示前5行
print(df.describe()) # 统计特征
print(df.info()) # 数据类型和缺失值
```
---
### 二、数据预处理
#### 1. 缺失值处理
```python
from sklearn.impute import SimpleImputer
# 数值型缺失值用均值填充
num_imputer = SimpleImputer(strategy='mean')
df[['age','income']] = num_imputer.fit_transform(df[['age','income']])
# 类别型缺失值用众数填充
cat_imputer = SimpleImputer(strategy='most_frequent')
df['gender'] = cat_imputer.fit_transform(df[['gender']])
```
#### 2. 特征标准化
```python
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df[['age','income']] = scaler.fit_transform(df[['age','income']])
```
#### 3. 类别编码
```python
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder()
gender_encoded = encoder.fit_transform(df[['gender']]).toarray()
```
---
### 三、数据可视化(使用Matplotlib)
```python
import matplotlib.pyplot as plt
# 特征分布直方图
df['age'].hist(bins=20)
plt.title('年龄分布')
plt.show()
# 散点图分析相关性
plt.scatter(df['age'], df['income'])
plt.xlabel('年龄')
plt.ylabel('收入')
plt.show()
```
---
### 四、
阅读全文
相关推荐



















