«Это 28-й день моего участия в ноябрьском испытании обновлений. Подробную информацию об этом событии см.:Вызов последнего обновления 2021 г.".
написать впереди
Данные, используемые в этой статье, представляют собой информацию о подержанном жилье в Ухане, ранее просканированную в Ляньцзя. На этот раз давайте углубимся в секреты данных...
Основные библиотеки Python, задействованные в этой статье:
-
pandas
: прочитать содержимое CSV-файла и обработать данные. -
matplotlib
: это набор инструментов Python, основанный на numpy. Этот пакет предоставляет множество инструментов для построения графиков данных, в основном для построения статистических графиков. -
seaborn
: seaborn — это пакет Python для визуализации графиков, основанный на matplotlib. Это более продвинутая инкапсуляция API на основе matplotlib, что упрощает отрисовку.По сравнению с некоторыми картами в matplotlib будет привлекательнее использовать seaborn, но возможности (детали отрисовки) не так хороши, как у matplotlib. Seaborn обычно считается дополнением к matplotlib, а не заменой. В то же время он хорошо совместим со структурами данных numpy и pandas и статистическими моделями, такими как scipy и statsmodels (преимущества совместимости с pandas будут оценены позже). -
pyecharts
: pyecharts — это библиотека классов для создания диаграмм Echarts. Echarts — это библиотека JS для визуализации данных с открытым исходным кодом от Baidu. Обычно он используется для рисования динамических графиков, и эффект визуализации очень хорош. -
jieba
: очень популярный пакет сегментации китайских слов. В основном существует три режима сегментации слов: полный режим, точный режим (используемый в этой статье) и режим поисковой системы. Пользовательский словарь можно добавить перед сегментацией слов, чтобы повысить точность сегментации слов. -
collections
: в основном используйте класс Counter для подсчета количества вхождений каждого значения.
Без лишних слов, давайте к делу.
1. Чтение данных
прочитай сначалаhouse_info.csv
файл и просмотреть структурную информацию о наборе данных.
import pandas as pd
df = pd.read_csv('house_info.csv')
df.info()
Согласно приведенной выше информации, мы можем знать, что набор данных имеет всего 27 столбцов,house_label
В столбце много пропущенных значений,floor
колонка иhouse_area
имеет типobject
Должен быть преобразован в числовой тип.
2. Предварительная обработка данных
2.1 Обработка пропущенных значений
Сначала удалите строки, содержащие пропущенные значения. Количество строк данных после удаления составляет 5108 строк.
df.dropna(inplace=True)
df.reset_index(drop=True, inplace=True)
2.2 Обработка столбца
Так как необходимо пройтиpyecharts
Составление карты и Зона высоких технологий Восточного озера, Зона развития Чжуанькоу Подробного разделения по широте и долготе нет, поэтому в соответствии с приблизительным географическим положением они соответственно классифицируются как район Хуншань и район Ханнань.
содержание процесса
- извлекать
floor
номера в этажах - Измените площадь дома с "85,99 м²" --> "85,99"
- Зона высоких технологий Восточного озера делится на Хуншань, а зона развития Чжуанкоу делится на Ханнань.
# 提取floor楼层中的数字
df['floor'] = df['floor'].str.extract(r'(\d+)', expand=False).astype('int')
# 将房价面积由“85.99m²”-->“85.99”
df['house_area'] = df['house_area'].apply(lambda x: x[:-1]).astype('float')
# 将东湖高新划分到洪山,沌口开发区划分到汉南
df.loc[df['region'] == '东湖高新', 'region'] = '洪山'
df.loc[df['region'] == '沌口开发区', 'region'] = '汉南'
# 将region列中值后添加“区”,如“汉阳”-->“汉阳区”
df['region'] = df['region'] + '区'
пройти черезdescribe()
функция для просмотра описаний свойств для числовых столбцов. Если вы просматриваете все столбцы, вы можете установить параметрinclude
Назначен какall
(по умолчаниюNone
).
df.describe()
На рисунке видно, что среднее количество приверженцев вторичного жилья в Ухане составляет 17 человек, средняя общая цена составляет 1,84 млн, средняя цена за единицу составляет 19 364 юаня/м², средний этаж — 22 этажа, а средняя площадь дома — 95 м². Есть также стандартное отклонение, минимальное значение, квартиль, полуквантиль, квартиль, максимум и другая информация.
3. Гистограмма количества вторичного жилья в каждом районе
Получите информацию о каждом районе в данных и количестве домов в соответствующем районе и нарисуйте гистограмму.
import pyecharts.options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
region_list = df['region'].value_counts().index.tolist()
house_count_list = df['region'].value_counts().values.tolist()
c = Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK)
c.add_xaxis(region_list)
c.add_yaxis("武汉市", house_count_list)
c.set_global_opts(title_opts=opts.TitleOpts(title="武汉各区二手房数量柱状图", subtitle=""),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(interval=0)))
# c.render("武汉各区二手房数量柱状图.html")
c.render_notebook()
Хотя район Хуншань считается после слияния зоны высоких технологий Восточного озера, количество подержанных домов до слияния также велико, за ним следует район Цзянъань, из которого открывается уникальный вид на реку. Ниже мы проходим2D картаи3D картаФорма смотрит на распределение цен на жилье в каждом районе на карте.
4. 2D карта распределения цен на жилье в каждом районе
Подсчитайте названия каждого района и соответствующую медианную цену за единицу (на медиану мало влияют экстремальные значения). Загрузите данные местной карты города Ухань (информация о широте и долготе каждого района). Нарисуйте двухмерную карту распределения цен на жилье.
region_list = df['region'].value_counts().index.tolist()
median_unit_price = []
for region in region_list:
median_unit_price.append(df.loc[df['region'] == region, 'unit_price'].median())
# 绘制2D地图
from pyecharts.charts import Map
# 加载武汉市地图数据
json_data = json.load(open('武汉市.json', encoding='utf-8'))
data_pair = [list(z) for z in zip(region_list, median_unit_price)]
text_style = opts.TextStyleOpts(color='#fff')
c = Map(init_opts=opts.InitOpts(width='1500px', height='700px', bg_color='#404a58'))
c.add_js_funcs("echarts.registerMap('武汉市',{});".format(json_data))
c.add(series_name="武汉市", data_pair=data_pair, maptype="武汉市", label_opts=opts.LabelOpts(color='#fff'))
c.set_global_opts(legend_opts=opts.LegendOpts(textstyle_opts=text_style),
title_opts=opts.TitleOpts(title="武汉", title_textstyle_opts=text_style)
,visualmap_opts=opts.VisualMapOpts(split_number=6, max_=30000, range_text=['高', '低'],
textstyle_opts=text_style))
# c.render("武汉市各区房价分布2D图.html")
c.render_notebook()
Согласно информации на карте, районы с более высокими ценами на жилье сосредоточены в центральной части Ухани, а удельная стоимость жилья, начиная с района Учан, составляет 24 600 юаней/м². Цены на жилье в других центральных городах также превышают 15 000 юаней/м². Самая низкая цена на жилье в районе Синьчжоу, а средняя цена дома составляет 7806 юаней/м². Взгляните на 3D-карту ниже.
5. Трехмерная карта распределения цен на жилье в каждом районе
Требуемые данные такие же, как у 2D карты, а код больше и здесь показываться не будет (друзья, которым он нужен, получат его в конце статьи).По сравнению с 2D, различия в ценах на жилье в разных районах на 3D-карте будут более очевидны. Это также выглядит как NB! ! Затем подробно рассмотрите выбросы цен за единицу в каждой области через блочную диаграмму.
6. Ящичная диаграмма цен на вторичное жилье в каждом районе
Подсчитайте информацию о названии каждого района и соответствующую информацию о цене за единицу и нарисуйте коробчатую диаграмму.
# 统计各个区二手房单价信息
unit_price_list = []
for region in region_list:
unit_price_list.append(df.loc[df['region'] == region, 'unit_price'].values.tolist())
# 绘制箱型图
from pyecharts.charts import Boxplot
c = Boxplot(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
c.add_xaxis(region_list)
c.add_yaxis("武汉市", c.prepare_data(unit_price_list))
c.set_global_opts(title_opts=opts.TitleOpts(title="武汉各区二手房总价箱型图"),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(interval=0)))
# c.render("boxplot_base.html")
c.render_notebook()
pyecharts
Верхние и нижние границы прямоугольной диаграммы — это максимальное и минимальное значения, которые отличаются от максимальных и минимальных наблюдений на стандартной ящичной диаграмме. Согласно распределению верхнего и нижнего квартилей, мы видим, что районы с более высокими ценами на жилье, такие как район Хуншань, район Цзянань и район Учан, являются типичными.правильная асимметрия(Выбросы концентрируются на стороне больших значений, с длинными хвостами). Это показывает, что цена многих подержанных домов может серьезно отличаться от средней местной цены на жилье из-за местоположения, отделки и других причин.
7. Взаимосвязь между площадью распределения и ценой вторичного жилья.
так какpyecharts
На точечной диаграмме не очень удобно рисовать линии тренда, напрямую используемseaborn
Нарисовать распределение площади вторичного жилья и соотношение между площадью и ценой.
import matplotlib.pyplot as plt
import seaborn as sns
f, [ax1,ax2] = plt.subplots(1, 2, figsize=(16, 6))
# 房屋面积
sns.distplot(df['house_area'], ax=ax1, color='r')
sns.kdeplot(df['house_area'], shade=True, ax=ax1)
ax1.set_xlabel('面积')
# 房屋面积和价格的关系
sns.regplot(x='house_area', y='total_price', data=df, ax=ax2)
ax2.set_xlabel('面积')
ax2.set_ylabel('总价')
plt.show()
Площадь вторичного жилья в основном распределяется между 60 - 130м². Наиболее привлекательным является тот, площадью 400 м² и общей стоимостью 20 миллионов, который выделяется из толпы. ?
8. Трехмерная гистограмма распределения этажей и цен на жилье
Давайте теперь посмотрим на соотношение между этажами и ценами на жилье в различных районах: я слышал, что в Ухане вечером прекрасный вид на реку, поэтому цена на многоэтажки должна быть выше.
Значение каждой оси на рисунке
- Ось X: этажи, с интервалом 5 этажей
- Ось Y: название каждой области
- Ось Z: цена за единицу
В других районах цены на каждый этаж могут незначительно отличаться, но наиболее известные районы Учан и Цзянхань из-за преимуществ озера Дунху и Линьцзяна, второго по величине города, делают цены на высотное жилье в них обычно выше, чем на землю. этаж.
9. Горизонтальная гистограмма каждого типа дома
Подсчитайте типы типов домов и названия различных категорий и нарисуйте горизонтальные гистограммы.
series = df['house_type'].value_counts()
series.sort_index(ascending=False, inplace=True)
house_type_list = series.index.tolist()
count_list = series.values.tolist()
c = Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
c.add_xaxis(house_type_list)
c.add_yaxis("武汉市", count_list)
c.reversal_axis()
c.set_series_opts(label_opts=opts.LabelOpts(position="right"))
c.set_global_opts(title_opts=opts.TitleOpts(title="武汉二手房各户型横向条形图"),
datazoom_opts=[opts.DataZoomOpts(yaxis_index=0, type_="slider", orient="vertical")],)
# c.render("武汉二手房各户型横向条形图.html")
c.render_notebook()
Вы можете видеть, что основные типы номеровОдна комната, одна гостиная, одна кухня и одна ванная комната,Две комнаты, одна гостиная, одна кухня и одна ванная комната,Две комнаты, две гостиные, одна кухня и одна ванная комната,Три комнаты, одна гостиная, одна кухня и одна ванная комната,Три спальни, две гостиные, одна кухня и одна ванная комната,Три спальни, две гостиные, одна кухня и две ванные комнаты,Четыре комнаты, одна гостиная, одна кухня и две ванные комнаты. Большинство из нихДве комнаты, две гостиные, одна кухня и одна ванная комната, что также больше соответствует требованиям большинства молодых людей. Большие не могут себе этого позволить, а маленькие не могут там жить. .
10. Круговая диаграмма степени отделки дома
Теперь посмотрим на ситуацию с отделкой вторичного жилья: вообще говоря, для вторичного жилья не должно быть много сырья. Посмотрите, как обстоят дела на самом деле, посчитайте виды отделки и количество различных видов и начертите круговую диаграмму.
decoration_list = df['decoration'].value_counts().index.tolist()
count_list = df['decoration'].value_counts().values.tolist()
from pyecharts.charts import Pie
c = Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
c.add(series_name="房屋装修",
data_pair=[list(z) for z in zip(decoration_list, count_list)],
rosetype="radius",
radius="55%",
center=["50%", "50%"],
label_opts=opts.LabelOpts(is_show=False, position="center"))
c.set_global_opts(title_opts=opts.TitleOpts(
title="武汉二手房房屋装修饼状图",
pos_left="center",
pos_top="20",
title_textstyle_opts=opts.TextStyleOpts(color="#fff")),
legend_opts=opts.LegendOpts(is_show=False))
c.set_series_opts(tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"),
label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 255)"))
# c.render("customized_pie.html")
c.render_notebook()
По информации на картинке б/у дома больше среднего - это твердый переплет.Ведь люди жили прошлым, и если они просто оформлены, то точно будет очень душно перейти из рук в руки на более высоком цена.Почти 25% подержанных домов просто оформлены, а оставшаяся небольшая сумма предназначена для других украшений.Тип и бланк. Количество грубых подержанных домов действительно не так много, как ожидалось.
11. Взаимосвязь между лифтом и ценой дома
Давайте посмотрим на долю подержанных домов с лифтами и без них в каждом районе, и есть ли разница в цене за единицу домов с лифтами и без лифтов.Согласно информации на картинке выше, количество подержанных домов с лифтами в каждом районе составляет подавляющее большинство.За исключением района Дунсиху, цены на дома без лифтов немного выше, чем с лифтами, а цены на дома с лифтами лифты в других районах выше, чем без лифтов.Разрыв в районе Учан является наиболее очевидным, что также подтверждает связь между верхними этажами и ценами на жилье.Район Учан очень популярен для высотных зданий из-за вида на реку. Гистограмма и линейная диаграмма в районе Синьчжоу на рисунке частично перекрываются.Мы нарисуем две диаграммы отдельно ниже, и эффект будет лучше.
12. Воронкообразная диаграмма для популярных марок подержанного жилья
Подсчитайте теги популярных подержанных домов с более чем 3 подписчиками, нарисуйте воронкообразную диаграмму и посмотрите, что общего у этих подержанных домов.
from collections import Counter
# 只统计关注人数超过三人的热门二手房
detail_df = df.loc[df['follower_numbers'] > 3]
label_list = []
for house_label in detail_df['house_label'].values.tolist():
label_list += house_label.split(',')
label_and_count = Counter(label_list)
label_and_count = label_and_count.most_common()
from pyecharts.charts import Funnel
c = Funnel(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
c.add("商品", [list(z) for z in label_and_count])
c.set_global_opts(title_opts=opts.TitleOpts(title="武汉热门二手房标签漏斗图"))
c.render("武汉热门二手房标签漏斗图.html")
c.render_notebook()
Судя по информации на картинке, хорошо видно, что украшение для просмотра VR чаще всего появляется на популярном ярлыке подержанного жилья. Я пробовал просмотр VR в Lianjia раньше. Это действительно удобно и не имеет тупиков, но это немного кружится голова, ха-ха! Остальное смотреть на дом в любое время.Домовая книга оформлена за два года и пять лет.Ведь можно платить меньше налогов.
13. Популярные ключевые слова заголовков
Теперь мы хотим извлечь ключевые слова (горячие слова) из заголовков в популярных подержанных домах, сначала загрузив локальные стоп-слова.
def load_stopwords(read_path):
'''
读取文件每行内容并保存到列表中
:param read_path: 待读取文件的路径
:return: 保存文件每行信息的列表
'''
result = []
with open(read_path, "r", encoding='utf-8') as f:
for line in f.readlines():
line = line.strip('\n') # 去掉列表中每一个元素的换行符
result.append(line)
return result
# 加载中文停用词
stopwords = load_stopwords('wordcloud_stopwords.txt')
пройти черезjieba
Токенизация Получите результаты сегментации слов заголовка и удалите стоп-слова.
import jieba
# 添加自定义词典
jieba.load_userdict("自定义词典.txt")
token_list = []
# 对标题内容进行分词,并将分词结果保存在列表中
for title in detail_df['title']:
tokens = jieba.lcut(title, cut_all=False)
token_list += [token for token in tokens if token not in stopwords]
len(token_list)
29203 |
---|
Согласно списку причастий, используйтеCounter
Класс подсчитывает количество вхождений каждого слова в списке сегментации слов, выбирает 100 первых слов с наибольшим количеством вхождений и рисует диаграмму облака слов.
from pyecharts.charts import WordCloud
from collections import Counter
token_count_list = Counter(token_list).most_common(100)
new_token_list = []
for token, count in token_count_list:
new_token_list.append((token, str(count)))
c = WordCloud()
c.add(series_name="热词", data_pair=new_token_list, word_size_range=[20, 200])
c.set_global_opts(
title_opts=opts.TitleOpts(
title="武汉热门二手房标题关键词", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
),
tooltip_opts=opts.TooltipOpts(is_show=True),
)
c.render("武汉热门二手房标题关键词.html")
c.render_notebook()
Слова, которые чаще встречаются в названиях популярных подержанных домов: лифт, этаж, освещение, изысканная отделка, тип квартиры, полные две, трафик и т. д. Есть также некоторая лексика, связанная с местоположением, которую можно использовать в качестве справочной через эти ключевые слова продавца.Может быть, это контент, на который нам нужно обратить внимание при покупке дома в будущем.
Суммировать
Благодаря анализу многих аспектов у меня также есть общее представление об общем рынке вторичного жилья в Ухане.Стоимость дома в центре города начинается от 15 000 юаней/м², а самая низкая цена на периферии составляет около 7 000 или 8000 юаней. Этажи исходя из ваших собственных потребностей.Если вы хотите увидеть пейзажи, то нет ничего плохого в верхних этажах, но цена, как правило, выше. По площади достаточно около 100 м².Если цена слишком большая, то цена может быть высокой.Ведь судя по данным в блочной диаграмме, во всех районах цены на жилье намного превышают средние. Украшение - это чисто вопрос личных предпочтений. Лично я люблю украшать сам. Только я понимаю свой стиль. Другим может не быть тепло, когда они украшают. Популярный тип квартир с двумя спальнями, двумя гостиными, одной кухней и одной ванной комнатой. Есть и другие моменты, на которые следует обратить внимание, такие как освещение, возраст, трафик, окружающая среда и так далее. Ха-ха, я тоже не продаю дом, толькоПолучите некоторые поверхностные идеи из некоторых данных, всем просто приятно провести время, реального анализа этих данных точно не хватит. В общем, три слова, не могу себе этого позволить, до свидания!
Не забудьте поставить "Нравится" ??