零基础入门数据挖掘二手车交易价格预测-Task2 数据分析---zpz

二手车交易价格预测-Task2 数据分析

1 EDA-数据探索性分析

作为一名初学者,首先需要了解什么是EDA以及其在python中使用的工具。

1.1 EDA

Exploratory Data AnalysisEDA
In statistics, exploratory data analysis is an approach to analyzing data sets to summarize their main characteristics, often using statistical graphics and other data visualization methods. A statistical model can be used or not, but primarily EDA is for seeing what the data can tell us beyond the formal modeling or hypothesis testing task. Exploratory data analysis was promoted by John Tukey to encourage statisticians to explore the data, and possibly formulate hypotheses that could lead to new data collection and experiments. EDA is different from initial data analysis (IDA,初始数据分析), which focuses more narrowly on checking assumptions required for model fitting and hypothesis testing, and handling missing values and making transformations of variables as needed. EDA encompasses IDA.from Wikipedia

由上述可以知道探索性数据分析(Exploratory Data Analysis,EDA)是通过数据可视化了解该数据集的特征,以便于在特征工程和建立模型之前了解数据集,了解变量间的相互关系以及变量与预测值之间的关系,是数据挖掘中十分重要的一步。
进一步得知其主要的工作是:对数据进行清洗,对数据进行描述(描述统计量,图表),查看数据的分布,比较数据之间的关系,培养对数据的直觉,对数据进行总结等。

1.1.1 数据清洗(Data cleansing)

Data cleansing or data cleaning is the process of detecting and correcting corrupt or inaccurate records from a record set, table, or database and refers to identifying incomplete, incorrect, inaccurate or irrelevant parts of the data and then replacing, modifying, or deleting the dirty or coarse data. Data cleansing may be performed interactively with data wrangling tools, or as batch processing through scripting.from Wikipedia

在python中有很多可用的库,例如pandas,NumPy,matplotlib,seaborn等。借助这些库,我们可以对数据进行分析并提供有用的见解。我将同时使用这些库和Jupyter Notebook。
所需工具:Numpy(数值运算库)Scipy(科学计算库)Matplotlib(基础可视化库)Pandas(数据处理库)Seaborn(高级可视化库)Scikit-learn(流行的机器学习库)

1.2 Python常用包了解

1.2.1 NumPy(数值运算库)

NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。
NumPy包的核心是 ndarray 对象。它封装了python原生的同数据类型的 n 维数组,为了保证其性能优良,其中有许多操作都是代码在本地进行编译后执行的。 NumPy.

1.2.2 Scipy(科学计算库)

SciPy(发音为“ Sigh Pie”)是用于数学,科学和工程的开源软件。SciPy库依赖于NumPy,该库提供了便捷的N维数组操作。SciPy库是为与NumPy数组一起使用而构建的,并提供了许多用户友好且高效的数值例程,例如用于数值积分和优化的例程。它们一起运行在所有流行的操作系统上,安装迅速且免费。NumPy和SciPy易于使用,但功能强大到足以被一些世界领先的科学家和工程师所依赖。
Scipy.

1.2.3 Matplotlib(基础可视化库)

Matplotlib是一个Python 2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。Matplotlib可用于Python脚本,Python和IPython Shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。Matplotlib尝试使容易的事情变得容易,使困难的事情变得可能。您只需几行代码就可以生成图表,直方图,功率谱,条形图,误差图,散点图等。
Matplotlib.

1.2.4 Pandas(数据处理库)

Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。
利器之一:DataFrame
DataFrame是Pandas中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。
利器之一:Series
它是一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。
Pandas.

1.2.5 Seaborn(高级可视化库)

Seaborn是基于matplotlib的Python数据可视化库。它提供了用于绘制引人入胜且内容丰富的统计图形的高级界面。Seaborn是一个使用Python制作统计图形的库。它建立在matplotlib之上,并与pandas数据结构紧密集成。
Seaborn可帮助探索和理解数据。它的绘图功能在包含整个数据集的数据框和数组上运行,并在内部执行必要的语义映射和统计聚合,以生成有用的图。其面向数据集的声明性API使您可以专注于绘图中不同元素的含义,而不是如何绘制它们的细节。
Seaborn.

# Import seaborn
import seaborn as sns #用简写形式导入的sns
1.2.6 Scikit-learn(流行的机器学习库)

简单有效的工具进行预测数据分析;每个人都可以访问,并且可以在各种情况下重用;基于NumPy,SciPy和matplotlib构建;开源,可商业使用-BSD许可证
Scikit-lear``n.

