首页 > 编程语言 >Python爬虫————泉州二手房数据爬取和数据可视化

Python爬虫————泉州二手房数据爬取和数据可视化

时间:2023-06-06 23:11:42浏览次数:46  
标签:plt Python 爬虫 爬取 df pd import counts csv

1.选题的背景

我本次的主题是泉州二手房房价的调查分析。

首先通过爬虫采集链家网上所有二手房的房源数据,并对采集到的数据进行清洗;然后,对清洗后的数据进行可视化分析,探索隐藏在大量数据背后的规律;将这些房源大致分类,以对所有数据的概括总结。通过上述分析,我们可以了解到目前市面上二手房各项基本特征及房源分布情况,帮助我们进行购房决策。

2 需求分析

随着越来越多的城市二手住房成交量超越新房,诸多一、二线城市迎来“存量”住宅交易时代,承接绝大多数购房需求释放。另一方面,自去年上半年以来,新房供应持续短缺也给二手住房交易不断“复苏”创造空间,更多购房需求主动“转移”至存量市场。数据表现为今年以来重点城市挂牌量的持续小幅减少,二手房住宅成交量的触底回升以及重点城市如广州、重庆、武汉等,一、二手房住宅价格持续“倒挂”,都预示二手房市场正以卖方为主导。

二、主题式网络爬虫设计方案

1. 主题页面的结构与特征分析

2.Htmls 页面解析

四、网络爬虫程序设计

1.数据爬取与采集

 1 import requests
 2 from bs4 import BeautifulSoup
 3 import pandas as pd
 4 import time
 5 
 6 def getUrls():
 7     urls = []  # 列表
 8     baseUrl = "https://quanzhou.lianjia.com/ershoufang/fengzequ1/"
 9     for i in range(1, 100):  # 限制 100页 101
10         url = "{}pg{}".format(baseUrl, i)
11         urls.append(url)  # 把生成好的 url 添加到列表 urls 当中方便返回
12     return urls
13 
14 
15 def gethtmltext(url):
16     try:
17         r = requests.get(url, timeout=30)  # 发送请求
18         r.raise_for_status()
19         return r.text
20     except:
21         return ""
22 
23 
24 def ParsePage(html):
25     soup = BeautifulSoup(html, features="html.parser")
26     title = soup.select(".title a[data-el]")
27     positionInfo = soup.select(".positionInfo")  # 处理
28     houseInfo = soup.select(".houseInfo")  # 处理
29     followInfo = soup.select(".followInfo")  # 处理
30     totalPrice = soup.select(".totalPrice")  # 处理 万
31     unitPrice = soup.select(".unitPrice")  # 单价 xx 元/平米
32     tag = soup.find_all("div", attrs={"class": "tag"})  # 标签
33     count = len(title)  # 获取数据行
34     # 定义一个列表 用于存储一页的数据
35     data = []
36     # 格式打印
37     for i in range(count):
38         # 1.位置信息 根据 - 进行拆分
39         name = ""
40         region = ""
41         pos = str(positionInfo[i].text).split("-")
42         if len(pos) == 2:  # 小区名称,区域
43             name = pos[0]
44             region = pos[1]
45         # 2. 房屋的基本信息 houseInfo
46         info = str(houseInfo[i].text).split("|")
47         if len(info) != 6:
48             break
49         # 面积
50         info[1] = float(info[1].replace("平米", "").strip())
51         # 3. followInfo
52         focus_num = ""  # 关注人数
53         publish_time = ""  # 发布时间
54         f_info = str(followInfo[i].text).split("/")
55         if len(f_info) == 2:
56             focus_num = f_info[0]
57             publish_time = f_info[1]
58         # 4.万
59         total = str(totalPrice[i].text)
60         total = float(total.replace("万", "").strip())
61         # 5.单价 xx 元/平米
62         unit = str(unitPrice[i].text)
63         unit = unit.replace(",", "")
64         unit = str(unit.replace("单价", "").replace("元/平米", "").strip())
65         # 5. 标签 不定长标签
66         tag1 = tag[i].find_all("span")
67         tags = ""
68         for t in tag1:
69             tags += t.text + "   "
70             data.append([title[i].text, name, region,
71                     info[0], info[1], info[2], info[3], info[4], info[5],
72                     focus_num, publish_time,
73                      total, unit, tags])
74             return data
75 # 添加一个标题行
76 head = []
77 df = pd.DataFrame(head, columns=["标题", "名称", "区域", "户型", "面积", "朝向", "装修", "楼层", "结构", "关注", "时间", "总价", "单价", "标签"])
78 df.to_csv("data.csv", mode="a", header=True, index=False, encoding="utf-8")
79 x = getUrls()  # 返回值是一个列表
80 count = 1
81 for i in x:  # i 是每一个链接
82     html = gethtmltext(i)  # 用 html 保存获取到的网页的所有信息
83     # 解析每一页的数据
84     pagedata = ParsePage(html)  # 解析每一页  pagedata 存放的是一页的数据
85     # 把每一页数据写入文件
86     # 学习一个新的库  pandas 专门用来做数据处理 数据分析
87     # 把数据写入文件
88     df = pd.DataFrame(pagedata)  # DataFrame 数据帧 二维表格结构
89     df.to_csv("data.csv", mode="a", index=False, header=False, encoding="utf-8_sig")  # 追加
90     print("第{}页写入完毕!".format(count))
91     # print(html)
92     time.sleep(2)  # 延时等待两秒
93 count += 1

 

 

