使用Python进行数据分析:从入门到实践

3分钟前 2阅读

在当今数据驱动的世界中,数据分析已经成为各行各业不可或缺的一部分。无论是商业决策、科学研究还是人工智能开发,数据分析都扮演着至关重要的角色。本文将介绍如何使用 Python 进行基础的数据分析,并通过一个完整的示例展示整个流程,包括数据加载、清洗、可视化和基本建模。

我们将使用 PandasMatplotlib 等常见的 Python 数据分析库来完成任务。如果你是初学者,建议先安装好以下环境:

Python 3.xJupyter Notebook(可选)PandasMatplotlibScikit-learn(用于模型训练)

你可以通过以下命令安装所需的包:

pip install pandas matplotlib scikit-learn

数据分析的基本流程

数据分析通常包括以下几个步骤:

数据收集:获取原始数据。数据清洗:处理缺失值、异常值等。数据探索与可视化:理解数据分布、关系等。建模分析:使用统计或机器学习方法建模。结果解释与报告:得出并形成报告。

接下来我们以一个实际案例来演示这个过程。


案例背景:预测房屋价格

我们使用的数据集是一个经典的房价预测数据集,包含多个特征如房间数、犯罪率、房产税等,目标变量是房价(MEDV)。

你可以在 UCI Machine Learning Repository 下载该数据集,文件名为 housing.data


代码实现

1. 导入必要的库

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import mean_squared_error, r2_score

2. 加载数据

由于该数据集没有列名,我们需要手动指定列名。

# 定义列名columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']# 加载数据df = pd.read_csv('housing.data', sep='\s+', names=columns)# 显示前几行print(df.head())

输出示例:

     CRIM   ZN  INDUS  CHAS   NOX     RM    AGE     DIS  RAD  TAX  PTRATIO      B  LSTAT  MEDV0  0.00632  18.0   2.31     0  0.538  6.575  65.2  4.0900    1  296     15.3  396.90   4.98  24.01  0.02731   0.0   7.07     0  0.469  6.421  78.9  4.9671    2  242     17.8  396.90   9.14  21.6

3. 数据清洗

检查是否有缺失值:

print(df.isnull().sum())

结果显示无缺失值。但我们仍可以做一些简单的数据清洗,比如删除异常值。

例如,我们可以过滤掉 MEDV 值大于 50 的记录(这些可能是异常值):

df = df[df['MEDV'] < 50]

4. 数据探索与可视化

查看房价分布

plt.hist(df['MEDV'], bins=30, edgecolor='black')plt.title('Distribution of House Prices')plt.xlabel('Price (in $1000s)')plt.ylabel('Number of Houses')plt.show()

特征与目标之间的关系

我们选择“房间数量(RM)”作为特征,绘制散点图:

plt.scatter(df['RM'], df['MEDV'], alpha=0.6)plt.title('Relationship between RM and MEDV')plt.xlabel('Average number of rooms per dwelling (RM)')plt.ylabel('House Price (MEDV)')plt.show()

5. 构建线性回归模型

我们选取 RM(房间数量)作为特征变量,MEDV(房价)为目标变量。

# 准备数据X = df[['RM']]y = df['MEDV']# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建模型model = LinearRegression()# 训练模型model.fit(X_train, y_train)# 预测y_pred = model.predict(X_test)

模型评估

mse = mean_squared_error(y_test, y_pred)r2 = r2_score(y_test, y_pred)print(f'Mean Squared Error: {mse:.2f}')print(f'R^2 Score: {r2:.2f}')

输出示例:

Mean Squared Error: 43.68R^2 Score: 0.48

说明模型能解释约 48% 的方差,还有提升空间。

可视化预测结果

plt.scatter(X_test, y_test, color='blue', label='Actual')plt.plot(X_test, y_pred, color='red', linewidth=2, label='Predicted')plt.title('Linear Regression Prediction')plt.xlabel('RM')plt.ylabel('MEDV')plt.legend()plt.show()

进一步改进方向

虽然我们只用了单个特征,但你可以尝试以下方式提高模型性能:

使用更多特征(多元线性回归)使用更复杂的模型(如随机森林、梯度提升树)特征工程(标准化、归一化、构造新特征)超参数调优

例如,使用所有特征进行建模:

X_all = df.drop('MEDV', axis=1)y_all = df['MEDV']X_train_all, X_test_all, y_train_all, y_test_all = train_test_split(X_all, y_all, test_size=0.2, random_state=42)model_all = LinearRegression()model_all.fit(X_train_all, y_train_all)y_pred_all = model_all.predict(X_test_all)mse_all = mean_squared_error(y_test_all, y_pred_all)r2_all = r2_score(y_test_all, y_pred_all)print(f'Using all features - R^2: {r2_all:.2f}')

输出示例:

Using all features - R^2: 0.74

这表明使用全部特征后,模型解释能力显著提升。


总结

本文介绍了使用 Python 进行数据分析的基本流程,并通过一个具体的房价预测项目展示了从数据加载、清洗、可视化到建模的全过程。虽然我们只是用了一个简单的线性回归模型,但已经可以看出数据分析的强大之处。

随着经验的增长,你可以尝试更复杂的数据集和算法,比如深度学习、时间序列分析、图像识别等,Python 在这些领域都有丰富的工具支持。

希望这篇文章能帮助你迈出数据分析的第一步!


附录:完整代码汇总

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import mean_squared_error, r2_score# 加载数据columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']df = pd.read_csv('housing.data', sep='\s+', names=columns)# 数据清洗df = df[df['MEDV'] < 50]# 数据探索plt.hist(df['MEDV'], bins=30, edgecolor='black')plt.title('Distribution of House Prices')plt.xlabel('Price (in $1000s)')plt.ylabel('Number of Houses')plt.show()plt.scatter(df['RM'], df['MEDV'], alpha=0.6)plt.title('Relationship between RM and MEDV')plt.xlabel('Average number of rooms per dwelling (RM)')plt.ylabel('House Price (MEDV)')plt.show()# 单特征建模X = df[['RM']]y = df['MEDV']X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)model = LinearRegression()model.fit(X_train, y_train)y_pred = model.predict(X_test)mse = mean_squared_error(y_test, y_pred)r2 = r2_score(y_test, y_pred)print(f'Mean Squared Error: {mse:.2f}')print(f'R^2 Score: {r2:.2f}')plt.scatter(X_test, y_test, color='blue', label='Actual')plt.plot(X_test, y_pred, color='red', linewidth=2, label='Predicted')plt.title('Linear Regression Prediction')plt.xlabel('RM')plt.ylabel('MEDV')plt.legend()plt.show()# 多特征建模X_all = df.drop('MEDV', axis=1)y_all = df['MEDV']X_train_all, X_test_all, y_train_all, y_test_all = train_test_split(X_all, y_all, test_size=0.2, random_state=42)model_all = LinearRegression()model_all.fit(X_train_all, y_train_all)y_pred_all = model_all.predict(X_test_all)mse_all = mean_squared_error(y_test_all, y_pred_all)r2_all = r2_score(y_test_all, y_pred_all)print(f'Using all features - R^2: {r2_all:.2f}')

如需进一步探讨数据分析或机器学习相关内容,欢迎继续提问!

免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第31384名访客 今日有23篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!