Xin chào các member Mì AI và chúc cả nhà một tuần làm việc hiểu quả nhé. Hôm nay chúng ta sẽ “nghịch” (phân tích nhẹ nhàng) và chia sẻ dữ liệu giá nhà đất 02 tháng gần nhất.
Đầu tiên là mình xin nói qua một chút là mình không chuyên về món Khoa học dữ liệu nên đây chỉ là vài lệnh cơ bản, mình chia sẻ cho các bạn newbie cùng học, tham khảo thôi. Mong các cao thủ góp ý thêm.
Phần 1 – Tìm hiểu dữ liệu
Dữ liệu ở đây mình đã tiến hành crawl từ trên một trang mua bán nhà đất với tổng số 440K bản ghi. Đây là số tin mua bán nhà đất toàn quốc trong 2 tháng gần nhất.
Dữ liệu có dạng như sau:
Ý nghĩa các trường như sau:
- Time: Là thời gian crawl về, mình chưa sử dụng field này.
- Title: Tiêu đề của tin đăng
- Poster_temp: đây là tên đơn vị đăng tin, có thể là MÔI GIỚI hoặc tên các doanh nghiệp/cá nhân đăng bán BĐS
- Area_temp: Là tỉnh/thành của BĐS
- Unit_temp: Là đơn giá của BĐS
- Price_temp: Là giá BĐS chưa nhân với đơn giá
- Final_price: Là giá BĐS đã nhân với đơn giá và quy đổi ra đơn vị Đồng.
Rồi, bây giờ nghịch ngợm tý nhé!
Phần 2 – Nghịch phân tích dữ liệu giá nhà đất
Đầu tiên chúng ta xem các tin đăng này đến từ đơn vị nào là chính? Theo mình nghĩ là MÔI GIỚI =)). Để thử xem nhé, nói có sách, mách có chứng chuẩn hơn.
Đầu tiên là load dữ liệu từ file cái nào:
data_all = pd.read_csv('final.csv')
Code language: JavaScript (javascript)
Tiếp theo ta group theo poster_temp và đếm số tin theo người đăng tin:
# Vẽ biểu dồ môi giới/others
df = data_all.groupby('poster_temp')['time'].count().reset_index()
df = df.sort_values(by=['time'])
df.tail()
Code language: PHP (php)
Dữ liệu output sẽ là:
Ở đây ta đã có thể vẽ biểu đồ PIE để thể hiện tỷ lệ bài đăng nhưng do số lượng người đăng tin quá lớn nên biểu đồ không đẹp, bị nhiễu. Ta sẽ vẽ 2 class là : MÔI GIỚI và Others (các người đăng tin khác) thôi.
Chế biến tý nào:
df_draw = df[-1:].copy()
new_row = pd.DataFrame(data = {
'poster_temp' : ['Others'],
'time' : [df['time'][:-1].sum()]
})
df_draw = pd.concat([df_draw, new_row])
# Vẽ biểu đồ
df_draw.plot.pie(y='time')
Code language: PHP (php)
Ối giời, đúng là toàn tin của MÔI GIỚI, chiếm đến 4/5 thì phải. Vãi chưởng! Bảo sao đi đâu cũng gặp tin của môi giới, chả bao giờ gặp chính chủ.
Tiếp theo ta xem các tỉnh thành thì ở đâu mua bán nhà nhộn nhịp nhất nào?
Tương tự như trên, ta cũng ko vẽ hết các tỉnh thành lên biểu đồ, ta chỉ lấy 5 tỉnh/thành có số lượng tin lớn nhất và còn lại gom vào thành Others thôi.
Chế biến tý:
# Count so luong tin
data_city = data_all.groupby('area_temp').count().reset_index()
data_city.head(100)
data_city = data_city.sort_values(by=['time'])
df_draw = data_city[-5:].copy()
new_row = pd.DataFrame(data = {
'area_temp' : ['Others'],
'time' : [df['time'][:-5].sum()]
})
df_draw = pd.concat([df_draw, new_row])
# Vẽ cái nào
df_draw.set_index('area_temp',inplace=True)
df_draw.plot.pie(y='time')
Code language: PHP (php)
Đây rồi, kết quả đây:
Vậy là TP.HCM nhiều tin nhất, Hà nội thứ nhì và sau đó là Đà nẵng, Cần Thơ và Bình Dương. Các tỉnh còn lại chiếm khoảng 30%.
Đó là về số lượng tin, thế còn tổng số tiền thì sao nhỉ? Thử thôi!
# Sum so tien
data_city = data_all.groupby('area_temp').sum().reset_index()
data_city = data_city.sort_values(by=['final_price'])
data_city.tail(100)
df_draw = data_city[-5:].copy()
new_row = pd.DataFrame(data = {
'area_temp' : ['Others'],
'final_price' : [data_city['final_price'][:-5].sum()]
})
df_draw = pd.concat([df_draw, new_row])
df_draw.head(10)
# Vẽ biểu đồ
df_draw.set_index('area_temp',inplace=True)
df_draw.plot.pie(y='final_price',autopct='%1.0f%%', pctdistance=1.1, labeldistance=1.3,legend=0)
Code language: PHP (php)
Cũng khá tương đồng, không khác mấy so với số lượng giao dịch:
Đến lúc này thì chắc các bạn đều bảo là thì TP.HCM và HN sôi động mà, nhộn nhịp và giá nhà đắt đỏ thế còn gì nữa? Có gì lạ. Có đó!
Mình nghĩ chắc chắn giá TP.HCM là vô địch rồi còn gì nữa nên kiểm tra giá lớn nhất được rao bán ở các tỉnh thành xem sao?
# Sum so tien
data_city_mm = data_all.groupby('area_temp').agg({"final_price":"max"})
data_city_mm.sort_values(by=['final_price'],inplace=True)
# Vẽ nào
data_city_mm.plot.bar(figsize=(30,10))
Code language: PHP (php)
Và kết quả thì vê lờ luôn, Daklak vô địch. Quảng Nam và Đà Nẵng còn hơn Hà Nội nhá =)). Có lẽ do đất rộng, bán nguyên quả đồi chăng =)). Cái này mình chưa đi sâu tìm hiểu thêm, các bạn đào thử xem nguyên nhân vì sao nhé.
Ah, quay lại bài toán trên, đó là số lượng tin đăng và tổng giá trị nhà đất đều là TP.HCM vô địch. Nhưng giá trị trung bình của một tin đăng thì sao nhỉ? Thử xem!
# Sum so tien
data_city_mm = data_all.groupby('area_temp')['final_price'].mean().reset_index()
data_city_mm.sort_values(by=['final_price'],inplace=True)
data_city_mm.head(100)
data_city_mm.set_index('area_temp',inplace=True)
data_city_mm.plot.bar(figsize=(25,10))
Code language: PHP (php)
Đúng như dự đoán. TP.HCM có nhiều tin đăng nhưng giá trị trung bình các tin đăng thì còn thua xa các tỉnh khác như: Ninh Bình, Bình Phước và Quảng Ngãi nhé. Các tỉnh năng ít đăng tin nhưng khi đã đăng là bán nguyên quả đồi =))
Phần 3 – Chia sẻ dữ liệu
Ok, vui vẻ chút đầu tuần vậy thôi, không có ý gì các bạn nhé. Bây giờ các bạn có thể vào Thư viện Mì AI: https://miai.vn/thu-vien-mi-ai (Bạn xem video clip để biết cách tải về) kéo xuống phần DataSet, tìm “Dữ liệu giá nhà đất để tải” về nhé.
Hẹn gặp lại các bạn trong các bài tiếp theo!
Chúc các bạn thành công!
Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: https://miai.vn
Youtube: http://bit.ly/miaiyoutube
Hi anh Thắng,
Sau khi ngồi vọc vạch cùng dữ liệu anh chia sẻ thì em thấy giá lớn nhất tại Daklak bị sai thì phải, giá max trong bộ dữ liệu crawl ra là 490 tỷ, trong khi title tại row đó là “Bán rẻ lô đất Thành Nhất 490 triệu 5 x 20”. Sau khi find out thì giá 490 triệu là đúng tại các trang mua bán nhà đất :v . Vì vậy có thể khi xử lý dữ liệu khi crawl xử lý sai ý. Không phải bán cả quả đồi đâu ạ =))))
Thanks em. Dữ liệu anh cũng ko chăm sóc kỹ đâu. Share là chính thôi haha! Thanks em phát hiện ra để các bạn mần cho dễ haha!
Chỗ này em nghĩ tính median sẽ cho kết quả thực tế hơn là mean anh ạ 😀