数据清洗

1 import  pandas as pd
2 
3 df = pd.read_csv("data.csv")
4 print(df.shape)
5 df =df.dropna()
6 df =  df.drop_duplicates()
7 print(df.shape)
8 print(df.describe())

 

 

关于面积

 

 1 import   pandas as  pd
 2 import   matplotlib.pyplot  as  plt
 3 #读进来是一个二维表格结构  DataFrame
 4 
 5 df = pd.read_csv("data.csv")  
 6 df =df.dropna()
 7 df =df.drop_duplicates()
 8 #统计
 9 counts = df.groupby(by="区域").count()  
10 plt.rcParams['font.sans-serif'] = 'SimHei'
11 ## 设置正常显示符号
12 
13 plt.rcParams['axes.unicode_minus'] = Falseplt.title("各个区域的房源数量分析")
14 plt.bar(counts.index,counts["标题"],label="数量")
15 plt.xticks(rotation=45)
16 plt.ylabel("数量")
17 plt.legend()
18 for  a,b in  zip(counts.index, counts["标题"]) :
19      plt.text(a,b+0.05,b, ha="center",va="bottom",fontsize=10,color="red")
20 plt.show()

户型线形图

 1 import   pandas as  pd
 2 import   matplotlib.pyplot  as  plt
 3 df = pd.read_csv("data.csv")  #读进来是一个二维表格结构  DataFrame
 4 df =df.dropna()
 5 df =df.drop_duplicates()
 6 counts = df.groupby(by="户型").count()  #统计
 7 plt.figure(facecolor='pink')
 8 plt.rcParams['font.sans-serif'] = 'SimHei'
 9 plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
10 plt.title("各种户型数量分析")
11 plt.plot(counts.index,counts["标题"],label="数量")
12 plt.xticks(rotation=45)
13 plt.ylabel("数量")
14 plt.legend()
15 for  a,b in  zip(counts.index, counts["标题"]) :
16      plt.text(a,b+0.05,b, ha="center",va="bottom",fontsize=10,color="green")
17 plt.show()

 

户型柱状图

 1 import pandas as pd
 2 import matplotlib.pyplot as plt
 3 
 4 df = pd.read_csv("data.csv")
 5 df = df.dropna()
 6 df = df.drop_duplicates()
 7 
 8 counts = df["户型"].value_counts().sort_index()
 9 
10 plt.figure(figsize=(10, 6))
11 plt.bar(counts.index, counts.values, color="#b3c6ff")
12 plt.xlabel("户型")
13 plt.ylabel("数量")
14 plt.title("户型统计")
15 plt.xticks(rotation=45)
16 plt.grid(axis="y")
17 plt.show()

 

朝向

 1 import   pandas as  pd
 2 import   matplotlib.pyplot  as  plt
 3 df = pd.read_csv("data.csv")  #读进来是一个二维表格结构  DataFrame
 4 df =df.dropna()
 5 df =df.drop_duplicates()
 6 counts = df.groupby(by="朝向").count()  #统计
 7 print(counts)
 8 plt.rcParams['font.sans-serif'] = 'SimHei'
 9 plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
