SaveText.Ru

мое
  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt   # библиотека построения графиков
  4. import seaborn as sns             # библиотека визуализации статистики, высокоуровневая, на основе matplotlib
  5. df = pd.read_csv("real_estate_data.csv", sep=',')
  6. C:UsersKiddAnaconda3libsite-packagesIPythoncoreinteractiveshell.py:3049: DtypeWarning: Columns (9,14) have mixed types. Specify dtype option on import or set low_memory=False.
  7.   interactivity=interactivity, compiler=compiler, result=result)
  8. df.info() # список столбцов с указанием типа даных
  9. <class 'pandas.core.frame.DataFrame'>
  10. RangeIndex: 403487 entries, 0 to 403486
  11. Data columns (total 17 columns):
  12. id                   403487 non-null int64
  13. type                 403487 non-null object
  14. sub_type             403487 non-null object
  15. start_date           403487 non-null object
  16. end_date             266298 non-null object
  17. listing_type         403487 non-null int64
  18. tom                  403487 non-null int64
  19. building_age         376097 non-null object
  20. total_floor_count    375466 non-null object
  21. floor_no             368191 non-null object
  22. room_count           403487 non-null object
  23. size                 257481 non-null float64
  24. address              403487 non-null object
  25. furnished            0 non-null float64
  26. heating_type         375517 non-null object
  27. price                402772 non-null float64
  28. price_currency       402772 non-null object
  29. dtypes: float64(3), int64(3), object(11)
  30. memory usage: 35.4+ MB
  31. # первые строки из набора
  32. df.head()
  33. id      type    sub_type        start_date      end_date        listing_type    tom     building_age    total_floor_count       floor_no        room_count      size    address furnished       heating_type    price   price_currency
  34. 0       1       Konut   Rezidans        12/10/18        1/9/19  2       30      0       20 ve üzeri    2       2+1     90.0    İstanbul/Kartal/Kordonboyu     NaN     Fancoil 3500.0  TRY
  35. 1       2       Konut   Daire   2/13/19 NaN     1       14      0       20 ve üzeri    20 ve üzeri    1+0     43.0    İstanbul/Kartal/Kordonboyu     NaN     Fancoil 490000.0        TRY
  36. 2       3       Konut   Daire   10/9/18 11/8/18 1       30      0       1       Yüksek Giriş  2+1     NaN     Tekirdağ/Çorlu/Reşadiye      NaN     Fancoil 155000.0        TRY
  37. 3       4       Konut   Rezidans        9/10/18 10/10/18        1       30      3       20 ve üzeri    20 ve üzeri    6+1     450.0   İstanbul/Beşiktaş/Levent     NaN     Fancoil 32500000.0      TRY
  38. 4       5       Konut   Rezidans        12/10/18        1/9/19  1       30      0       20 ve üzeri    2       2+1     90.0    İstanbul/Kartal/Kordonboyu     NaN     Fancoil 1450000.0       TRY
  39. # размер датасета
  40. df.shape
  41. (403487, 17)
  42. # список колонок
  43. df.columns
  44. Index(['id', 'type', 'sub_type', 'start_date', 'end_date', 'listing_type',
  45.        'tom', 'building_age', 'total_floor_count', 'floor_no', 'room_count',
  46.        'size', 'address', 'furnished', 'heating_type', 'price',
  47.        'price_currency'],
  48.       dtype='object')
  49. df.describe().T
  50. # транспонированная матрица статистичесикх характеристик
  51. count   mean    std     min     25%     50%     75%     max
  52. id      403487.0        201744.000000   1.164768e+05    1.0     100872.5        201744.0        302615.5        4.034870e+05
  53. listing_type    403487.0        1.294235        4.677333e-01    1.0     1.0     1.0     2.0     3.000000e+00
  54. tom     403487.0        57.022739       4.435893e+01    0.0     29.0    40.0    90.0    1.800000e+02
  55. size    257481.0        279.349094      9.429195e+03    1.0     85.0    110.0   140.0   9.482350e+05
  56. furnished       0.0     NaN     NaN     NaN     NaN     NaN     NaN     NaN
  57. price   402772.0        354641.661933   4.809503e+06    -250.0  2500.0  199000.0        342000.0        2.000000e+09
  58. анализ пустых значений
  59. print(df.isna().sum()) # вывод количества неизвестных значений (NaN) в столбцах
  60. print(df.isna().sum() / len(df) * 100) # процент пропущенных значений в колонках
  61. id                        0
  62. type                      0
  63. sub_type                  0
  64. start_date                0
  65. end_date             137189
  66. listing_type              0
  67. tom                       0
  68. building_age          27390
  69. total_floor_count     28021
  70. floor_no              35296
  71. room_count                0
  72. size                 146006
  73. address                   0
  74. furnished            403487
  75. heating_type          27970
  76. price                   715
  77. price_currency          715
  78. dtype: int64
  79. id                     0.000000
  80. type                   0.000000
  81. sub_type               0.000000
  82. start_date             0.000000
  83. end_date              34.000848
  84. listing_type           0.000000
  85. tom                    0.000000
  86. building_age           6.788323
  87. total_floor_count      6.944709
  88. floor_no               8.747742
  89. room_count             0.000000
  90. size                  36.186048
  91. address                0.000000
  92. furnished            100.000000
  93. heating_type           6.932070
  94. price                  0.177205
  95. price_currency         0.177205
  96. dtype: float64
  97. Выводы
  98. колонка furnished содержит все значения Nan - удаляем, неинформативная
  99. колонка end_date = NaN - срок активности на рынке не окончен - нормально
  100. колонка size - 36% пропусков подумаем, что делать
  101. Удаляем колонку furnished
  102. df = df.drop(columns = "furnished")
  103. поиск дубликатов строк
  104. print(df.shape, df.drop_duplicates().shape)
  105. (403487, 16) (403487, 16)
  106. дубликатов - нет, все хорошо
  107.  
  108. Анализ значений по колонкам
  109. колонка type¶
  110. # разнообразные значения
  111. df["type"].unique()
  112. array(['Konut'], dtype=object)
  113. Konut = Housing - строения
  114.  
  115. колонка sub_type
  116. df["sub_type"].unique()
  117. array(['Rezidans', 'Daire', 'Villa', 'Müstakil Ev', 'Kooperatif',
  118.        'Yazlık', 'Komple Bina', 'Prefabrik Ev', 'Köşk / Konak / Yalı',
  119.        'Çiftlik Evi', 'Yalı Dairesi', 'Loft'], dtype=object)
  120. df["sub_type"].value_counts()
  121. Daire                  354549
  122. Villa                   21324
  123. Müstakil Ev              9563
  124. Rezidans                 7716
  125. Yazlık                   5929
  126. Komple Bina              2607
  127. Prefabrik Ev              679
  128. Çiftlik Evi               528
  129. Köşk / Konak / Yalı       301
  130. Yalı Dairesi              187
  131. Kooperatif                 70
  132. Loft                       34
  133. Name: sub_type, dtype: int64
  134. кодировка понятна только для первого значения "Daire = Flat"
  135.  
  136. колонка listing_type
  137. # разнообразные значения
  138. df["listing_type"].unique()
  139. array([2, 1, 3], dtype=int64)
  140. закодирована не как в описании - Satılık = Sale, Kiralık = Rent Будем разбираться
  141.  
  142. df["listing_type"].value_counts()
  143. 1    287009
  144. 2    114236
  145. 3      2242
  146. Name: listing_type, dtype: int64
  147. колонка tom - время на рынке
  148. df["tom"].value_counts()
  149. 30     82216
  150. 60     22325
  151. 0      11151
  152. 90      9868
  153. 61      6738
  154. 1       4855
  155. 120     4504
  156. 91      4333
  157. 62      4292
  158. 2       4255
  159. 7       4083
  160. 6       3894
  161. 5       3811
  162. 14      3762
  163. 4       3741
  164. 8       3730
  165. 21      3692
  166. 9       3655
  167. 13      3642
  168. 15      3357
  169. 12      3258
  170. 92      3235
  171. 63      3215
  172. 3       3004
  173. 11      2926
  174. 20      2914
  175. 22      2886
  176. 27      2875
  177. 19      2875
  178. 16      2862
  179.        ...  
  180. 149      700
  181. 159      687
  182. 160      679
  183. 144      671
  184. 166      657
  185. 162      641
  186. 108      637
  187. 167      637
  188. 129      612
  189. 174      597
  190. 168      585
  191. 175      565
  192. 163      565
  193. 170      530
  194. 176      521
  195. 115      521
  196. 165      501
  197. 173      496
  198. 158      494
  199. 169      468
  200. 172      465
  201. 177      464
  202. 180      457
  203. 136      422
  204. 179      379
  205. 143      313
  206. 157      287
  207. 164      210
  208. 178      196
  209. 171      158
  210. Name: tom, Length: 181, dtype: int64
  211. скорее всего дни
  212.  
  213. колонка building_age - возраст здания
  214. “arası” means between
  215.  
  216. df["building_age"].value_counts()
  217. 0              140174
  218. 6-10 arası      50495
  219. 11-15 arası     32309
  220. 16-20 arası     31333
  221. 1               20355
  222. 4               19032
  223. 21-25 arası     18438
  224. 2               17466
  225. 3               15651
  226. 5               13589
  227. 26-30 arası     10581
  228. 31-35 arası      4268
  229. 36-40 arası      1347
  230. 40 ve üzeri      1059
  231. Name: building_age, dtype: int64
  232. категориальная переменная - порядковая, надо перевести в отдельную нумерацию, если использовать далее
  233.  
  234. # словарь перевода - заменяем интервал на середину (6-10 -> 8, ...)
  235. d = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6-10 arası': 8, '11-15 arası': 13, '16-20 arası': 18, '21-25 arası': 23, '26-30 arası':28, '31-35 arası': 33,
  236.      '36-40 arası': 38, '40 ve üzeri': 50}
  237. df['building_age'] = df['building_age'].map(d)
  238. df['building_age'].value_counts()
  239. 0.0     140174
  240. 8.0      50495
  241. 13.0     32309
  242. 18.0     31333
  243. 1.0      20355
  244. 4.0      19032
  245. 23.0     18438
  246. 2.0      17466
  247. 3.0      15651
  248. 5.0      13589
  249. 28.0     10581
  250. 33.0      4268
  251. 38.0      1347
  252. 50.0      1059
  253. Name: building_age, dtype: int64
  254. колонка total_floor_count число этажей в здании
  255. df["total_floor_count"].value_counts()
  256. 4              83082
  257. 3              77956
  258. 5              70104
  259. 10-20 arası    36512
  260. 2              27742
  261. 6              23348
  262. 10             12558
  263. 7              12284
  264. 8              11207
  265. 9               9029
  266. 20 ve üzeri     6679
  267. 1               4965
  268. Name: total_floor_count, dtype: int64
  269. категориальная переменная - порядковая, надо перевести в отдельную нумерацию, если использовать далее
  270.  
  271. df["total_floor_count"].unique()
  272. array(['20 ve üzeri', '1', '10-20 arası', '4', '2', '3', '8', '7', '6',
  273.        '5', '10', nan, '9'], dtype=object)
  274. # словарь перевода - заменяем интервал на середину (6-10 -> 8, ...)
  275. d = {'1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '10':10, '10-20 arası': 15,
  276.      '20 ve üzeri': 25}
  277. df['total_floor_count'] = df['total_floor_count'].map(d)
  278. df['total_floor_count'].value_counts()
  279. 4.0     83082
  280. 3.0     77956
  281. 5.0     70104
  282. 15.0    36512
  283. 2.0     27742
  284. 6.0     23348
  285. 10.0    12558
  286. 7.0     12284
  287. 8.0     11207
  288. 9.0      9029
  289. 25.0     6679
  290. 1.0      4965
  291. Name: total_floor_count, dtype: int64
  292. колонка floor_no номер этажа для квартир
  293. df["floor_no"].value_counts()
  294. 2               60914
  295. 3               32200
  296. 1               28569
  297. Yüksek Giriş    24045
  298. Müstakil        21165
  299. 4               21049
  300. 3               20490
  301. Bahçe katı      19065
  302. 1               18187
  303. 4               13416
  304. 5               12495
  305. Giriş Katı      10431
  306. 5                8698
  307. 6                5116
  308. Kot 1            5036
  309. Kot 2            4987
  310. 2                4950
  311. 9                4855
  312. 6                4631
  313. 8                4608
  314. 7                4398
  315. 10               3863
  316. Kot 3            3793
  317. Çatı Katı        3566
  318. Zemin Kat        3441
  319. 7                3300
  320. Komple           2958
  321. 11               2894
  322. 12               2308
  323. Kot 4            2269
  324. 13               1702
  325. 20 ve üzeri      1563
  326. 8                1491
  327. 14               1328
  328. 15                911
  329. En Üst Kat        894
  330. Bodrum Kat        815
  331. 16                600
  332. 17                373
  333. 18                334
  334. Teras Kat         293
  335. 19                177
  336. Asma Kat           12
  337. 12                  1
  338. Name: floor_no, dtype: int64
  339. # словарь перекодировки по данным описания
  340. d = {'Yüksek Giriş':'1st floor', 'Giriş Katı': 'ground floor',
  341.      'Kot 1':'ground floor', 'Kot 2':'ground floor', 'Kot 3':'ground floor', 'Kot 4':'ground floor',
  342.      'Zemin Kat': 'ground floor', 'En Üst Kat':'ground floor', 'Bodrum Kat':'ground floor', 'Teras Kat':'ground floor',
  343.      'Asma Kat':'ground floor',
  344.      'Çatı Katı': 'penthouse apartment', 'Bahçe katı': 'garden floor flat',
  345.      '20 ve üzeri': 20,
  346.      '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '10':10,
  347.      '11': 11, '12': 12, '13': 13, '14': 14, '15': 15, '16': 16, '17': 17, '18': 18, '19': 19}
  348. df['floor_no'] =df['floor_no'].map(d)
  349. df['floor_no'].value_counts()
  350. 2                      60914
  351. ground floor           31971
  352. 1                      28569
  353. 1st floor              24045
  354. 3                      20490
  355. garden floor flat      19065
  356. 4                      13416
  357. 5                       8698
  358. 6                       5116
  359. 9                       4855
  360. 8                       4608
  361. 7                       4398
  362. 10                      3863
  363. penthouse apartment     3566
  364. 11                      2894
  365. 12                      2308
  366. 13                      1702
  367. 20                      1563
  368. 14                      1328
  369. 15                       911
  370. 16                       600
  371. 17                       373
  372. 18                       334
  373. 19                       177
  374. Name: floor_no, dtype: int64
  375. колонка heating_type
  376. df["heating_type"].value_counts()
  377. Kombi (Doğalgaz)                   204150
  378. Klima                               68197
  379. Merkezi Sistem (Isı Payı Ölçer)     30595
  380. Merkezi Sistem                      22855
  381. Kalorifer (Doğalgaz)                10928
  382. Soba (Kömür)                         8450
  383. Yerden Isıtma                        6958
  384. Yok                                  6098
  385. Kat Kaloriferi                       5655
  386. Kombi (Elektrikli)                   3449
  387. Soba (Doğalgaz)                      2602
  388. Güneş Enerjisi                       1754
  389. Kalorifer (Kömür)                    1503
  390. Jeotermal                            1418
  391. Fancoil                               495
  392. Kalorifer (Akaryakıt)                 410
  393. Name: heating_type, dtype: int64
  394. категориальная переменная - надо перекодировать в соответствии с описанием
  395.  
  396. Kalorifer (Doğalgaz) = central heating/natural gas,
  397. Kalorifer (Kömür) = central heating/coal,
  398. Kombi (Elektrikli) = combi boiler
  399. Klima = air-conditioning
  400. Kombi (Doğalgaz) = gas-combi boiler
  401. Merkezi Sistem = central heating
  402. Merkezi Sistem (Isı Payı Ölçer) =central heating
  403. Yerden Isıtma = floor heating
  404. Soba (Kömür) = heating stove/coal,
  405. Soba (Doğalgaz) = heating stove/natural gas
  406. Güneş Enerjisi = solar energy,
  407. Jeotermal = geothermal energy
  408. Fancoil = a type of air conditioner
  409. Kat Kaloriferi = central heating
  410. Kalorifer (Akaryakıt) = central heating/fuel oil
  411. Yok = None

Share with your friends:

Print