关于
学习日月光华老师的《Python数据分析从入门到机器学习》,通过写该文来巩固数据分析中使用的知识点。
主要是针对链家的数据进行各个不同方向的分析,本文是第一篇,针对数据中各个房源成交单价的分析。
准备
工具 :Anaconda、juyter notebook
类库:numpy、pandas、matplotlib
分析及代码实现
想要进行数据分析,首先肯定是要读入整个的数据,由于整个数据有有个.csv文件,如下图
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)
查看合并后的表格式,如下:
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的数据
结果如下图:
涉及知识点: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() #得出每个区间的数量
处理后的结果如下:
涉及知识点:
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:表示图像大小的元组
直方图展示如下:
总结
到目前为止,对单价的分析到此为止,通过直方图能够直观的展示北京地区各板块的成交房源单价区间。
未完,后面陆续写会针对其他的方向对链家数据进行分析。
如果对您有点帮助的话,麻烦您给点个赞,谢谢。
链家数据分析二-数据分组处理:链家数据分析二-数据分组处理