10 plt.title("朝向统计")
11 plt.bar(counts.index,counts["标题"],label="数量")
12 plt.xticks(rotation=90)
13 plt.ylabel("数量")
14 plt.legend()
15 for  a,b in  zip(counts.index, counts["标题"]) :
16      plt.text(a,b+0.05,b, ha="center",va="bottom",fontsize=10,color="red")
17 plt.show()

 

双图共轴

 1 import pandas as pd
 2 import matplotlib.pyplot as plt
 3 
 4 df = pd.read_csv("data.csv")
 5 df = df.dropna()
 6 df = df.drop_duplicates()
 7 
 8 df["单价"] = pd.to_numeric(df["单价"], errors='coerce')
 9 df["总价"] = pd.to_numeric(df["总价"], errors='coerce')
10 
11 counts = df["单价"].groupby(df["区域"]).median()  # 统计
12 plt.rcParams['font.sans-serif'] = 'SimHei'
13 plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
14 fig = plt.figure()
15 ax = fig.add_subplot(111)
16 ax.bar(counts.index, counts.values, label="平均单价(元/平米)", color="#b3c6ff")
17 
18 ax2 = ax.twinx()
19 counts = df["总价"].groupby(df["区域"]).median()  # 统计
20 ax2.plot(counts.index, counts.values, label="总价(万)", color="red")
21 fig.legend(loc=1, bbox_to_anchor=(1,1), bbox_transform=ax.transAxes)  #防止图例变形
22 plt.show()

 

面积饼图

 1 import matplotlib.pyplot as plt
 2 import pandas as pd
 3 # 读取数据文件
 4 df = pd.read_csv("data.csv")
 5 df = df.dropna()
 6 df = df.drop_duplicates()
 7 df.isnull().any()
 8 # 分割面积数据为不同的区间
 9 divide=[0,30,50,70,90,120,140,160,1200]
10 # 获取面积列数据
11 cut= pd.cut(list(df["面积"]),divide)
12 data= cut.describe()
13 # print(data.columns)
14 # print(data.counts,data.freqs)
15 explode = (0.2, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0)
16 # 调整为与x的长度相同
17 
18 # 绘制扇形图
19 plt.pie(x=data.freqs, explode=explode, labels=data.index, autopct="%1.2f%%", startangle=45, radius=1)
20 plt.rcParams['font.sans-serif'] = 'SimHei'
21 plt.rcParams['axes.unicode_minus'] = False  ## 设置正常显示符号
22 plt.legend(loc='best')
23 plt.title("面积占比分析")
24 plt.show()

各个区域关注的人员统计全部代码

 1 import matplotlib.pyplot as plt
 2 import pandas as  pd
 3 df = pd.read_csv("data.csv")  # 读进来是一个二维表格结构  DataFrame
 4 df = df.dropna()
 5 df = df.drop_duplicates()
 6 def parse(x):
 7      if "人关注" in x:
 8           return   int(x.replace("人关注","").strip())
 9      else:
10           return  -1
11 df["关注"] =  df["关注"].apply(lambda x : parse(x) )
12 df  = df.drop( df[df["关注"]==-1 ].index )
13 plt.rcParams['font.sans-serif'] = 'SimHei'
14 plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
15 res =df["关注"].groupby(df["区域"]).sum()
16 plt.title("各个区域关注人数统计")
17 plt.xticks(rotation=45 )
18 plt.bar(res.index,res.values)
19 for  a,b in  zip(res.index, res.values) :
20      plt.text(a,b+0.05,b, ha="center",va="bottom",fontsize=10)
21 plt.show()

 

 

