继上一篇安居客二手房的数据进行预处理后,接下来就可以对数据进行可视化。
我们需要用到的库有:
import osimport shutilimport pandas as pdfrom matplotlib import pyplot as pltfrom pyecharts import Pie
重点介绍!!!!!!
Matplotlib库介绍plot(kind="绘图类型")绘图类型:‘line’ : #折线图‘bar’ : #条形图‘barh’ : #横向条形图‘hist’ : #直方图(数值频率分布)‘box’ : #箱型图‘kde’ : #密度图,主要对柱状图添加Kernel 概率密度线‘density’ : same as ‘kde’‘area’ : #与x轴所围区域图(面积图)。Stacked=True时,每列必须全部为正或负值,stacked=False时,对数据没有要求‘pie’ : #饼图。数值必须为正值,需指定Y轴或者subplots=True‘scatter’ : #散点图。需指定X轴Y轴‘hexbin’ : hexbin plot#蜂巢图。需指定X轴Y轴
一:
对数据进行可视化之前先要对数据进行分析,发现那些是我们需要的数据,并且数据之间有什么联系,我们可以从中得到什么价值(这是基础的一步也是很重要的一步)
总价、单价、面积、户型、地区,商品房、普通住宅、一梯两户、钢混结构、精装........
区域分析:是否是中心区域还是偏远区域,分析各个区域的二手房套数多少总价与单价分析:分析那个区域的二手房价格高,价格低,反应不同人对价格的心理价格区间,以及可以得出各个地区发展情况,是否位于中心路段面积大小分析: 分析是什么样的二手房面积居多,以及地区的面积差异房屋用途:分析是什么样的房屋用途最多,主要看普通住宅类型电梯:分析该二手房是否有电梯朝向:分析朝向是否符合中国建筑的坐北朝南,以及房屋朝向对房屋总价的影响建筑类型:分析房屋是塔楼还是板楼,知道房屋开发商喜欢什么类型的房子,以及得出什么的房子建筑是主流户型:分析二手房主流户型是什么,可以为不同的人提供不同的需求装修情况:对二手房的装修情况分析楼层位置:根据对二手房的楼层位置和总价的分析,可以看出低中高层楼房谁更受欢迎,谁的价钱更高房屋用途:分析房屋的用途大部分是拿来干什么
这些分析指标就是我们要分析的一些角度
二:
接下来具体对数据进行可视化
(1)这次用了函数来对数据进行读取
if __name__ == "__main__":if os.path.exists("./安居客_处理后.txt"):os.remove("./安居客_处理后.txt")srcfile = "../数据处理/安居客_处理后.txt"dstfile = "./安居客_处理后.txt"shutil.copy(srcfile, dstfile) # 移动文件print("移动文件 %s -> %s" % (srcfile, dstfile))
'''读取数据'''def getData():data = pd.read_csv("./安居客_处理后.txt", header=0, sep=';', encoding="utf-8")data.columns = ['编号','区县', '片区','小区名称','房屋单价','房屋总价','户型','面积','朝向','装修','建设时间','房屋属性','用途','产权','产权时间','唯一住房','中介公司','挂牌时间','楼层位置','楼层数','首付','月供']#data['房屋单价'] = data['房屋单价'].astype(float)#data['房屋总价'] = data['房屋总价'].astype(int)#data['面积'] = data['面积'].astype(int)# 图表中文显示plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)fig, ax = plt.subplots()return data
用def定义函数来获取文件内容(详细解释在代码中的注释中)
(2)接下来介绍3种数据可视化的方法
1.
'''各区县房源分布情况!!!柱状图'''def dataAnalysis1():data = getData()print(data['区县'].value_counts())#bar 垂直条形图#barh 水平条形图data['区县'].value_counts().plot(kind='bar', color=['green', 'red', 'blue', 'grey', 'pink'], alpha=0.5)plt.title('某市二手房各区、县房源分布信息!', fontsize=15)plt.xlabel('区、县名称', fontsize=15)plt.ylabel('房源数量', fontsize=15)plt.grid(linestyle=":", color="r")#x轴刻度旋转60度plt.xticks(rotation=60)#legend显示图例plt.legend()plt.show()
这是一个柱状图关于各区县房源分布情况
运行结果如下:
2.
'''房屋总价和总面积的关系图散点图'''def dataAnalysis4():data = getData()# 绘制总面积和总价的散点关系图home_area = data['面积']# print(home_area.head())total_price = data['房屋总价']# print(total_price.head())plt.scatter(home_area, total_price, s=3)plt.title('某市二手房总价和总面积关系', fontsize=15)plt.xlabel('房屋面积', fontsize=15)plt.ylabel('房源总价', fontsize=15)plt.grid(linestyle=":", color="r")plt.show()
这是一个散点图关于房屋总价和总面积的关系图
运行结果如下:
3.
'''楼层和房源数量的饼图饼状图'''def dataAnalysis8():data = getData()avg_price_louceng = data.groupby('楼层位置').count()['户型']print(avg_price_louceng)x = avg_price_louceng.indexy = avg_price_louceng.valuespie = Pie("楼层和房源数量的饼图")pie.add("", x, y, is_label_show=True)pie.render("pie.html")
这是一个饼图关于楼层和房源数量的关系图
运行结果如下:
以上三种就是对数据可视化进行处理的方法
我们关于对安居客二手房的项目就结束了,以上几篇文章希望对大家有所帮助(如有不足,敬请指正)
源代码如下:
'''Matplotlib库介绍plot(kind="绘图类型")绘图类型:‘line’ : #折线图‘bar’ : #条形图‘barh’ : #横向条形图‘hist’ : #直方图(数值频率分布)‘box’ : #箱型图‘kde’ : #密度图,主要对柱状图添加Kernel 概率密度线‘density’ : same as ‘kde’‘area’ : #与x轴所围区域图(面积图)。Stacked=True时,每列必须全部为正或负值,stacked=False时,对数据没有要求‘pie’ : #饼图。数值必须为正值,需指定Y轴或者subplots=True‘scatter’ : #散点图。需指定X轴Y轴‘hexbin’ : hexbin plot#蜂巢图。需指定X轴Y轴'''import osimport shutilimport pandas as pdfrom matplotlib import pyplot as pltfrom pyecharts import Pie#pip uninstall pyecharts#pip install pyecharts==0.1.9.5'''读取数据'''def getData():data = pd.read_csv("./安居客_处理后.txt", header=0, sep=';', encoding="utf-8")data.columns = ['编号','区县', '片区','小区名称','房屋单价','房屋总价','户型','面积','朝向','装修','建设时间','房屋属性','用途','产权','产权时间','唯一住房','中介公司','挂牌时间','楼层位置','楼层数','首付','月供']#data['房屋单价'] = data['房屋单价'].astype(float)#data['房屋总价'] = data['房屋总价'].astype(int)#data['面积'] = data['面积'].astype(int)# 图表中文显示plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)fig, ax = plt.subplots()return data'''各区县房源分布情况!!!柱状图'''def dataAnalysis1():data = getData()print(data['区县'].value_counts())#bar 垂直条形图#barh 水平条形图data['区县'].value_counts().plot(kind='bar', color=['green', 'red', 'blue', 'grey', 'pink'], alpha=0.5)plt.title('某市二手房各区、县房源分布信息!', fontsize=15)plt.xlabel('区、县名称', fontsize=15)plt.ylabel('房源数量', fontsize=15)plt.grid(linestyle=":", color="r")#x轴刻度旋转60度plt.xticks(rotation=60)#legend显示图例plt.legend()plt.show()'''各区县房源均价分布情况!!!柱状图(横)'''def dataAnalysis2():data = getData()data.groupby('区县').mean()['房屋单价'].sort_values(ascending=True).plot(kind='barh', color=['r', 'g', 'y', 'b'],alpha=0.5)plt.title('某市二手房各区、县房屋均价分布信息!', fontsize=15)plt.xlabel('房屋均价', fontsize=15)plt.ylabel('区县名称', fontsize=15)plt.grid(linestyle=":", color="r")plt.legend()plt.show()'''二手房户型情况柱状图'''def dataAnalysis3():data = getData()data['户型'].value_counts().plot(kind='bar', color=['green', 'red', 'blue', 'grey', 'pink'], alpha=0.5)plt.title('二手房房屋户型情况!', fontsize=15)plt.xlabel('房屋户型', fontsize=15)plt.ylabel('房源数量', fontsize=15)plt.grid(linestyle=":", color="r")plt.xticks(rotation=60)plt.legend()plt.show()'''房屋总价和总面积的关系图散点图'''def dataAnalysis4():data = getData()# 绘制总面积和总价的散点关系图home_area = data['面积']# print(home_area.head())total_price = data['房屋总价']# print(total_price.head())plt.scatter(home_area, total_price, s=3)plt.title('某市二手房总价和总面积关系', fontsize=15)plt.xlabel('房屋面积', fontsize=15)plt.ylabel('房源总价', fontsize=15)plt.grid(linestyle=":", color="r")plt.show()'''二手房装修情况柱状图'''def dataAnalysis5():data = getData()#value_counts:查看表格某列中有多少个不同值的快捷方法,并计算每个不同值有在该列中有多少重复值。data['装修'].value_counts().plot(kind='bar', color=['green', 'red', 'blue', 'grey', 'pink'], alpha=0.5)plt.title('二手房装修情况的房源分布信息!', fontsize=15)plt.xlabel('装修类型', fontsize=15)plt.ylabel('房源数量', fontsize=15)plt.grid(linestyle=":", color="r")plt.xticks(rotation=60)plt.legend()plt.show()'''二手房小区建成年份与小区均价分布信息散点图'''def dataAnalysis6XXXX():#(没有采集小区均价数据)data = getData()# 将小区建成时间转成日期并仅提取其中的年份print(data.建设时间)built_year = pd.to_datetime(data.小区建成).dt.year#print(built_year)# 绘制小区建成年限与小区均价的散点分布图plt.scatter(data.小区建成, data['小区均价'].astype(float), s=6)plt.title('某市二手房小区建成年份与均价分布信息!', fontsize=15)plt.xlabel('小区建成年份', fontsize=15)plt.ylabel('小区房屋均价', fontsize=15)plt.grid(linestyle=":", color="r")plt.xticks(rotation=0)plt.show()def ensure_float(x):print(x.index)for indexs in x.index:print(type(x[indexs]))print(x[indexs])#print(int(x[indexs]))'''楼层与房屋均价关系柱状图'''def dataAnalysis7():data = getData()#print(data["房屋单价"])ensure_float(data["房屋单价"])data.groupby('楼层位置').mean()['房屋单价'].sort_values(ascending=True).plot(kind='bar', color=['green', 'red', 'blue', 'grey', 'pink'], alpha=0.5)plt.title('二手房楼层与房屋均价分布信息!', fontsize=15)plt.xlabel('楼层信息', fontsize=15)plt.ylabel('房屋均价', fontsize=15)plt.grid(linestyle=":", color="r")plt.xticks(rotation=60)plt.legend()plt.show()'''楼层和房源数量的饼图饼状图'''def dataAnalysis8():data = getData()avg_price_louceng = data.groupby('楼层位置').count()['户型']print(avg_price_louceng)x = avg_price_louceng.indexy = avg_price_louceng.valuespie = Pie("楼层和房源数量的饼图")pie.add("", x, y, is_label_show=True)pie.render("pie.html")if __name__ == "__main__":if os.path.exists("./安居客_处理后.txt"):os.remove("./安居客_处理后.txt")srcfile = "../数据处理/安居客_处理后.txt"dstfile = "./安居客_处理后.txt"shutil.copy(srcfile, dstfile) # 移动文件print("移动文件 %s -> %s" % (srcfile, dstfile))#dataAnalysis1()#dataAnalysis2()#dataAnalysis3()#dataAnalysis4()#dataAnalysis5()#dataAnalysis6() #不可运行(未采集小区均价)#dataAnalysis7()dataAnalysis8()
如果觉得《安居客二手房python数据可视化》对你有帮助,请点赞、收藏,并留下你的观点哦!