Сямэнь действительно больше, чем остров Гуланъюй

визуализация данных

Сямэнь действительно больше, чем остров Гуланъюй

Сегодняшняя статья оСямэньиз. Потому что автор прожил в Сямэне много лет, от окончания школы до работы, и провел в Сямэне очень хорошую юность. Как иностранец, я действительно чувствую, что Сямынь - это город-сад с красивой природой и литературной атмосферой, который когда-то был провозглашен президентом США Никсоном "Восточными Гавайями". По мнению автора, он действительно соответствует его репутация ?

Сямэнь всегда был популярным туристическим городом в Китае, и многие людиОстров ГуланъюйИди, ведь репутация кончилась. На моей памяти я был на острове Гуланъюй как минимум 7 раз.Но Сямэнь на самом деле больше, чем остров Гуланъюй..

Остров Гуланъюй

Тогда давайте сначала сфотографируем Гуланъюй.Автор как-то водил друга в Гуланъюй.日光岩(Самая высокая вершина острова Гуланъюй) Панорама, снятая сверху. На вершине много туристов, и вы можете увидеть остров Гуланъюй, знаменитые башни-близнецы Симао в Сямыне и залив Сямэнь. Это действительно красиво ?

Источники данных

Данные, используемые в этой статье, были получены с веб-сайта, и конкретный процесс подробно объясняется.

Поля сканирования

Всего сканируется 6 полей, это:

  1. Китайское имяcn_title
  2. Английское имя en_title
  3. стратегия
  4. Комментарий
  5. ранжирование
  6. Привлекательность

правила веб-страницы

1. Войдите на сайт:travel.Qunar.com/afraid-в это время 299782-…Мы нашли максимум 10 достопримечательностей на странице, всего 126 страниц:

Правила веб-страницы могут быть построены следующим образом:

for i in range(1,127):
  url = "https://travel.qunar.com/p-cs299782-xiamen-jingdian-1-{}".format(i)  # 网页规律

2. Давайте посмотрим на расположение информации о 6 полях в исходном коде, щелкните правой кнопкой мыши, выберите «Проверить» и найдите 10 мест на каждой странице в элементах элемента обзора, каждое из которых<li></li>Пара представляет собой аттракцион.

3. Посмотрите на расположение каждого поля

На следующих 3 картинках мы определяем расположение каждого поля. Только когда местоположение поля установлено, мы можем его разобрать.

Ниже мы разбираем каждое поле

импортировать соответствующую библиотеку

Поля сканирования сначала необходимо импортировать из различных библиотек, основные функции которых включают в себя:

  • Отправка сетевых запросов запросов
  • Регулярный модуль повторного анализа данных
  • Пакет json обрабатывает данные типа словаря Python.
  • csv используется для сохранения просканированных данных
  • Pandas, numpy обрабатывает просканированные данные
  • Графики с plotly_express и pycharts
import pandas as pd
import numpy as np
import re
import csv
import json
import requests
import random

# 分词
import jieba

# 绘图
# import plotly.express as px  等同
import plotly_express as px
import plotly.graph_objects as go

from wordcloud import WordCloud  # 词云图
import matplotlib.pyplot as plt
from plotly.graph_objects import Scatter,Bar

Запрос данных первой страницы

Давайте сначала посмотрим на запрос первой страницы данных и посмотрим на конкретный исходный код.

Часть данных веб-страницы выглядит следующим образом:

поле совпадения

Далее через модуль refindall()Используйте регулярные выражения для соответствия каждому полю:

1. Китайское название живописного места

Иногда нам нужно проверить, равно ли число каждой страницы 10, поэтому печатается длина, которая равна ровно 10.

2. Английское название живописного места

3. Количество рейдеров

4. Количество отзывов

5. Рейтинг достопримечательностей

Ранжирование живописных мест весьма специфично. Когда я сканировал данные, я обнаружил, что некоторые живописные места не были ранжированы. Например, среди живописных мест на странице 16 многие из них не ранжировались и нуждались в специальной публикации.

В приведенном выше коде, если ранг аттракциона не существует, он заменяется на 0:

6. Знакомство с достопримечательностями

Полное веб-сканирование

Ниже приведен исходный код для сканирования всего веб-сайта, включая:

  • Создание URL-адреса веб-страницы
  • Отправить запрос на получение исходного кода
  • Процесс синтаксического анализа полей, обработка особых случаев
  • сохранить документ

обработка данных

Сначала мы читаем данные, которые мы получили через pandas:

df = pd.read_csv("厦门景点.csv")
df.head()  # 取出前5条数据

Проверьте длину и тип поля данных, а также наличие пропущенных значений:

  • Можно обнаружить, что 3 поля имеют тип string: object
  • Остальные 3 поля имеют тип int64.

df.isnull().sum()  # 查看缺失值

# 结果显示:369个英文名缺失,1121个景点没有简介

Китайское имяcn_title

Для начала разберемся с названиями достопримечательностей (разберем китайские названия). Сямэнь - город-сад. На всем острове много парков. Давайте посмотрим, сколько парков в Сямэне по данным:

  • str.contains(): Строка содержит функцию
  • reset_index(): перестановка индексов в пандах