全部代码

  1 import requests
  2 from bs4 import BeautifulSoup
  3 import pandas as pd
  4 import time
  5 
  6 def getUrls():
  7     urls = []  # 列表
  8     baseUrl = "https://quanzhou.lianjia.com/ershoufang/fengzequ1/"
  9     for i in range(1, 100):  # 限制 100页 101
 10         url = "{}pg{}".format(baseUrl, i)
 11         urls.append(url)  # 把生成好的 url 添加到列表 urls 当中方便返回
 12     return urls
 13 
 14 
 15 def gethtmltext(url):
 16     try:
 17         r = requests.get(url, timeout=30)  # 发送请求
 18         r.raise_for_status()
 19         return r.text
 20     except:
 21         return ""
 22 
 23 
 24 def ParsePage(html):
 25     soup = BeautifulSoup(html, features="html.parser")
 26     title = soup.select(".title a[data-el]")
 27     positionInfo = soup.select(".positionInfo")  # 处理
 28     houseInfo = soup.select(".houseInfo")  # 处理
 29     followInfo = soup.select(".followInfo")  # 处理
 30     totalPrice = soup.select(".totalPrice")  # 处理 万
 31     unitPrice = soup.select(".unitPrice")  # 单价 xx 元/平米
 32     tag = soup.find_all("div", attrs={"class": "tag"})  # 标签
 33     count = len(title)  # 获取数据行
 34     # 定义一个列表 用于存储一页的数据
 35     data = []
 36     # 格式打印
 37     for i in range(count):
 38         # 1.位置信息 根据 - 进行拆分
 39         name = ""
 40         region = ""
 41         pos = str(positionInfo[i].text).split("-")
 42         if len(pos) == 2:  # 小区名称,区域
 43             name = pos[0]
 44             region = pos[1]
 45         # 2. 房屋的基本信息 houseInfo
 46         info = str(houseInfo[i].text).split("|")
 47         if len(info) != 6:
 48             break
 49         # 面积
 50         info[1] = float(info[1].replace("平米", "").strip())
 51         # 3. followInfo
 52         focus_num = ""  # 关注人数
 53         publish_time = ""  # 发布时间
 54         f_info = str(followInfo[i].text).split("/")
 55         if len(f_info) == 2:
 56             focus_num = f_info[0]
 57             publish_time = f_info[1]
 58         # 4.万
 59         total = str(totalPrice[i].text)
 60         total = float(total.replace("万", "").strip())
 61         # 5.单价 xx 元/平米
 62         unit = str(unitPrice[i].text)
 63         unit = unit.replace(",", "")
 64         unit = str(unit.replace("单价", "").replace("元/平米", "").strip())
 65         # 5. 标签 不定长标签
 66         tag1 = tag[i].find_all("span")
 67         tags = ""
 68         for t in tag1:
 69             tags += t.text + "   "
 70             data.append([title[i].text, name, region,
 71                     info[0], info[1], info[2], info[3], info[4], info[5],
 72                     focus_num, publish_time,
 73                      total, unit, tags])
 74             return data
 75 # 添加一个标题行
 76 head = []
 77 df = pd.DataFrame(head, columns=["标题", "名称", "区域", "户型", "面积", "朝向", "装修", "楼层", "结构", "关注", "时间", "总价", "单价", "标签"])
 78 df.to_csv("data.csv", mode="a", header=True, index=False, encoding="utf-8")
 79 x = getUrls()  # 返回值是一个列表
 80 count = 1
 81 for i in x:  # i 是每一个链接
 82     html = gethtmltext(i)  # 用 html 保存获取到的网页的所有信息
 83     # 解析每一页的数据
 84     pagedata = ParsePage(html)  # 解析每一页  pagedata 存放的是一页的数据
 85     # 把每一页数据写入文件
 86     # 学习一个新的库  pandas 专门用来做数据处理 数据分析
 87     # 把数据写入文件
 88     df = pd.DataFrame(pagedata)  # DataFrame 数据帧 二维表格结构
 89     df.to_csv("data.csv", mode="a", index=False, header=False, encoding="utf-8_sig")  # 追加
 90     print("第{}页写入完毕!".format(count))
 91     # print(html)
 92     time.sleep(2)  # 延时等待两秒
 93     count += 1
 94 import  pandas as pd
 95 
 96 df = pd.read_csv("data.csv")
 97 print(df.shape)
 98 df =df.dropna()
 99 df =  df.drop_duplicates()
