范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Python分析北京市蛋壳公寓租房数据

  前言
  近期,蛋壳公寓"爆雷"事件持续发酵,期间因拖欠房东房租与租客退款,蛋壳公寓陷入讨债风波,全国多地蛋壳公寓办公区域出现大规模解约事件,而作为蛋壳公寓总部所在地北京,自然首当其冲。
  为了应对大规模的解约,北京在全市已经设立了100多个蛋壳公寓矛盾纠纷接待点,包含了蛋壳公寓涉及到的12个区,这些接待点下沉到了街道甚至社区,以方便涉及蛋壳公寓事件的房东和租客咨询和处理纠纷。
  长租公寓暴雷,不少年轻人不得不流离失所,构成疫情下的另一个经济写照,事态何去何从,值得关注。本文从数据角度出发,爬取了蛋壳公寓北京区域共6025条公寓数据,清洗数据,并进行可视化分析,为大家了解蛋壳公寓提供一个新的视角。 数据获取
  蛋壳公寓网页结构相对简单,数据结构统一,简单的url翻页构造即可。需要注意的是极少数网页会返回404,需要添加判断过滤掉。本文用request请求到数据,用xpath对返回的数据进行解析,最后以追加模式将数据存储为csv文件。爬虫核心代码如下: def get_danke(href):     time.sleep(random.uniform(0, 1))  #设置延时,避免对服务器产生压力     response = requests.get(url=href, headers=headers)     if response.status_code == 200:  #部分网页会跳转404,需要做判断         res = response.content.decode("utf-8")         p = etree.HTML(res)         items = p.xpath("/html/body/p[3]/p[1]/p[2]/p[2]")         for item in items:             house_price=item.xpath("./p[3]/p[2]/p/span/p/text()")[0]             house_area=item.xpath("./p[4]/p[1]/p[1]/label/text()")[0].replace("建筑面积:约","").replace("㎡(以现场勘察为准)","")             house_id=item.xpath("./p[4]/p[1]/p[2]/label/text()")[0].replace("编号:","")             house_type=item.xpath("./p[4]/p[1]/p[3]/label/text()")[0].replace(" ","").replace(" ","").replace("户型:","")             house_floor=item.xpath("./p[4]/p[2]/p[3]/label/text()")[0].replace("楼层:","")             house_postion_1=item.xpath("./p[4]/p[2]/p[4]/label/p/a[1]/text()")[0]             house_postion_2=item.xpath("./p[4]/p[2]/p[4]/label/p/a[2]/text()")[0]             house_postion_3=item.xpath("./p[4]/p[2]/p[4]/label/p/a[3]/text()")[0]             house_subway=item.xpath("./p[4]/p[2]/p[5]/label/text()")[0]     else:         house_price = None         house_area = None         house_id = None         house_type = None         house_floor = None         house_postion_1 = None         house_postion_2 = None         house_postion_3 = None         house_subway = None ......
  由于代码运行过程中中断了几次,最终将数据保存为以下几个csv文件中:
  数据处理 导入数据分析包 import pandas as pd import numpy as np from pathlib import Path import re 导入数据并合并
  找到文件夹中的所有csv文件,遍历读取数据,最后用concat方法合并所有数据。 files = Path(r"D:菜J学Python数据分析蛋壳公寓").glob("*.csv") dfs = [pd.read_csv(f) for f in files] df = pd.concat(dfs) df.head()
  数据去重
  数据爬取过程中有中断,因此可能存在重复爬取的情况,需要去重处理。 df = df.drop_duplicates() 查看数据
  用df.info()方法查看整体数据信息,结合预览的数据,我们可以很容易发现,价格和面积字段不是数字类型,需要转换处理。楼层字段可以提取出所在楼层和总楼层。 df.info()          Int64Index: 6026 entries, 0 to 710     Data columns (total 9 columns):      #   Column  Non-Null Count  Dtype      ---  ------  --------------  -----       0   价格      6025 non-null   object      1   面积      6025 non-null   object      2   编号      6025 non-null   object      3   户型      6025 non-null   object      4   楼层      6025 non-null   object      5   位置1     6025 non-null   object      6   位置2     6025 non-null   object      7   小区      6025 non-null   object      8   地铁      6025 non-null   object     dtypes: object(9)     memory usage: 470.8+ KB 数据类型转换
  在字段类型转换时报错,检查发现是数据存在一行脏数据,因此先删除脏数据再做转换即可。数据类型转换用到astype()方法,提取所在楼层和总楼层时根据字符"/"分列即可,采用split()方法。 #删除包含脏数据的行 jg = df["价格"] != "价格"  df = df.loc[jg,:]  #将价格字段转为数字类型 df["价格"] = df["价格"].astype("float64")  #将面积字段转为数字类型 df["面积"] = df["面积"].astype("float64")  #提取所在楼层 df = df[df["楼层"].notnull()] df["所在楼层"]=df["楼层"].apply(lambda x:x.split("/")[0]) df["所在楼层"] = df["所在楼层"].astype("int32")  #提取总楼层 df["总楼层"]=df["楼层"].apply(lambda x:x.split("/")[1]) df["总楼层"] = df["总楼层"].str.replace("层","").astype("int32") 地铁字段清洗
  地铁字段可以提取出地铁数和距离地铁距离。地铁数通过统计字符"号线"的数量来计算,而距离地铁距离通过正则表达式匹配出字符"米"前面的数字即可。为方便理解,这里直接构造函数进行清洗。 def get_subway_num(row):     subway_num=row.count("号线")     return subway_num  def get_subway_distance(row):     distance=re.search(r"d+(?=米)",row)     if distance==None:         return-1     else:         return distance.group() df["地铁数"]=df["地铁"].apply(get_subway_num) df["距离地铁距离"]=df["地铁"].apply(get_subway_distance) df["距离地铁距离"]=df["距离地铁距离"].astype("int32") 保存数据
  数据清洗完毕后,用df.to_excel()将数据保存为excel文件。 df.to_excel(r"菜J学Python数据分析蛋壳公寓.xlsx") df.head()
  数据可视化 导入可视化相关包 import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline plt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置加载的字体名 plt.rcParams["axes.unicode_minus"] = False# 解决保存图像是负号"-"显示为方块的问题  import jieba from pyecharts.charts import * from pyecharts import options as opts  from pyecharts.globals import ThemeType   import stylecloud from IPython.display import Image 各行政区公寓数量
  根据清洗后的数据绘制北京蛋壳公寓分布地图,我们可以很清晰的看到蛋壳公寓的布局,朝阳区和通州区是蛋壳公寓主要分布区域,延庆、密云、怀柔、平谷和门头沟地区蛋壳公寓分布极少。
  从各行政区数量上来看,朝阳区和通州区蛋壳公寓数量均超过1000个,朝阳区遥遥领先其他地区,共计1877个,通州区紧随其后,为1027个。 df7 = df["位置1"].value_counts()[:10] df7 = df7.sort_values(ascending=True) df7 = df7.tail(10) print(df7.index.to_list()) print(df7.to_list()) c = (     Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))     .add_xaxis(df7.index.to_list())     .add_yaxis("",df7.to_list()).reversal_axis() #X轴与y轴调换顺序     .set_global_opts(title_opts=opts.TitleOpts(title="各行政区公寓数量",subtitle="数据来源:蛋壳公寓 	制图:菜J学Python",pos_left = "left"),                        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13)), #更改横坐标字体大小                        yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13)), #更改纵坐标字体大小                        )     .set_series_opts(label_opts=opts.LabelOpts(font_size=16,position="right"))     ) c.render_notebook()
  小区公寓数量TOP10
  从小区数量来看,新建村小区、花香东苑和连心园西区蛋壳公寓数量最多,均超过50个。这也意味着,这些小区的租户受蛋壳风波的影响相较于其他小区更大。 df7 = df["小区"].value_counts()[:10] df7 = df7.sort_values(ascending=True) df7 = df7.tail(10) print(df7.index.to_list()) print(df7.to_list()) c = (     Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK,width="1100px",height="600px"))     .add_xaxis(df7.index.to_list())     .add_yaxis("",df7.to_list()).reversal_axis() #X轴与y轴调换顺序     .set_global_opts(title_opts=opts.TitleOpts(title="小区公寓数量TOP10",subtitle="数据来源:蛋壳公寓 	制图:菜J学Python",pos_left = "left"),                        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=11)), #更改横坐标字体大小                        yaxis_opts=opts.AxisOpts(axislabel_opts={"rotate":30}), #更改纵坐标字体大小                        )     .set_series_opts(label_opts=opts.LabelOpts(font_size=16,position="right"))     ) c.render_notebook()
  蛋壳公寓租金分布
  对租金进行区间分段,我们发现,北京蛋壳公寓的租金还是相当有吸引力的,超过一半的公寓租金在2000-3000元/月。2000元/月以下的公寓数量占比也高达26.13%。 #租金分段 df["租金分段"] = pd.cut(df["价格"],[0,1000,2000,3000,4000,1000000],labels=["1000元以下","1000-2000元","2000-3000元","3000-4000元","4000元以上"],right=False) df11 = df["租金分段"].value_counts() df11 = df11.sort_values(ascending=False) df11 = df11.round(2) print(df11) c = (         Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))         .add(             "",             [list(z) for z in zip(df11.index.to_list(),df11.to_list())],             radius=["20%", "80%"],   #圆环的粗细和大小             rosetype="area"           )         .set_global_opts(legend_opts = opts.LegendOpts(is_show = False),title_opts=opts.TitleOpts(title="蛋壳公寓租金分布",subtitle="数据来源:蛋壳公寓 制图:菜J学Python",pos_top="0.5%",pos_left = "left"))         .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%",font_size=16))     ) c.render_notebook()
  各行政区租金分布
  我们继续将地区因素引入租金分析中,发现,不同行政区内的租金分布也存在较大差异。以朝阳区为例,2000-3000元/月的公寓占比最多,而通州区1000-2000元/月的公寓占比更多。这也很容易理解,毕竟所处的区位和经济发展状况差异较大。 h = pd.pivot_table(df,index=["租金分段"],values=["价格"],                columns=["位置1"],aggfunc=["count"]) k = h.droplevel([0,1],axis=1)  #删除指定的索引/列级别 c = (     Polar(init_opts=opts.InitOpts(theme=ThemeType.DARK))     .add_schema(angleaxis_opts=opts.AngleAxisOpts(data=k.columns.tolist(), type_="category"))     .add("1000以下",h.values.tolist()[0], type_="bar", stack="stack0")     .add("1000-2000元",h.values.tolist()[1], type_="bar", stack="stack0")     .add("2000-3000元", h.values.tolist()[2], type_="bar", stack="stack0")     .add("3000-4000元", h.values.tolist()[3], type_="bar", stack="stack0")     .add("4000元以上", h.values.tolist()[4], type_="bar", stack="stack0")     .set_global_opts(title_opts=opts.TitleOpts(title="各行政区租金情况",subtitle="数据来源:蛋壳公寓 制图:菜J学Python"))  ) c.render_notebook()
  蛋壳公寓楼层分布
  从北京蛋壳公寓的楼层分布来看,10层以下占比高达73.92,高层和超高层不是蛋壳公寓的理想选择。 # 漏斗图  df["楼层分段"] = pd.cut(df["所在楼层"],[0,10,20,30,40,1000000],labels=["10层以下","10-20层","20-30层","30-40层","40层以上"],right=False) count = df["楼层分段"].value_counts() # pd.Series print(count) job = list(count.index) job_count = count.values.tolist() from pyecharts.charts import Funnel  c = (     Funnel(init_opts=opts.InitOpts(theme=ThemeType.DARK))     .add("", [list(i) for i in zip(job,job_count)])     .set_global_opts(         title_opts=opts.TitleOpts(title="蛋壳公寓楼层分布",subtitle="数据来源:蛋壳公寓 制图:菜J学Python",pos_top="0.1%",pos_left = "left"),legend_opts = opts.LegendOpts(is_show = False))     .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%",font_size=16)) ) c.render_notebook()
  蛋壳公寓户型分布
  从北京蛋壳公寓的户型分布来看,3室1卫为主,共计2783个,其次才是4室1卫。这与深圳蛋壳公寓以4室1卫为主的情况存在较大差异。 df2 = df.groupby("户型")["价格"].count()  df2 = df2.sort_values(ascending=False)[:10] # print(df2) bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) bar.add_xaxis(df2.index.to_list()) bar.add_yaxis("",df2.to_list()) #X轴与y轴调换顺序 bar.set_global_opts(title_opts=opts.TitleOpts(title="蛋壳公寓户型分布",subtitle="数据来源:蛋壳公寓	制图:菜J学Python",pos_top="2%",pos_left = "center"),                    xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改横坐标字体大小                    yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改纵坐标字体大小                    ) bar.set_series_opts(label_opts=opts.LabelOpts(font_size=16,position="top")) bar.render_notebook()
  蛋壳公寓面积分布
  从北京蛋壳公寓的面积分布来看,86.77%的公寓面积不足20㎡。北京10㎡以下的蛋壳公寓占比达到了21.2%,即便如此,这个数字仍不足深圳的一半。 df["面积分段"] = pd.cut(df["面积"],[0,10,20,30,40,1000000],labels=["10㎡以下","10-20㎡","20-30㎡","30-40㎡","40㎡以上"],right=False) df2 = df["面积分段"].astype("str").value_counts() print(df2) df2 = df2.sort_values(ascending=False) regions = df2.index.to_list() values = df2.to_list() c = (         Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))         .add("", list(zip(regions,values)))         .set_global_opts(legend_opts = opts.LegendOpts(is_show = False),title_opts=opts.TitleOpts(title="蛋壳公寓面积分布",subtitle="数据来源:蛋壳公寓 制图:菜J学Python",pos_top="0.5%",pos_left = "left"))         .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%",font_size=14))              ) c.render_notebook()
  蛋壳公寓商圈分布
  通过对北京几个主要行政区商圈进行词云统计(字体越大表示蛋壳公寓数量最多),朝阳区的管庄、望京,通州区的北关,丰台区的樊羊路、方庄和角门,昌平区的天通苑,海淀区的永丰和西二旗,大兴区的黄村和亦庄,是蛋壳公寓主要选择的商圈。 # 绘制词云图 text1 = get_cut_words(content_series=df1["位置2"]) stylecloud.gen_stylecloud(text=" ".join(text1), max_words=100,                           collocations=False,                           font_path=r"C:WINDOWSFONTSMSYH.TTC",                           icon_name="fas fa-home",                           size=653,                           palette="cartocolors.perging.ArmyRose_2",                           output_name="./1.png") Image(filename="./1.png")
  相关性分析
  从相关系数表可以看出,北京蛋壳公寓的面积、周边地铁数对公寓的价格有较大的的影响,相关系数分别为0.81和0.36。蛋壳公寓在进行房屋定价时,对公寓的面积以及公寓的地铁配套有较大权重的考虑。由于北京蛋壳公寓距离地铁都很近,因此,距离的远近对公寓的价格影响有限。另外,所在楼层也不是北京蛋壳公寓租金高低的重要影响因素。 color_map = sns.light_palette("orange", as_cmap=True)  #light_palette调色板 df.corr().style.background_gradient(color_map)
  最后,愿所有受蛋壳公寓"暴雷"事件影响的年轻人都能熬过这个寒冬。
  加入专业的授课老师,带你从小白走进数据分析开发的大门。
  扣丁学堂-python学习交流群:943406067
  微信号:codingbb

跨境电商线上分享会在深圳举行来源人民网人民网深圳8月25日电(王星)8月25日,汇聚全球力跨境变通途跨境电商线上分享会在深圳举行,逾千家跨境电商企业代表在线观看。跨境电子商务已成为新常态下培育经济增长新动力创苹果iPadmini6最新渲染图,全面屏设计加A14处理器,价格相当感人苹果的iPadmini6从去年下半年就一直有渲染图出现,但其实并没有供应链方面的信息进行佐证,但是近期不管是苹果秋季新品发布会方面的消息,还是iPadmini6的模具出现,其实都是9元5G的背后,民营运营商何去何从?三大运营商获得5G商用许可已有两年的时间,在这两年间,民间关于5G的议论从来没有停下来过,尤其是在5G流量这一方面。在当初三大运营商首次推出5G流量套餐的时候,三大运营商的举动可以美国打压华为,为什么我们不能打压苹果?美国疯狂地打压华为,最新的华为p50手机,连5g功能都没有。有人叫嚣着,要对美国进行同等报复,你不是打压我们华为吗?那我们就禁售苹果。其实,这万万不可取!国家之间的博弈,背后都是深三星又烧起来了,这次在中国会召回吗?现在想想GalaxyNote7的噩梦还历历在目,2016年因电池缺陷这款手机出现了数十起手机爆炸或爆燃事件,在全球召回设备的同时却屏蔽了中国市场。这一举动让三星在中国的销量断崖式下适合学生党平价又高性价比的三款手机,配置还是价格都很不错开学的时间越来越近啦小伙伴们是不是都开始准备开学必备的物件了呢?新学期新气象,玩了一个暑假卡顿的手机咱们也该换换了吧!今天小编就给大家分享几款适合咱们学生党平价又高性价比的手机型号再次打脸,腾讯防沉迷组合拳再见成效,谁说腾讯靠小学生吃饭?腾讯靠小学生吃饭?游戏对于大多数人来说都只是消遣时间,放松身心的产品。但像一些年龄较小的学生群体,自制力不强,便容易沉迷其中。你是否有看过这样的新闻,小学生玩游戏隐瞒父母充值上万块2nm芯片关键材料已确认,美国学者中国是最大赢家,华为赢了随着物联网时代的到来,人类的生存环境即将被智能电子产品包围,生活也将更加的便利,作为绝大多数电子产品核心组件的芯片,地位也越来越高,已成为大国之间展开较量的新战场。芯片被誉为现代工懂行人周知的好手机,当前这三款最超值,买到就是赚到马上就到秋季了,最近不仅是厂家更新旗舰手机的大热时间,更是一个置换手机的黄金时间,因为这正是一个拥有丰富选择的时机。那么今天我就来给大家推荐几款我心目中的超值手机,供给大家参考。i三星进入高通美国后院,将为谷歌Pixel6Pro新旗舰手机供应5G基带北京时间8月26日前,谷歌公司将让三星电子为其下一代Pixel旗舰智能机供应5G基带。在高通主导的美国市场,这将是三星打下的首场胜仗。三星5G基带芯片谷歌在本月稍早的时候表示,已经辟谣了,华为nova9系列依然只支持4G网P50系列之后,华为已经在筹备下一款新机,定位年轻人的nova9系列,目前已经入网工信部。从入网信息来看,该系列仅支持LTE网络,也就是全系4G,原因也是众所周知,应该是和P50系
为何手机市场缩水严重?国内云科技ToDesk市场空间不敢想象1月29日,StrategyAnalytics的最新研究显示,2021年全年中国智能手机出货量为3。293亿部,同比下滑2。相对几年前移动智能设备的爆发式增长,目前手机市场已经进入堵不住了!力通通信破冰5G射频芯片,打压华为的后果显现点击关注,每天精彩不断!导读堵不住了!力通通信破冰5G射频芯片,打压华为的后果显现!对于现代科技领域的发展来说,半导体集成电路芯片无疑是十分重要的而华为公司的任正非早在2004年就IDC数据起争议,vivo第一没问题,荣耀排第几才是关键近一段时间全球各大调研公司的数据出现一个井喷期,其中大家最期待的是IDC的数据。因为一般情况之下行业都认为IDC的数据是最权威的,那么今天我们就来解读下IDC发布的2021年国内全FF自曝真实订单数据1。4万辆预订中仅300辆为付费预订澎湃新闻记者范佳来法拉第未来(FaradayFuture,以下简称FF)公布了FF91的付费预订数据300台。2月9日,FF相关负责人告诉澎湃新闻记者,FF的预订包含收费预订单和免孝道科技完成数千万元的首轮融资36氪获悉,安全玻璃盒孝道科技近日宣布完成数千万元的首轮融资。本轮融资由国内安全上市公司安恒信息主投。本轮融资后,公司将把资金将用于DevSecOps软件供应链安全及云原生应用安全全球芯片设计巨头或独立上市,券商称产业链设备有望超万亿台此前ARM芯片出货量高达250亿颗。今日重要性据经济观察网报道,当地时间周一,软银以660亿美元将英国芯片企业ARM出售给英伟达的交易以失败告终,另外软银开始寻求推动ARM独立上市喜报!极光(JG。US)荣获2021中国软件和信息服务业年度SaaS行业领军企业近日,2021第五届中国软件和信息服务业年度风云榜评选结果正式发布。中国领先的开发者服务提供商,极光(AuroraMobile,纳斯达克股票代码JG)凭借2021年在SaaS行业取好物推荐11期戴森都怕的吸尘器HiFi手机解码耳放减压啪啪牌包罗万象,各种好物科技指南帮你搜一搜,这期好物推荐为大家推荐三款不同类型的产品石头H7无线手持吸尘器,有些细节戴森都赶不上给手机音乐加上个小尾巴,音质提升更明显,山灵UA5小尾巴H25003000元段手机型推荐,有拍照够用性能有质感,看有适合的吗1。小米10s基本信息1。CPU。搭载高通骁龙870处理器(对比骁龙888,骁龙8)功耗发热要好点,2相机。一亿像素增加细节,3音质。哈曼卡顿调教对称式杨声器听着更爽,4充电。303000元内8256手机推荐?3000元内8256手机推荐?作为女生用,小米civi5G的价格为2469元钱,是2021年9月份上市的一款手机,就掌握的信息分析,这款新机应该是主打女性消费者市场,正所谓颜值在线你手机里有没有一张拍的特别有家乡韵味的照片?新兴农业讯猛发展,农村土地50被能人承包,统一管理机械化,无人机正在给小麦打药,三个人一天打上百亩,省心,省力,省倒伏,最省的是钱。土地有了生机,农民有了安居,后继有人,祖国昌盛!