Введение
Вино, напиток, богатый традициями и культурой, на протяжении веков очаровывало как ценителей, так и новичков. Помимо искусства потягивания и наслаждения, мир вина представляет собой сложную картину вкусов, виноградников, регионов и, конечно же, рейтингов. Но что, если мы скажем вам, что вы можете глубже погрузиться в эту энологическую сферу, вооружившись не штопором, а инструментами анализа данных?
В этом сообщении блога мы приглашаем вас отправиться в путешествие, основанное на данных, по виноградникам и подвалам винной информации. Мы покажем вам, как получать данные о вине в режиме реального времени из API Vivino, раскрывать скрытую информацию посредством комплексного анализа данных и даже прогнозировать рейтинги вин с помощью машинного обучения. Независимо от того, являетесь ли вы сомелье, ищущим новые перспективы, или энтузиастом данных, ищущим захватывающий проект, это руководство — ваш билет в богатый мир вина через призму данных.
Итак, налейте себе бокал любимого вина, и давайте посмотрим, как данные могут улучшить ваше путешествие по достоинству. Ваше здоровье! 🍷
Получение данных Wine из Vivino API
Мы углубимся в фрагмент кода, который демонстрирует, как получить данные Wine из API Vivino. Мы разберем этот процесс шаг за шагом, чтобы вы могли понять, как собирать эти ценные данные для ваших проектов, связанных с вином.
def fetch_wine_reviews(wine_id, vintage_year, page_number): # Define the user agent header headers = { "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:89.0) Gecko/20100101 Firefox/89.0" } # Define the API URL with parameters vivino_url = f"https://www.vivino.com/api/wines/{wine_id}/reviews?per_page=50&year={vintage_year}&page={page_number}" # Fetch data from the API and parse it as JSON api_data = requests.get(vivino_url, headers=headers).json() return api_data
API Vivino обеспечивает программный доступ к обширной базе данных вин, обзоров и сопутствующей информации. Этот API является золотой жилой для данных, связанных с вином, позволяя получать подробную информацию о винах, их рейтингах, ценах и даже отзывах пользователей.
Теперь давайте разберемся, как получить данные Wine из Vivino API:
1. Настройка запроса
Код начинается с настройки заголовков запроса, включая информацию об агенте пользователя. Эта информация заголовка имеет решающее значение для выполнения запросов к веб-API, поскольку она имитирует поведение веб-браузера.
2. Определение URL-адреса API
URL-адрес Vivino API определяется конкретными параметрами, такими как идентификатор вина, год урожая и номер страницы для нумерации страниц. Это позволяет получать данные для конкретного вина и года, одновременно обрабатывая большие наборы данных посредством разбиения на страницы.
3. Получение данных и их анализ
Библиотека запросов используется для выполнения HTTP-запроса GET к URL-адресу Vivino API. Затем ответ анализируется как данные JSON, которые можно легко обработать в Python.
4. Хранение данных
Полученные данные возвращаются в виде объекта JSON, и вы можете извлечь из него соответствующую информацию. Соответствующие данные включают подробную информацию о винодельне, годе сбора урожая, рейтингах, ценах и многом другом.
5. Создание фрейма данных
DataFrame Pandas создан для хранения и структурирования данных вина. Этот DataFrame служит основой для дальнейшего анализа и визуализации.
# Define the column names for the DataFrame columns = ["Winery", "Year", "Wine ID", "Wine", "Rating", "num_review", "price", 'Country', 'Region'] # Create an empty DataFrame with the specified column names wine_data_df = pd.DataFrame(relevant_data, columns=columns)
6. Перебор вин
Выполняет итерацию по DataFrame, получая обзоры для каждого вина. Получите обзоры для нескольких страниц, если они существуют, что позволит вам собрать полный набор данных обзоров вин.
7. Сохранение в CSV.
Наконец, данные о рейтингах вин объединяются с исходными данными о вине, создавая комплексный набор данных. Этот объединенный набор данных затем сохраняется в файл CSV для дальнейшего анализа и изучения.
# Merge the ratings DataFrame with the original DataFrame ratings_merged = ratings_df.merge(wine_data_df) # Save the merged DataFrame to a CSV file ratings_merged.to_csv("vivino_wine_dataset.csv", index=False)
Выполнение исследовательского анализа данных (EDA)
В нашем стремлении разгадать тайны данных о вине мы подошли к захватывающей главе: изучению числовых аспектов нашего набора данных. Как мы все знаем, хорошая гистограмма может выявить истории и закономерности в данных, которые в противном случае могли бы остаться скрытыми. В этом разделе мы углубимся в гистограммы наших данных о вине и поможем нам выявить распределение ключевых характеристик, связанных с вином.
Не все столбцы в нашем наборе данных подходят для гистограмм. Мы хотим сосредоточиться на числовых значениях, поэтому используем Pandas для их фильтрации. Это гарантирует, что мы строим гистограммы только для соответствующих атрибутов, таких как цена, рейтинг и т. д.
Мы не просто визуализируем цифры; мы заглядываем в самое сердце винных данных. Эти гистограммы дают нам богатую картину распределения ключевых атрибутов, создавая основу для более глубокого анализа и понимания. 🍷📈
Создание тепловой карты корреляции
Корреляция подобна компасу в анализе данных, указывающему нам направление взаимосвязей между переменными. В наших данных о винах это означает выяснение того, как взаимодействуют друг с другом такие факторы, как цена, рейтинги пользователей и количество отзывов. Тепловая карта корреляции обеспечивает визуально привлекательный способ понять эти связи.
Распределение цен
Цены на вино могут значительно различаться в зависимости от таких факторов, как регион, год урожая и производитель. Анализ этих цен не только дает представление о рыночных тенденциях, но также позволяет нам выявить исключительные сделки или экстравагантные удовольствия. Давайте углубимся в код, который воплощает в жизнь анализ цен на вино.
Имея наш набор данных о винах, отсортированный по средней цене, мы готовы взглянуть на результаты. В нашем наборе данных мы получаем обзор того, какие вина продаются по самым высоким и самым низким ценам, что дает ценную информацию о винном рынке.
Распределение рейтингов
Мир вина полон мнений и опыта, и эти рейтинги дают ценную информацию о качестве и привлекательности различных вин. В этом разделе мы рассмотрим средние оценки для каждого вина, а также визуализируем эти оценки с помощью увлекательной коробчатой диаграммы.
Диаграмма позволяет нам изучить и оценить распределение рейтингов вин в нашем наборе данных. Интерактивность диаграммы позволяет легко находить вина с высокими оценками и понимать диапазон оценок каждого вина.
Рейтинги вин — это коллективные голоса любителей вина, и этот анализ и визуализация этих рейтингов предоставили любителям вина платформу для изучения и сравнения качества своих любимых бутылок. 🍷🌟
Количество рейтинговых распределений
Популярность вина зависит не только от того, насколько хорошо оно изготовлено; дело также в том, сколько людей попробовали и оставили отзывы. Анализ среднего количества оценок помогает нам определить вина, которые привлекли внимание более широкой аудитории. Давайте рассмотрим код, который раскрывает эти идеи.
Чтобы определить вина, получившие наибольшее количество отзывов, мы сортируем наш набор данных по «среднему количеству оценок» в порядке убывания. Таким образом, самые популярные вина помещаются вверху, а менее рецензированные — внизу. Мы сбрасываем индекс, чтобы сохранить структурированный формат наших данных.
Среднее количество оценок вина отражает не только его качество, но и его резонанс среди любителей вина. Мы рассчитали и визуализировали этот показатель, а также предоставили любителям вина платформу для изучения и сравнения популярности своих любимых бутылок.🍷👑
Распределение винодельни
Доминирование винодельни заключается не только в производстве огромного количества вин; речь идет также о захвате значительной доли рынка и умений потребителей. Анализ доминирования виноделен помогает нам определить, какие производители имеют влияние в винодельческой отрасли. Давайте исследуем, чтобы раскрыть эти идеи.
Чтобы визуально представить доминирование виноделен, мы создаем фигуру с двумя подграфиками, используя Matplotlib. Левый подграфик демонстрирует круговую диаграмму, иллюстрирующую процентное распределение 10 крупнейших винодельческих брендов. Каждый кусок пирога представляет собой винодельню, а размер куска указывает на ее доминирование. Мы настраиваем внешний вид, добавляя тени, белые края и метки autopct для лучшей читаемости.
Правый подграфик представляет собой гистограмму, показывающую количество вин, произведенных каждым из 10 крупнейших винодельческих брендов. Синие звездочки привлекают внимание к каждому столбцу, а для ясности мы используем ярко выраженный розовый цвет.
Понимание того, какие винодельни доминируют на рынке, важно как для любителей вина, так и для профессионалов отрасли. Мы не только рассчитали и визуализировали доминирование виноделен, но и предоставили любителям вина платформу для изучения и сравнения влияния различных производителей. Поднимем бокалы за винодельни, которые доминируют на винной сцене! 🍷🏆
С первого взгляда эта диаграмма дает ценную информацию о том, какие винные бренды доминируют на рынке.
Построение модели машинного обучения для прогнозирования рейтинга вина
Прежде чем мы сможем углубиться в анализ данных о вине, важно подготовить набор данных для моделирования, которое включает в себя кодирование категориальных переменных и подготовку данных, пригодных для машинного обучения.
def preprocess_wine_data(data_frame): # One-hot encode the 'Year' column encoded_wine_data = pd.get_dummies(data_frame, columns=['Year']) # Identify and encode integer categorical columns categorical_cols = [col for col in encoded_wine_data.columns if encoded_wine_data[col].dtype == "int64"] # Initialize a LabelEncoder label_encoder = preprocessing.LabelEncoder() # Apply LabelEncoder to each identified categorical column for col in categorical_cols: encoded_wine_data[col] = label_encoder.fit_transform(encoded_wine_data[col]) return encoded_wine_data # Call the refactored function with the DataFrame as an argument encoded_wine_df = preprocess_wine_data(vino_wine_df)
Обзор преобразования данных
Вот краткий обзор ключевых шагов кода предварительной обработки данных:
- Год горячего кодирования: мы начинаем с горячего кодирования столбца «Год». Это преобразование преобразует категориальные значения года в двоичные столбцы, каждый из которых представляет определенный год. Этот шаг гарантирует, что наши алгоритмы машинного обучения смогут эффективно обрабатывать эти категориальные значения.
- Идентификация категориальных столбцов. Далее мы идентифицируем целочисленные категориальные столбцы в нашем наборе данных. Это столбцы, содержащие категориальные данные, представленные в виде целых чисел.
- Кодирование меток: мы инициализируем LabelEncoder из библиотеки scikit-learn. Для каждого идентифицированного категориального столбца мы применяем кодировку меток. Этот процесс присваивает уникальную цифровую метку каждой категории в столбце. Кодирование меток особенно полезно для преобразования категориальных данных в формат, подходящий для моделей машинного обучения.
- Возврат преобразованных данных. Наконец, функция возвращает преобразованный набор данных, в котором категориальные столбцы были закодированы методом «горячего» кодирования, а при необходимости закодированы метками.
Предварительная обработка данных — важный шаг в любом проекте анализа данных или машинного обучения. Кодируя и преобразовывая данные, мы делаем их совместимыми с различными аналитическими инструментами, что позволяет нам извлекать значимую информацию и строить прогнозные модели. В результате получается набор данных, готовый к дальнейшему исследованию и анализу.
Прогнозирование рейтингов вин: опыт машинного обучения
В сфере анализа вина понимание того, какие факторы влияют на рейтинг вина, имеет решающее значение как для производителей, так и для энтузиастов. Линейная регрессия, фундаментальный метод машинного обучения, позволяет нам прогнозировать рейтинги вин на основе выбранных характеристик. В этом разделе мы углубимся в прогнозы рейтингов вин с использованием линейной регрессии.
# Perform wine rating prediction using linear regression. def perform_wine_rating_prediction(data_frame, feature_column): # Extract the feature and target variables X_feature = data_frame[[feature_column]] y_rating = data_frame['User Rating'] # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X_feature, y_rating, test_size=0.2, random_state=42) # Create and train the linear regression model regression_model = LinearRegression() regression_model.fit(X_train, y_train) # Make predictions on the testing data y_predicted = regression_model.predict(X_test) # Calculate and print the model score model_score = regression_model.score(X_test, y_test) print(f"Model score: {model_score}") return y_predicted # Generate predictions for 'User Rating' using the 'perform_wine_rating_prediction' function predicted_ratings = perform_wine_rating_prediction(vino_wine_df, "User Rating") predicted_ratings Model score: 1.0 array([3.5, 4. , 3. , ..., 4. , 3.5, 4. ])
Вот краткий обзор ключевых шагов в коде прогнозирования рейтинга вина:
- Функциональные и целевые переменные: мы начинаем с извлечения функциональной переменной (атрибута, который, по нашему мнению, влияет на рейтинги вин) и целевой переменной («Рейтинг пользователя», который мы хотим спрогнозировать). Такое разделение позволяет нам эффективно обучать нашу модель.
- Разделение данных. Чтобы оценить производительность нашей модели, мы делим набор данных на две части: обучающий набор и тестовый набор. Обучающий набор используется для обучения модели, а тестовый набор зарезервирован для оценки ее прогнозных возможностей. Мы выделяем 20% данных в набор тестирования, обеспечивая надежную оценку. Функция
train_test_split
из scikit-learn облегчает этот процесс. - Модель линейной регрессии. Линейная регрессия, основополагающий метод машинного обучения, составляет основу нашей модели. Он стремится установить линейную связь между выбранным признаком и рейтингом вина. Цель модели — изучить данные обучения, как эта функция влияет на рейтинги пользователей.
- Обучение модели. Модель линейной регрессии обучается с использованием обучающих данных, что позволяет ей усвоить взаимосвязи между функцией и рейтингами пользователей.
- Создание прогнозов. После обучения модели она готова делать прогнозы. Мы используем значения признаков из тестового набора для оценки рейтингов вин.
- Оценка модели: мы рассчитываем оценку модели, которая дает представление о ее точности прогнозирования на данных тестирования. Более высокий балл указывает на лучшую способность прогнозировать рейтинги вин.
- Печать оценки модели: код завершается печатью оценки модели, обеспечивая немедленную обратную связь о ее прогнозируемой эффективности.
Заключение
В этом всеобъемлющем путешествии по миру анализа данных о вине мы открыли сокровищницу идей. От получения данных о вине из Vivino API до визуализации популярности винных брендов и прогнозирования рейтингов вин с помощью машинного обучения — мы стали свидетелями возможностей исследования, основанного на данных. Являетесь ли вы энтузиастом вина, ищущим скрытые сокровища, или производителем, стремящимся понять предпочтения потребителей, сочетание науки о данных и виноградарства предлагает восхитительное сочетание знаний и возможностей.
Подняв бокалы за это увлекательное исследование, пусть оно вдохновит нас на более глубокое понимание искусства и науки вина.
Ваше здоровье! 🍷📊