100 print(df.shape)
101 print(df.describe())
102 import   pandas as  pd
103 import   matplotlib.pyplot  as  plt
104 
105 df = pd.read_csv("data.csv")  #读进来是一个二维表格结构  DataFrame
106 df =df.dropna()
107 df =df.drop_duplicates()
108 counts = df.groupby(by="区域").count()  #统计
109 plt.rcParams['font.sans-serif'] = 'SimHei'
110 plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
111 plt.title("各个区域的房源数量分析")
112 plt.bar(counts.index,counts["标题"],label="数量")
113 plt.xticks(rotation=45)
114 plt.ylabel("数量")
115 plt.legend()
116 for  a,b in  zip(counts.index, counts["标题"]) :
117      plt.text(a,b+0.05,b, ha="center",va="bottom",fontsize=10,color="red")
118 plt.show()
119 import matplotlib.pyplot as plt
120 import pandas as  pd
121 df = pd.read_csv("data.csv")  # 读进来是一个二维表格结构  DataFrame
122 df = df.dropna()
123 df = df.drop_duplicates()
124 def parse(x):
125      if "人关注" in x:
126           return   int(x.replace("人关注","").strip())
127      else:
128           return  -1
129 df["关注"] =  df["关注"].apply(lambda x : parse(x) )
130 df  = df.drop( df[df["关注"]==-1 ].index )
131 plt.rcParams['font.sans-serif'] = 'SimHei'
132 plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
133 res =df["关注"].groupby(df["区域"]).sum()
134 plt.title("各个区域关注人数统计")
135 plt.xticks(rotation=45 )
136 plt.bar(res.index,res.values)
137 for  a,b in  zip(res.index, res.values) :
138      plt.text(a,b+0.05,b, ha="center",va="bottom",fontsize=10)
139 plt.show()
140 import   pandas as  pd
141 import   matplotlib.pyplot  as  plt
142 df = pd.read_csv("data.csv")  #读进来是一个二维表格结构  DataFrame
143 df =df.dropna()
144 df =df.drop_duplicates()
145 counts = df.groupby(by="户型").count()  #统计
146 plt.figure(facecolor='pink')
147 plt.rcParams['font.sans-serif'] = 'SimHei'
148 plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
149 plt.title("各种户型数量分析")
150 plt.plot(counts.index,counts["标题"],label="数量")
151 plt.xticks(rotation=45)
152 plt.ylabel("数量")
153 plt.legend()
154 for  a,b in  zip(counts.index, counts["标题"]) :
155      plt.text(a,b+0.05,b, ha="center",va="bottom",fontsize=10,color="green")
156 plt.show()
157 import matplotlib.pyplot as plt
158 from wordcloud import WordCloud,ImageColorGenerator
159 text = open('data.csv', "r",encoding="utf-8").read()# 读取语料数据文件
160 background_img  = plt.imread("bg.jpg")# 读取背景图
161 wc = WordCloud(font_path="吉祥宋.ttf", background_color="white", mask=background_img)
162 wc.generate(text)# 生成词云
163 image_color = ImageColorGenerator(background_img)  # 从背景图片生成颜色值
164 wc.recolor(color_func=image_color)#对生成的图重新着色
165 wc.to_file("cloud.png")# 存储到文件
166 plt.imshow(wc)# 展示词云结果
167 plt.axis("off")
168 plt.show()
169 
170 import   pandas as  pd
171 import   matplotlib.pyplot  as  plt
172 df = pd.read_csv("data.csv")  #读进来是一个二维表格结构  DataFrame
173 df =df.dropna()
174 df =df.drop_duplicates()
175 counts = df.groupby(by="朝向").count()  #统计
176 print(counts)
177 plt.rcParams['font.sans-serif'] = 'SimHei'
178 plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
179 plt.title("朝向统计")
180 plt.bar(counts.index,counts["标题"],label="数量")
181 plt.xticks(rotation=90)
182 plt.ylabel("数量")
183 plt.legend()
184 for  a,b in  zip(counts.index, counts["标题"]) :
185      plt.text(a,b+0.05,b, ha="center",va="bottom",fontsize=10,color="red")
186 plt.show()
187 import pandas as pd
188 import matplotlib.pyplot as plt
189 
190 df = pd.read_csv("data.csv")
191 df = df.dropna()
192 df = df.drop_duplicates()
193 
194 df["单价"] = pd.to_numeric(df["单价"], errors='coerce')
195 df["总价"] = pd.to_numeric(df["总价"], errors='coerce')
196 
197 counts = df["单价"].groupby(df["区域"]).median()  # 统计
198 plt.rcParams['font.sans-serif'] = 'SimHei'
199 plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
200 fig = plt.figure()
201 ax = fig.add_subplot(111)
202 ax.bar(counts.index, counts.values, label="平均单价(元/平米)", color="#b3c6ff")
203 
204 ax2 = ax.twinx()
205 counts = df["总价"].groupby(df["区域"]).median()  # 统计
206 ax2.plot(counts.index, counts.values, label="总价(万)", color="red")
207 fig.legend(loc=1, bbox_to_anchor=(1,1), bbox_transform=ax.transAxes)  #防止图例变形
208 plt.show()
209 import matplotlib.pyplot as plt
210 import pandas as pd
211 # 读取数据文件
212 df = pd.read_csv("data.csv")
213 df = df.dropna()
214 df = df.drop_duplicates()
215 df.isnull().any()
216 # 分割面积数据为不同的区间
217 divide=[0,30,50,70,90,120,140,160,1200]
218 # 获取面积列数据
219 cut= pd.cut(list(df["面积"]),divide)
220 data= cut.describe()
221 # print(data.columns)
222 # print(data.counts,data.freqs)
223 explode = (0.2, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0)
224 # 调整为与x的长度相同
225 
226 # 绘制扇形图
227 plt.pie(x=data.freqs, explode=explode, labels=data.index, autopct="%1.2f%%", startangle=45, radius=1)
228 plt.rcParams['font.sans-serif'] = 'SimHei'
229 plt.rcParams['axes.unicode_minus'] = False  ## 设置正常显示符号
230 plt.legend(loc='best')
231 plt.title("面积占比分析")
232 plt.show()
233 import pandas as pd
234 import matplotlib.pyplot as plt
235 
236 df = pd.read_csv("data.csv")
237 df = df.dropna()
238 df = df.drop_duplicates()
239 
240 counts = df["户型"].value_counts().sort_index()
241 
242 plt.figure(figsize=(10, 6))
243 plt.bar(counts.index, counts.values, color="#b3c6ff")
244 plt.xlabel("户型")
245 plt.ylabel("数量")
246 plt.title("户型统计")
247 plt.xticks(rotation=45)
248 plt.grid(axis="y")
249 plt.show()
250 import pandas as pd
251 import matplotlib.pyplot as plt
252 
253 # 读取数据文件
254 df = pd.read_csv("data.csv", encoding="utf-8")
255 # 获取面积列数据
256 area = df["面积"].dropna().astype(float)
257 
258 # 分割面积数据为不同的区间
259 divide = [0, 30, 50, 70, 90, 120, 140, 160, 1200]
260 cut = pd.cut(area, divide)
261 
262 # 统计各区间的数量
263 area_counts = cut.value_counts()
264 
265 # 绘制扇形图
266 plt.pie(area_counts, labels=area_counts.index, autopct="%1.2f%%", startangle=45)
267 plt.axis("equal")  # 设置横纵轴相等,使扇形图为正圆形
268 plt.title("面积分布")
269 plt.show()
270 import pandas as pd
271 import matplotlib.pyplot as plt
272 
273 # 读取数据文件
274 df = pd.read_csv("data.csv", encoding="utf-8")
275 # 获取装修列数据
276 decoration = df["装修"].dropna().astype(str)
277 # 统计各装修类型的数量
278 decoration_counts = decoration.value_counts()
279 
280 # 绘制柱状图
281 plt.bar(decoration_counts.index, decoration_counts.values)
282 plt.xlabel("装修类型")
283 plt.ylabel("数量")
284 plt.title("装修类型统计")
285 plt.xticks(rotation=45)  # 旋转x轴刻度标签,避免重叠
286 plt.show()

 