# 1-多少个公园

park = df[df["cn_title"].str.contains("公园")].reset_index(drop=True)
park

Вывод: данные показывают, что на острове Сямынь и за его пределами насчитывается в общей сложности 107 парков.

Давайте отсортируем парки по полю рейтинга и посмотрим, какие парки более популярны:

new_park = park[park["ranking"] != 0].sort_values(by=["ranking"]).reset_index(drop=True)
new_park[:20]  # 取出前20个公园

Судя по данным, в первую тройку входят:Железнодорожный парк культуры, парк Чжуншань, парк водно-болотных угодий Уюаньвань

1. Железнодорожный культурный парк: автор был там один раз, рядом с Вэньдянь-роуд в парке Цзиньбанг, это удлинитель железной дороги Инся (Цзянси-Интань-Сямынь), где проходят старые железнодорожные пути.

2. Парк Чжуншань: во многих местах должен быть парк Чжуншань, чтобы почтить память г-на Сунь Ятсена.Здесь обычно проводится много мероприятий.

3. Парк водно-болотных угодий Уюаньвань. Упоминание о Уюаньване напоминает людям о местных тиранах в Сямэне. Уюаньвань можно назвать местным тираном в Сямэне.

За пределами острова есть также парк Байлучжоу, парк Чжунлунь и горный лесной парк Тяньчжу, которые стоит посетить. Далее давайте посмотрим, что есть у знаменитого Сямыня.улица:

# 2-著名街道
street = df[df["cn_title"].str.contains("街")].reset_index(drop=True)
street.head(10)

Всего 37 штук данных, вынимаем первые 10 штук данных

Пешеходная улица Чжуншань РоудЗдесь очень жарко: всевозможные местные хоккиенские закуски, чай с молоком, тайваньские деликатесы, знаковое здание Сямыня - аркада. Каждый праздник — это пробка, многолюдная.

Улица кошек ДингаозайИдет тоже много людей. Недалеко от южных ворот Сямэньского университета автор бывал там несколько раз. Внутри есть небольшой магазинчик по продаже кошек, там очень жарко? Наконец-то посмотрим иУниверситетПохожие достопримечательности:

Можно увидеть, что в основном 17 живописных мест, связанных с Сямэнь и школами, были заключены по контракту с 3 колледжами и университетами:

  • Сямэньский университет: самый красивый университет Китая
  • Университет Джимей
  • Университет Хуацяо

До Сямэньского университета туристы могли приходить и уходить по своему желанию. В последние годы количество людей было ограничено, и для поступления в школу нужно записываться на прием, поэтому друзья, желающие поступить в Сямэньский университет, должны записываться на прием заранее.

Но если у вас в нем учатся родственники или друзья, я слышал, что вы можете принести его ? Скажу по секрету. положить сяменизвилистое полеФотографии, которые когда-то сделал автор.

Рейтинг достопримечательностей

Мы напрямую смотрим на то, какие живописные места популярны, через рейтинг живописных мест:

# 排除ranking=0的数据;排名升序排列;
# 取出前10个景点
ranking  = df[df["ranking"] != 0].sort_values(by=["ranking"],ascending=True)[:20].reset_index(drop=True)

px.bar(ranking,  # 传入的数据框
       x="cn_title",  # 横轴字段
       y="ranking",  # 纵轴字段
       color="ranking"  # 颜色显示字段
      )

Номер один действительноОстров Гуланъюй?. Shell ? Dream World, Xiamen Underwater World, Xiamen Dadeji Bathing Beach, Sunlight Rock и т. д. — все это живописные места на острове Гуланъюй. Так что остров Гуланъюй действительно очень популярен.

Во-вторых,Сямэньский университети рядом сХрам Нанпутуо, также является туристической достопримечательностью. Несколько лет назад Сямэнь построил новое знаковое здание:Башни-близнецы Всемирного торгового центра, и многие туристы едут туда.

Стратегия

Многие туристы любят писать некоторые стратегии путешествия, чтобы другие могли обратиться к ним после того, как они прибудут в живописные места.Давайте посмотрим на количество стратегий для популярных живописных мест:

px.scatter(df,  # 绘图数据
           x="cn_title",  # 横纵轴
           y="strategy",
           color="strategy"  # 颜色标记
          )

Вывод: данные показываютСямэньский университетЭто самое популярное живописное место среди туристов для написания стратегий.Храм НанпутуоиПешеходная улица Чжуншань Роуд.

Комментарии

Давайте посмотрим на количество отзывов туристов о достопримечательностях, возьмем 20 лучших достопримечательностей после сортировки в порядке убывания и отобразим данные о 10 лучших:

comment = df[df["comment"] != 0].sort_values(by=["comment"],ascending=False)[:20].reset_index(drop=True)
comment.head(10)

px.scatter(comment,  # 数据框
           x="cn_title",  # 横纵轴
           y="comment",
           color="comment"  # 颜色
          )

По количеству комментариев и ранжированию строим комбинацию из нескольких графиков:

