使用 Python 进行探索性数据分析和预处理
介绍
世界依靠数据运转。数据可以是任何东西 — 数字、文档、图像、事实等。它可以是数字形式,也可以是任何物理形式。“数据”一词是“datum”的复数,意思是“给定的东西”,通常指单条信息。
原始数据只有在我们分析和解释后才能得到我们想要的信息。这种信息可以帮助组织根据事实和趋势制定战略。
随着 Python 软件包的最新进展及其执行高端分析任务的能力,它已成为数据分析师的首选语言。
在第 1 部分结束时,您将获得以下实际经验:
- 重要的数据分析库
- 数据预处理
- 探索性数据分析
第 2 部分将介绍数据可视化和构建预测模型。
数据科学家和分析师大部分时间都花在数据预处理和可视化上。模型构建要容易得多。在这些指南中,我们将使用纽约市 Airbnb 开放数据。我们将预测租金价格,看看我们的预测与实际价格有多接近。在此处下载数据。
重要的数据分析库
是什么让 Python 成为数据分析的有用工具?它包含开源的包和库,广泛用于处理数据。让我们进一步了解它们。
基础科学计算
Numpy:该名称代表Num eric Py thon。该库能够执行随机数、线性代数和傅里叶变换。
SciPy:该名称代表Sci entific Py thon。该库包含高级科学和工程模块。您可以执行线性代数、优化和快速傅里叶变换。SciPy 建立在 NumPy 之上。
数据处理和可视化
pandas:在数据分析和机器学习中,pandas 以数据框的形式使用。此包允许您从不同的文件格式读取数据,例如 CSV、Excel、纯文本、JSON、SQL 等。
Matplotlib:此库用于绘制和可视化数据。您可以绘制直方图、图形、线图、热图等。它可以嵌入到 GUI 工具包中。
机器学习
- 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 用于更好地理解数据。查看数据时,可能会出现一些问题,例如,有多少行和多少列?数据是数字吗?特征(列)的名称是什么?是否有任何缺失值、文本和与数据不相符的数字符号?
shape和info类就是我们要找的答案。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()
数据清理
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()
注意柔和的色调。色调越深,相关性越好。因此,评论数量与评论月高度相关,这是合乎逻辑的。我们还发现价格、评论数量和经度与可用性之间存在相关性。
结论
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~