五.总结

感谢我们专业课老师的悉心教导,是他在我们感到困惑的时候一遍又一遍给我们耐心的讲解,这让我们学到很多专业知识。

此次我的项目收集了泉州市二手房信息,在收集数据的时候我采用了python网络爬虫技术、python数据分析技术。数据分析的流程是需求分析,然后是数据获取,对获取的数据进行数据预处理。首先我采用统计分析的方法对数据进行初步分析,大致了解整体二手房的情况,交易量分析,区域特征分析,户型分析,装修方面分析,房屋朝向分析,房价分布及其影响因素;随后调用百度地图API,编程实现数据地图可视化,并获取了具体的地址和重要的距离数据。

我们要的不是数据,而是数据告诉我们的事实。大多数人面临这样一个挑战:我们认识到数据可视化的必要性,但缺乏数据可视化方面的专业技能。部分原因可以归结于,数据可视化只是数据分析过程中的一个环节,数据分析师可能将精力花在获取数据、清洗整理数据、分析数据、建立模型。

大多数时候我们汇报工作就是要做好解释性分析的工作。一个完整的数据可视化过程,主要包括以下4个步骤:确定数据可视化的主题;提炼可视化主题的数据;根据数据关系确定图表;进行可视化布局及设计。

 

标签:plt,Python,爬虫,爬取,df,pd,import,counts,csv
From: https://www.cnblogs.com/sgg0/p/17461625.html

