使用 Python 进行探索性数据分析和预处理

发布日期:2026-07-19 09:04:03  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-19 09:04:03  
0

介绍

世界依靠数据运转。数据可以是任何东西 — 数字、文档、图像、事实等。它可以是数字形式,也可以是任何物理形式。“数据”一词是“datum”的复数,意思是“给定的东西”,通常指单条信息。

原始数据只有在我们分析和解释后才能得到我们想要的信息。这种信息可以帮助组织根据事实和趋势制定战略。

随着 Python 软件包的最新进展及其执行高端分析任务的能力,它已成为数据分析师的首选语言。

在第 1 部分结束时,您将获得以下实际经验:

  • 重要的数据分析库
  • 数据预处理
  • 探索性数据分析

第 2 部分将介绍数据可视化和构建预测模型。

数据科学家和分析师大部分时间都花在数据预处理和可视化上。模型构建要容易得多。在这些指南中,我们将使用纽约市 Airbnb 开放数据。我们将预测租金价格,看看我们的预测与实际价格有多接近。在此处下载数据

重要的数据分析库

是什么让 Python 成为数据分析的有用工具?它包含开源的包和库,广泛用于处理数据。让我们进一步了解它们。

基础科学计算

  1. Numpy:该名称代表Num eric Py thon。该库能够执行随机数、线性代数和傅里叶变换。

  2. SciPy:该名称代表Sci entific Py thon。该库包含高级科学和工程模块。您可以执行线性代数、优化和快速傅里叶变换。SciPy 建立在 NumPy 之上。

数据处理和可视化

  1. pandas:在数据分析和机器学习中,pandas 以数据框的形式使用。此包允许您从不同的文件格式读取数据,例如 CSV、Excel、纯文本、JSON、SQL 等。

  2. Matplotlib:此库用于绘制和可视化数据。您可以绘制直方图、图形、线图、热图等。它可以嵌入到 GUI 工具包中。

机器学习

  1. Scikit Learn:这是一个免费的机器学习库。Scikit Learn 基于 NumPy、SciPy 和 Matplotlib 构建。它包含用于统计模型构建的高效工具。它可以运行各种分类、回归和聚类算法。它在处理数据框时可以与 pandas 很好地集成。

导入库并加载数据

      from __future__ import division
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)

import os
for dirname, _, filenames in os.walk('nyc_airbnb'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

import warnings
warnings.filterwarnings('ignore')
import geopandas as gpd #pip install geopandas

from sklearn import preprocessing
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn import metrics

sns.set_style('darkgrid')
    

探索性数据分析 (EDA)

在数据分析中,EDA 用于更好地理解数据。查看数据时,可能会出现一些问题,例如,有多少行和多少列?数据是数字吗?特征(列)的名称是什么?是否有任何缺失值、文本和与数据不相符的数字符号?

shapeinfo类就是我们要找的答案。head函数将显示数据框的前五行,tail函数将显示后五行。describe 类函数提供数据集的统计摘要。要根据特定标准按组拆分数据,我们将使用groupby ()函数。

首先,让我们读取数据。

      data = pd.read_csv(r'nyc_airbnb\AB_NYC_2019.csv')

print('Number of features: %s' %data.shape[1])
print('Number of examples: %s' %data.shape[0])
    
      data.head().append(data.tail())
    
      data.info()
    
      data.describe()
    

数据评估

让我们开始看看哪些是最好的主人和邻居。

      # Evaluation_1-top_3_hosts

top_3_hosts = (pd.DataFrame(data.host_id.value_counts())).head(3)
top_3_hosts.columns=['Listings']
top_3_hosts['host_id'] = top_3_hosts.index
top_3_hosts.reset_index(drop=True, inplace=True)
top_3_hosts
    
      # Evaluation_2-top_3_neighbourhoood_groups

top_3_neigh = pd.DataFrame(data['neighbourhood_group'].value_counts().head(3))
top_3_neigh.columns=['Listings']
top_3_neigh['Neighbourhood Group'] = top_3_neigh.index
top_3_neigh.reset_index(drop=True, inplace=True)
top_3_neigh
    

词云会展示评论中最常用的单词集合。单词越大,使用频率越高。首先安装一个词云库。

      from wordcloud import WordCloud, ImageColorGenerator
wordcloud = WordCloud(
                          background_color='white'
                         ).generate(" ".join(data.neighbourhood))
plt.figure(figsize=(15,10))
plt.imshow(wordcloud)
plt.axis('off')
plt.savefig('neighbourhood.png')
plt.show()
    

数据清理

下面的代码将对我们的原始数据进行数据清理。我们必须在可视化和预测之前准备好数据。这是数据分析工作流程中的重要一步。在这里我们将使用pandas库,特别是dropisnullfillnatransform类。

      data.drop(['id','host_id','host_name','last_review'],axis=1,inplace=True)
    
      data.isnull().sum()
    

填充值的方法有很多种。最常见的做法是用变量的平均值中位数填充。我们将进行z 检验,以了解哪种方法更合适。

偏斜的数据分布在右侧(正偏斜)或左侧(负偏斜)处有长尾。例如,假设我们想要确定某个州的收入,而该州的收入分布并不均匀。少数人的收入远高于平均水平,这将在数据集中产生异常值(“超出范围”)。异常值对任何数据分析都是一个严重的威胁。在这种情况下,中位收入将比平均收入更接近中产阶级(多数)的收入。

当数据均匀分布时,均值很方便。

      data_check_distrib=data.drop(data[pd.isnull(data.reviews_per_month)].index)

{"Mean":np.nanmean(data.reviews_per_month),"Median":np.nanmedian(data.reviews_per_month),
 "Standard Dev":np.nanstd(data.reviews_per_month)}
    

平均值> 中位数。我们来绘制分布曲线。

      def impute_median(series):
    return series.fillna(series.median())
    
      # plot a histogram 
plt.hist(data_check_distrib.reviews_per_month,  bins=50)
plt.title("Distribution of reviews_per_month")
plt.xlim((min(data_check_distrib.reviews_per_month), max(data_check_distrib.reviews_per_month)))
    

它向右倾斜!让我们填充值。

      def impute_median(series):
    return series.fillna(series.median())
    
      data.reviews_per_month=data["reviews_per_month"].transform(impute_median)
    

相关矩阵图

对于给定的一组特征,相关矩阵显示系数之间的相关性或相互关系。每个随机变量都与其其他值相关。对角线元素始终为 1,因为变量与其自身之间的相关性始终为 100%。检查特征间相关性的一种极好方法是将相关矩阵可视化为热图

      data['reviews_per_month'].fillna(value=0, inplace=True)

f,ax=plt.subplots(figsize=(10,10))
sns.heatmap(data.corr(),annot=True,linewidths=5,fmt='.1f',ax=ax, cmap='Reds')
plt.show()
    

注意柔和的色调。色调越深,相关性越好。因此,评论数量与评论月高度相关,这是合乎逻辑的。我们还发现价格评论数量经度与可用性之间存在相关性

结论

以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据