继上一篇安居客二手房的数据进行预处理后,接下来就可以对数据进行可视化。
我们需要用到的库有:
import os
import shutil
import pandas as pd
from matplotlib import pyplot as plt
from 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.index y = avg_price_louceng.values pie = 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 os
import shutil
import pandas as pd
from matplotlib import pyplot as plt
from 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.index
y = avg_price_louceng.values
pie = 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()