继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

链家数据分析一--数据离散化处理

幕布斯6054654
关注TA
已关注
手记 1264
粉丝 219
获赞 1011

关于
学习日月光华老师的《Python数据分析从入门到机器学习》,通过写该文来巩固数据分析中使用的知识点。
主要是针对链家的数据进行各个不同方向的分析,本文是第一篇,针对数据中各个房源成交单价的分析。
准备
工具 :Anaconda、juyter notebook
类库:numpy、pandas、matplotlib
分析及代码实现
想要进行数据分析,首先肯定是要读入整个的数据,由于整个数据有有个.csv文件,如下图

webp

image.png


data_list = []for i in range(1, 8):    try:
        data = pd.read_csv('C:\\Users\\nash.wan\\Desktop\\lianjia\\lianjia{}.csv'.format(i), encoding='gbk')    except:
        data = pd.read_csv('C:\\Users\\nash.wan\\Desktop\\lianjia\\lianjia{}.csv'.format(i))    finally:
        data_list.append(data)

由于有7个文件,通过一个循环来读入,然后放到定义的data_list中去,由于每个文件夹的编码方式不一致,我们通过try...except...finally来实现读取,代码如上面。
    涉及知识点:pandas.read_csv()读取csv文件的数据
把所有的数据放到list中后,下面就就行多表合并,取出list中的数据合并成一个DataFrame中去,并且赋值给data如下:

data = pd.concat(data_list)

查看合并后的表格式,如下:

webp

image.png

    涉及知识点:
   concat多表合并
      pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None,     levels=None, names=None, verify_integrity=False)
      1.objs: series,dataframe或者是panel构成的序列lsit
      2.axis: 需要合并链接的轴,0是行,1是列
      3.join:连接的方式 inner,或者outer


然后取出cjdanjia一列的数据,并且对其进行数据清洗

dj = data.cjdanjia.dropna() #取出cjdanjia一列的数据,并且清洗掉数据中NaN值dj = dj.map(lambda x: round(float(x.split('元')[0])/10000, 1)) #清洗掉单价后面的元/平,得到以万元为单位的float类型的Series dj = dj[dj > 0] #清洗掉数据中为0的数据

结果如下图:

webp

image.png

    涉及知识点:
     a.DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
      1.how值为any或者all.all仅在切片元素全为NA时才抛弃该行(列),默认为any
      2.thresh=3 那么一行当中至少有三个非NA值时才将其保留
     b.map() 是一个Series的函数,DataFrame结构中没有map()。map()将一个自定义函数应用于Series结构中的每个元素(elements)。


经过数据清洗后,得到了单价的有效Series,下面对该Series离散处理

bins = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 16] #定义数据离散的区间pd.cut(dj, bins).value_counts() #得出每个区间的数量

处理后的结果如下:

webp

image.png


    涉及知识点:
     pandas快速定义分类
      pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')
      x:必须是一维数组
      bins: 即不同的面元(就是不同的范围)接受三种类型的输入 整数,序列(比如数组)和IntervalIndex---输入整数,进行平均分成整数等份
      right:最后一个bins是否包含最右边的数据,默认为True(为左开右闭)
     value_counts()
      计算数据出现的频率


数据进行离散化,通过pandas的绘图函数plot()进行直方图绘图

zongjia.plot.barh(figsize = (10, 8)) #进行直方图绘图

    涉及知识点:
     Series.plot方法的函数:
      label:用于图例的标签
      ax:要在其上进行绘制的matplotlib subplot对象。如果没有设置,则使用当前matplotlib subplot
      style:将要传给matplotlib的风格字符串(for example: ‘ko–’)
      alpha:图表的填充不透明(0-1)
      kind:可以是’line’, ‘bar’, ‘barh’, ‘kde’
      logy:在Y轴上使用对数标尺
      use_index:将对象的索引用作刻度标签
      rot:旋转刻度标签(0-360)
      xticks:用作X轴刻度的值
      yticks:用作Y轴刻度的值
      xlim:X轴的界限
      ylim:Y轴的界限
      grid:显示轴网格线
      figsize:表示图像大小的元组
直方图展示如下:

webp

image.png


总结
到目前为止,对单价的分析到此为止,通过直方图能够直观的展示北京地区各板块的成交房源单价区间。
未完,后面陆续写会针对其他的方向对链家数据进行分析。

   



作者:s_nash
链接:https://www.jianshu.com/p/53d2dd95986c


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP