デザイン演習第7回

< 

課題 賃貸情報の個人分析

      大学生の一人暮らしで多い間取りを調べたところ、1Kが一番人気でした。
   
    https://suumo.jp/article/oyakudachi/oyaku/chintai/fr_data/f0scj000/
   1Kの家賃相場を調べてみました。
  

1Kの家賃相場

 

家賃は6万円以下、階数は2階以上、管理費が5千円以下になるように条件を絞りました。
 
礼金はなしという条件で絞りました。

面積

大学生の一人暮らしの部屋の広さはどのくらいなのか調べたところ、部屋の広さは15m2~20m2が多いという結果になりました。

https://suumo.jp/article/oyakudachi/oyaku/chintai/fr_data/f0scj000/
部屋は広すぎても掃除が大変なので広くても25m2がちょうどいいと思います。
そこまで家に居ない人、荷物が多くない人、寝る場所と作業スペースがあればいい人などは
15m2くらいの広さでも良いのではないかと思います。
家賃6万円の部屋の広さが気になったのでヒストグラムにしてみました。

部屋の広さの理想は20m2前後で、20m2あれば十分だったので、家賃6万円以下で十分な広さの物件があることが分かりました。

通学時間の条件

通学時間は最寄駅から徒歩10分以内で合計時間が30分以内という条件にしました。

だいぶ絞り込む事ができました。
以上の条件に合うおすすめの最寄駅を上位10件に絞りました。

おすすめの最寄駅のヒストグラム  

ソースコード

  1. import pandas as pd # データ分析に用いるライブラリ
  2. import matplotlib.pyplot as plt # グラフ表示に用いるライブラリ
  3. pd.set_option('display.unicode.east_asian_width', True) # 表示のずれを少し緩和
  4. plt.rcParams['font.family'] = 'IPAexGothic' # グラフ表示におけるフォントの指定
  5. data_path = "./data.csv"
  6. df_data = pd.read_csv(data_path, encoding="utf-8-sig")
  7. print(df_data.columns)
  8. print("物件数", len(df_data), "件")
  9. # 1K全体の相場を調べる---------------------------------------
  10. mask=(df_data["間取り"]=="1K")
  11. df_selected_roomtype=df_data[mask]
  12. df_selected_roomtype.loc[:, "家賃"].hist(range=(0,20),bins=40)
  13. plt.xlabel("1K家賃(万円)") # 横軸のラベル
  14. plt.ylabel("件数") # 縦軸のラベル
  15. plt.xlim(0, 15)
  16. plt.title("1K家賃のヒストグラム") # グラフのタイトル
  17. plt.show()
  18. mask = (df_selected_roomtype['家賃'] <= 6) & (df_selected_roomtype['階数'] >= 2) & (df_selected_roomtype['管理費'] >= 0.5)
  19. # 絞った内容ををfilter_dfに入れる
  20. filter_df = df_selected_roomtype[mask]
  21. print("家賃と階数と管理費で絞り込んだ結果", len(filter_df), "件")
  22. # 礼金はあってもいいですか?
  23. key_money = input('礼金はあってもいいですか? y or n')
  24. if key_money == 'n':
  25.     # バスなしであれば、バスは0
  26.     key_money_num = 0
  27. else:
  28.     # とりあえずありえない数字を入れておく
  29.     bus_num = 10000
  30. mask = (filter_df['礼金'] <= key_money_num )
  31. # filter_dfをさらに礼金の有無で絞り込み
  32. filter_df = filter_df[mask]
  33. print("家賃、階数、管理費、礼金の有無で絞り込んだ結果", len(filter_df), "件")
  34. # 家賃6万円以下の部屋の広さ---------------------------------------------------
  35. filter_df.loc[:, "面積"].hist(range=(0,50),bins=50)
  36. plt.xlabel("面積") # 横軸のラベル
  37. plt.ylabel("件数") # 縦軸のラベル
  38. plt.xlim(0, 50)
  39. plt.title("家賃6万円以下の物件:面積ヒストグラム") # グラフのタイトル
  40. plt.show()
  41. # # 通学時間(分)
  42. mask = (filter_df['合計時間'] <= 30)&(filter_df['徒歩'] <= 10)
  43. # filter_dfをさらに合計時間と徒歩で絞り込む(filter_dfを上書き)
  44. filter_df = filter_df[mask]
  45. print("家賃、階数、管理費、礼金の有無,通学時間で絞り込んだ結果", len(filter_df), "件")
  46. # 条件にあう分件が多い駅top10を表示
  47. filter_top10_df = filter_df.groupby(['駅'])['駅'].count().sort_values(ascending=False).head(10)
  48. flag = True
  49. while (flag):
  50.     print('あなたにおすすめの駅は')
  51.     print(filter_top10_df)
  52.     #  条件に合致する物件数が多い上位10の駅を「おすすめ駅」とする
  53.     # 絞り込んだ結果をさらに「おすすめ駅」で絞り込み
  54.     mask = filter_df['駅'].isin(filter_top10_df.index)
  55.     # filter_dfからおすすめ駅に絞り込んだ結果をfilter_top10_station_dfに入れる
  56.     filter_top10_station_df = filter_df[mask]
  57.     axes = filter_top10_station_df.loc[:, "家賃"].hist(by=filter_top10_station_df.loc[:, "駅"],
  58.                                                      range=(rent_lower, rent_upper), bins=10,
  59.                                                      figsize=(10, 8),
  60.                                                      sharex=True, sharey=True)
  61.     for ax in axes.reshape(-1):
  62.         ax.grid(b=True) # グリッドを表示
  63.         ax.set_xlabel("家賃(万円)") # 横軸のラベル
  64.         ax.set_ylabel("件数") # 縦軸のラベル
  65.     plt.suptitle("おすすめ駅:家賃のヒストグラム(家賃制限内)") # グラフ全体のタイトル
  66.     plt.subplots_adjust(top=0.92, # グラフ位置の微調整
  67.                         hspace=0.3) # グラフ間の微調整
  68.     plt.show()