您好,欢迎访问三七文档
常用包推荐数据获取&爬虫Tushare:提供便捷的国内股票行情数据的获取(自动爬取相关网站数据)requests:一款优秀的HTTPRequest包,可以用于与HTML/XML解析的包结合起来制作爬虫工具。urllib:Python3的内置包,主要用于访问、解析指定URL。BeautifulSoup:一个可以从HTML或XML文件中提取数据的Python库。数据整理Numpy:提供强大的矩阵操作,以及一些非常有用的计算工具(如:irr、npv等)Pandas:提供强大的数据框操作(类似R语言中的DataFrame)SciPy:提供强大的统计工具。数据可视化matplotlib数据库操作sqlalchemy:数据库建议使用自己熟悉的或项目统一要求的,如:Oracle、MySQL、PostgreSQL、MSSQL、SQLite等。sqlalchemy包可以有效的连接各类常用的数据库,并处理各类操作。1.python数据分析基础2.numpy3.Scikit-Learn4.Bokeh5.Scipy6.Pandas2018-07-01发布入门Python数据分析最好的实战项目(一)人工智能数据分析python14k次阅读·读完需要30分钟146作者:xiaoyu微信公众号:Python数据科学知乎:python数据分析师目的:本篇给大家介绍一个数据分析的初级项目,目的是通过项目了解如何使用Python进行简单的数据分析。数据源:博主通过爬虫采集的链家全网北京二手房数据(公众号后台回复二手房数据便可获取)。下面是第二篇建模篇,看完这篇可继续研究这篇。入门Python数据分析最好的实战项目(二)数据初探首先导入要使用的科学计算包numpy,pandas,可视化matplotlib,seaborn,以及机器学习包sklearn。importpandasaspdimportnumpyasnpimportseabornassnsimportmatplotlibasmplimportmatplotlib.pyplotaspltfromIPython.displayimportdisplayplt.style.use(fivethirtyeight)sns.set_style({'font.sans-serif':['simhei','Arial']})%matplotlibinline#检查Python版本fromsysimportversion_infoifversion_info.major!=3:raiseException('请使用Python3来完成此项目')然后导入数据,并进行初步的观察,这些观察包括了解数据特征的缺失值,异常值,以及大概的描述性统计。#导入链家二手房数据lianjia_df=pd.read_csv('lianjia.csv')display(lianjia_df.head(n=2))初步观察到一共有11个特征变量,Price在这里是我们的目标变量,然后我们继续深入观察一下。#检查缺失值情况lianjia_df.info()发现了数据集一共有23677条数据,其中Elevator特征有明显的缺失值。lianjia_df.describe()上面结果给出了特征值是数值的一些统计值,包括平均数,标准差,中位数,最小值,最大值,25%分位数,75%分位数。这些统计结果简单直接,对于初始了解一个特征好坏非常有用,比如我们观察到Size特征的最大值为1019平米,最小值为2平米,那么我们就要思考这个在实际中是不是存在的,如果不存在没有意义,那么这个数据就是一个异常值,会严重影响模型的性能。当然,这只是初步观察,后续我们会用数据可视化来清晰的展示,并证实我们的猜测。#添加新特征房屋均价df=lianjia_df.copy()df['PerPrice']=lianjia_df['Price']/lianjia_df['Size']#重新摆放列位置columns=['Region','District','Garden','Layout','Floor','Year','Size','Elevator','Direction','Renovation','PerPrice','Price']df=pd.DataFrame(df,columns=columns)#重新审视数据集display(df.head(n=2))我们发现Id特征其实没有什么实际意义,所以将其移除。由于房屋单价分析起来比较方便,简单的使用总价/面积就可得到,所以增加一个新的特征PerPrice(只用于分析,不是预测特征)。另外,特征的顺序也被调整了一下,看起来比较舒服。数据可视化分析Region特征分析对于区域特征,我们可以分析不同区域房价和数量的对比。#对二手房区域分组对比二手房数量和每平米房价df_house_count=df.groupby('Region')['Price'].count().sort_values(ascending=False).to_frame().reset_index()df_house_mean=df.groupby('Region')['PerPrice'].mean().sort_values(ascending=False).to_frame().reset_index()f,[ax1,ax2,ax3]=plt.subplots(3,1,figsize=(20,15))sns.barplot(x='Region',y='PerPrice',palette=Blues_d,data=df_house_mean,ax=ax1)ax1.set_title('北京各大区二手房每平米单价对比',fontsize=15)ax1.set_xlabel('区域')ax1.set_ylabel('每平米单价')sns.barplot(x='Region',y='Price',palette=Greens_d,data=df_house_count,ax=ax2)ax2.set_title('北京各大区二手房数量对比',fontsize=15)ax2.set_xlabel('区域')ax2.set_ylabel('数量')sns.boxplot(x='Region',y='Price',data=df,ax=ax3)ax3.set_title('北京各大区二手房房屋总价',fontsize=15)ax3.set_xlabel('区域')ax3.set_ylabel('房屋总价')plt.show()使用了pandas的网络透视功能groupby分组排序。区域特征可视化直接采用seaborn完成,颜色使用调色板palette参数,颜色渐变,越浅说明越少,反之越多。可以观察到:二手房均价:西城区的房价最贵均价大约11万/平,因为西城在二环以里,且是热门学区房的聚集地。其次是东城大约10万/平,然后是海淀大约8.5万/平,其它均低于8万/平。二手房房数量:从数量统计上来看,目前二手房市场上比较火热的区域。海淀区和朝阳区二手房数量最多,差不多都接近3000套,毕竟大区,需求量也大。然后是丰台区,近几年正在改造建设,有赶超之势。二手房总价:通过箱型图看到,各大区域房屋总价中位数都都在1000万以下,且房屋总价离散值较高,西城最高达到了6000万,说明房屋价格特征不是理想的正太分布。Size特征分析f,[ax1,ax2]=plt.subplots(1,2,figsize=(15,5))#建房时间的分布情况sns.distplot(df['Size'],bins=20,ax=ax1,color='r')sns.kdeplot(df['Size'],shade=True,ax=ax1)#建房时间和出售价格的关系sns.regplot(x='Size',y='Price',data=df,ax=ax2)plt.show()Size分布:通过distplot和kdeplot绘制柱状图观察Size特征的分布情况,属于长尾类型的分布,这说明了有很多面积很大且超出正常范围的二手房。Size与Price的关系:通过regplot绘制了Size和Price之间的散点图,发现Size特征基本与Price呈现线性关系,符合基本常识,面积越大,价格越高。但是有两组明显的异常点:1.面积不到10平米,但是价格超出10000万;2.一个点面积超过了1000平米,价格很低,需要查看是什么情况。df.loc[df['Size']10]经过查看发现这组数据是别墅,出现异常的原因是由于别墅结构比较特殊(无朝向无电梯),字段定义与二手商品房不太一样导致爬虫爬取数据错位。也因别墅类型二手房不在我们的考虑范围之内,故将其移除再次观察Size分布和Price关系。df.loc[df['Size']1000]经观察这个异常点不是普通的民用二手房,很可能是商用房,所以才有1房间0厅确有如此大超过1000平米的面积,这里选择移除。df=df[(df['Layout']!='叠拼别墅')&(df['Size']1000)]重新进行可视化发现就没有明显的异常点了。Layout特征分析f,ax1=plt.subplots(figsize=(20,20))sns.countplot(y='Layout',data=df,ax=ax1)ax1.set_title('房屋户型',fontsize=15)ax1.set_xlabel('数量')ax1.set_ylabel('户型')plt.show()这个特征真是不看不知道,各种厅室组合搭配,竟然还有9室3厅,4室0厅等奇怪的结构。其中,2室一厅占绝大部分,其次是3室一厅,2室2厅,3室两厅。但是仔细观察特征分类下有很多不规则的命名,比如2室一厅与2房间1卫,还有别墅,没有统一的叫法。这样的特征肯定是不能作为机器学习模型的数据输入的,需要使用特征工程进行相应的处理。Renovation特征分析df['Renovation'].value_counts()精装11345简装8497其他3239毛坯576南北20Name:Renovation,dtype:int64发现Renovation装修特征中竟然有南北,它属于朝向的类型,可能是因为爬虫过程中一些信息位置为空,导致“Direction”朝向特征出现在这里,所以需要清除或替换掉。#去掉错误数据“南北”,因为爬虫过程中一些信息位置为空,导致“Direction”的特征出现在这里,需要清除或替换df['Renovation']=df.loc[(df['Renovation']!='南北'),'Renovation']#画幅设置f,[ax1,ax2,ax3]=plt.subplots(1,3,figsize=(20,5))sns.countplot(df['Renovation'],ax=ax1)sns.barplot(x='Renovation',y='Price',data=df,ax=ax2)sns.boxplot(x='Renovation',y='Price',data=df,ax=ax3)plt.show()观察到,精装修的二手房数量最多,简装其次,也是我们平日常见的。而对于价格来说,毛坯类型却是最高,其次是精装修。Elevator特征分析初探数据的时候,我们发现Elevator特征是有大量缺失值的,这对于我们是十分不利的,首先我们先看看有多少缺失值:misn=len(df.loc[(df['Elevator'].isnull()),'Elevator'])print('Elevator缺失值数量为:'+str(misn))Elevator缺失值数量为:8237这么多的缺失值怎么办呢?这个需要根据实际情况考虑,常用的方法有平均值/中位数填补法,直接移除,或者根据其他特征建模预测等。这里我们考虑填补法,但是有无电梯不是数值,不存在平均值和中位数,怎么填补呢
本文标题:常用包推荐
链接地址:https://www.777doc.com/doc-3777646 .html