fig = px.scatter(comment,   # 数据框
                 x="ranking",   # 横轴
                 y="comment",  # 纵轴
                 color="ranking",  # 颜色
                 marginal_y="violin",  # y轴图形
                 marginal_x="box",   # x轴图形
                 trendline="ols",   # 趋势线
                 template="simple_white")  # 模板
fig.show()

Первое место действительно Гуланъюй ?Сямыньский университет, храм Нанпутуо, пешеходная улица Чжуншань-роуди так далее.

Введениерезюме

Наконец, мы разбираем знакомство с достопримечательностями на сайте. Здесь мы используем WordCloud для рисования графика облака слов. Сначала заполните пустые значения во введении.

abstract = df.fillna(value="")  # 缺失值填充

abstract_list = abstract["abstract"].tolist() # 显示前10个简介
abstract_list[:10]

Далее, после использования причастия jieba, мы добавляем каждое причастие в большой список:

jieba_list = []

for i in range(len(abstract_list)):
  	# jieba分词
    seg_list = jieba.cut(str(abstract_list[i]).strip(), cut_all=False)
    for each in list(seg_list):
        jieba_list.append(each)

jieba_list[:10]

Первый раз: рисование непосредственно в Wordcloud

from wordcloud import WordCloud
import matplotlib.pyplot as plt

text = " ".join(i for i in jieba_list)   # 待处理的字符串

# 先下载SimHei.ttf字体,放置到自己的某个目录下
font = r'/Users/peter/Desktop/spider/SimHei.ttf'

wc = WordCloud(collocations=False, 
               font_path=font, # 路径
               max_words=2000,width=4000,
               height=4000, margin=2).generate(text.lower())

plt.imshow(wc)
plt.axis("off")
plt.show()

wc.to_file('xiamen.png')  # 把词云保存下来

Как видно из диаграммы облака слов, во введении:Сямэнь и Гуланъюй очень заметны. Конечно, есть и много недопустимых слов, например:находится здесьПодождите, тогда для обработки используем таблицу де-стоп.Таблица стоп-слов собирается онлайн:

### 使用去停用词再画一次:停用词表是自己收集的

# 创建停用词list
def StopWords(filepath):
    stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]
    return stopwords

# 传入停用词表的路径
stopwords = StopWords('/Users/peter/Desktop/Publish/nlp_stopwords.txt')

stopword_list = []
for word in jieba_list:  
    if word not in stopwords:
        if word != "\t" and word != " ":  
            stopword_list.append(word)

stopword_list[:10]

После использования списка стоп-слов я обнаружил, что знаки препинания, такие как запятые, были удалены, а также были удалены многие слова, которые не имели значения. Затем мы используем следующую графику красоты в качестве фонового изображения, чтобы нарисовать карту облака слов:

from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator

d = path.dirname('.')   # 在ide中使用这段代码
# d = path.dirname(__file__)

# 传入新的词语列表
text = " ".join(i for i in stopword_list)

# https://www.deviantart.com/jirkavinse/art/Real-Life-Alice-282261010
alice_coloring = np.array(Image.open(path.join(d, "wordcloud.jpg")))

# 设置停用词
stopwords = set(STOPWORDS)
stopwords.add("said")

# 字体路径
font = r'/Users/peter/Desktop/spider/SimHei.ttf'

wc = WordCloud(background_color="white", font_path=font,
               max_words=2000, mask=alice_coloring,
               height=6000,width=6000,
               stopwords=stopwords, max_font_size=40, random_state=42)

wc.generate(text)

image_colors = ImageColorGenerator(alice_coloring)  

plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
plt.axis("off")
plt.show()
wc.to_file('厦门.png')  # 把词云保存下来

Окончательный график выглядит следующим образом:

Суммировать

В этой статье анализируются соответствующие достопримечательности Сямыня на основе фрагмента данных, просканированных из Интернета, чтобы увидеть, куда всем нравится ходить, когда они едут в Сямынь:

  • Остров ГуланъюйОчень жарко, в основном туристы должны идти
  • Достопримечательности в районе Сямэньского университета:Кампус Симин Сямэньского университета(озеро Фуронг, туннель Фуронг, здание Сонгэн и т. д.), рядом сХрам Нанпутуо, над храмомПик Вулао
  • Если вы любите море и любите кататься, вам сюда:Сямэньский университет, пляж Байчэн, мост Янву, улица Хуаньдао, форт Хулишань, деревня Ефэн
  • Если вы любитель поесть, вам следует посетить:Пешеходная улица Zhongshan Road, Zengcuo'an, Taiwan Snack Street
  • Если вы молодой литературно-художественный юноша,Западный район искусства Шаповейты не можешь пропустить

Последнее предложение: Сямынь приветствует вас! ?

Все, что, казалось бы, прошло, никогда не покидало меня.Любовь и тепло, которое вы мне подарили, заставляет меня настойчиво охранять это место.

Юэр Коттедж, уютный коттедж. Хозяин хижины, стремится выжить одной рукой кода, а одной рукой наслаждается жизнью, добро пожаловать в гости?

Добро пожаловать, чтобы отсканировать код и подписаться на общедоступную учетную запись WeChat:Рождественский коттедж, возьму у тебя входные данные, возьму тебя учиться готовить еду?