2 代码展示

# coding:utf-8
# 导入warnings包,利用过滤器来实现忽略警告语句。
import warnings
warnings.filterwarnings('ignore')            # 忽略红色警告部分

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import missingno as msno       # 用于可视化缺失值分布
import scipy.stats as st

#  1) 载入训练集和测试集的文件;
path = 'C:/Users/15815/Desktop/ershouche/pythonProject/'
Train_data = pd.read_csv(path+'used_car_train_20200313.csv', sep=' ')
Test_data = pd.read_csv(path+'used_car_testB_20200421.csv', sep=' ')

#  2) 观察数据(head()+shape)
print(Train_data.head().append(Train_data.tail()))     # 观察训练集的头部和尾部
print(Train_data.shape)
print(Test_data.head().append(Test_data.tail()))      # 观察测试集的头部和尾部
print(Test_data.shape)
print('*'*100)                                        # 分割线

# 1) 通过describe()来熟悉数据的相关统计量
print(Train_data.describe())
print(Test_data.describe())
print('*'*100)                                        # 分割线

# 2) 通过info()来熟悉数据类型,通过info()来了解数据每列的type
# 有助于了解是否存在除了nan以外的特殊符号异常。
print(Train_data.info())
print(Test_data.info())
print('*'*100)                                        # 分割线

# 1) 查看每列的存在nan(Not a Number,非数)情况
print(Train_data.isnull().sum())
print(Test_data.isnull().sum())
print('*'*100)                                        # 分割线

# 设置图片的大小与像素
# 分辨率参数-dpi,画布大小参数-figsize
plt.figure(dpi=300,figsize=(24,8))
# 改变文字大小参数-fontsize
plt.xticks(fontsize=10)

# nan可视化
missing = Train_data.isnull().sum()
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()

# 可视化看下缺省值
msno.matrix(Train_data.sample(250))
msno.bar(Train_data.sample(1000))

# 可视化看下缺省值
msno.matrix(Test_data.sample(250))
msno.bar(Test_data.sample(1000))

# 2) 查看异常值检测
Train_data.info()
Train_data['notRepairedDamage'].value_counts()
Train_data['notRepairedDamage'].replace('-', np.nan, inplace=True)
Train_data['notRepairedDamage'].value_counts()
Train_data.isnull().sum()
Test_data['notRepairedDamage'].value_counts()
Test_data['notRepairedDamage'].replace('-', np.nan, inplace=True)
Train_data["seller"].value_counts()
Train_data["seller"].value_counts()
del Train_data["seller"]
del Train_data["offerType"]
del Test_data["seller"]
del Test_data["offerType"]
Train_data['price']
Train_data['price'].value_counts()
print('*'*100)                                        # 分割线

# 1) 总体分布概况(无界约翰逊分布等)
import scipy.stats as st
y = Train_data['price']
plt.figure(1); plt.title('Johnson SU')
sns.distplot(y, kde=False, fit=st.johnsonsu)
plt.figure(2); plt.title('Normal')
sns.distplot(y, kde=False, fit=st.norm)
plt.figure(3); plt.title('Log Normal')
sns.distplot(y, kde=False, fit=st.lognorm)
print('*'*100)                                        # 分割线

# 2) 查看skewness and kurtosis
sns.distplot(Train_data['price']);
print("Skewness: %f" % Train_data['price'].skew())
print("Kurtosis: %f" % Train_data['price'].kurt())
Train_data.skew(), Train_data.kurt()
sns.distplot(Train_data.skew(),color='blue',axlabel ='Skewness')
sns.distplot(Train_data.kurt(),color='orange',axlabel ='Kurtness')
print('*'*100)                                        # 分割线

# 3) 查看预测值的具体频数
plt.hist(Train_data['price'], orientation = 'vertical',histtype = 'bar', color ='red')
plt.show()
print('*'*100)                                        # 分割线

# log变换 z之后的分布较均匀,可以进行log变换进行预测,这也是预测问题常用的trick
plt.hist(np.log(Train_data['price']), orientation = 'vertical',histtype = 'bar', color ='red')
plt.show()
print('*'*100)                                        # 分割线

3 总结

此次使用EDA步骤为广为普遍的步骤,充分的使用这些库,可以帮助我们较好的分析数据,以及进行数据的前处理与EDA等。
接下来加入自己的一些理解,查阅资料文献,作为一名初学者,加深对这些库以及问题的理解与运用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值