相关文章

  • Python-变量交换
    前戏Python3的变量交换功能使得我们能够轻松交换两个变量的值,无需借助额外的临时变量。这种交换可以通过多重赋值语法实现,即将变量的值同时赋给另一个变量,从而实现值的交换。例如,以下代码展示了一个简单的变量交换示例:a=10b=20#交换变量的值a,b=b,aprint(a)#输......
  • Python爬虫--爬取当当网关于python的书籍
    (一)选题背景因为现如今的科技越来越发达,人们对于信息的获取道路变得更加宽广了,在以前的话,人们会受到空间,时间,科技等问题的阻碍,对于大部分知识只有在书籍当中才能够找到。不过随着现如今科技的进步,信息的载体也会变得越来越多,信息的传播方式也变得多种多样,电子书就可以通过图像......
  • python函数的位置参数和关键字参数
    基本类型:(1)位置参数(positional): 传参时不带"变量名=",顺序不可变, 需要按照函数定义时参数的顺序进行传参.(2)关键字参数(keyword):使用key=value形式传参, 传参时前面加上"变量名=",顺序可变,可以不按照函数定时参数的顺序进行传参.(3)可变位置参数(*args):......
  • 正则解析案例01__网页图片爬取
    趣图地址:https://www.gxt8.cn/gxtp01/1.正则表达式提取网页图片源码: 2.提取页面所有的图片地址后续将其拼接: 3.获取图片二进制_定义图片存储路径_图片二进制写入图片路径: ......
  • python-日记模块模板
    1"""2logging配置3"""45#定义三种日志输出格式开始6standard_format='[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'\7'[%(levelname)s][%(message)s]......
  • 实验6 turtle绘图与python库应用编程体验
    实验任务1task1_1fromturtleimport*defmoveto(x,y):'''画笔移动到坐标(x,y)处'''penup()goto(x,y)pendown()defdraw(n,size=100):'''绘制边长为size的正n边形'''for......
  • python笔记
    python官方文档6.6的代码:frommaiximportcamera,mjpg,displayimportsocket#host_name='192.168.4.1'shuzu=bytearray(57600)#bytes是不能被修改的#s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#地址簇:AF_INET(IPv4)类型:SOCK_STREAM(使用TCP传输控......
  • python opencv GaussianBlur
    pythonopencvGaussianBlur importcv2#Loadtheimageimg=cv2.imread('20230222100736979.jpg')#ApplyaGaussianblurwithakernelsizeof5x5blur=cv2.GaussianBlur(img,(5,5),0)#Displaytheoriginalandblurredimagessidebysi......
  • Python正则表达式学习(5)——re.findall()
    re.findall(pattern,string,flags=0)返回字符串中模式的所有非重叠匹配,作为字符串列表。字符串从左到右扫描,并按照找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组的列表;如果模式有多个组,这将是一个元组的列表。结果中包含空匹配,除非他们触及另一个匹配的开始。In[1......
  • Python正则表达式学习(4)——re.match() 和 re.search()
    Python提供了基于正则表达式的两种不同的原始操作:re.match()仅在字符串的开头检查匹配,只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none。re.search()检查字符串中任何位置的匹配例如:In[2]:re.match("c","absdbdfskdvc")In[3]:re.search("c","a......