Ricerche Trend Easy con Python

Il seguente script Python permette di effettuare un’analisi rapida ed esaustiva dei Google Trend in tutte le Nazioni Europee.

Con un semplice inserimento di una keyword, avrete una visione completa dei trend, delle query e dei temi correlati alla keyword inserita, attraverso una serie di grafici dinamici ed interattivi salvabili.

In caso di disponibilità delle informazioni richieste lo script fornisce inoltre anche dati regionali utili per chi opera a livello locale.

Nel contesto commerciale moderno, la capacità di interpretare e anticipare le tendenze è fondamentale e questo piccolo script gratuito è progettato per velocizzare il vostro lavoro di analisi e ricerca.

import tkinter as tk
from tkinter import ttk
import tkinter.messagebox
from pytrends.request import TrendReq
import random
import string
import pandas as pd
import matplotlib.pyplot as plt

def show_related_topics():
    keyword = entry_keyword.get()
    geo = get_selected_geo()
    if keyword and geo:
        results = get_related_topics(keyword, geo)
        if not results.empty:
            mostra_grafico(results, geo, title=f'Temi Correlati per "{keyword}" in {nazioni_dict[geo]}')
        else:
            tk.messagebox.showwarning("Attenzione", "Nessun dato disponibile per la selezione corrente.")

def show_interest_by_region():
    keyword = entry_keyword.get()
    geo = get_selected_geo()
    if keyword and geo:
        results = get_interest_by_region(keyword, geo)
        if not results.empty:
            mostra_grafico(results, geo, title=f'Interesse di Ricerca per "{keyword}" per Regione in {nazioni_dict[geo]}')
        else:
            tk.messagebox.showwarning("Attenzione", "Nessun dato disponibile per la selezione corrente.")

def show_related_topics():
    keyword = entry_keyword.get()
    geo = get_selected_geo()
    if keyword and geo:
        results = get_related_topics(keyword, geo)
        if not results.empty:
            results.set_index('topic_title').plot(kind='bar', figsize=(10,5), legend=False)
            plt.title(f'Temi Correlati per "{keyword}" in {nazioni_dict[geo]}')
            plt.ylabel('Interesse relativo')
            plt.tight_layout()
            plt.show()
        else:
            tk.messagebox.showwarning("Attenzione", "Nessun dato disponibile per la selezione corrente.")

def show_related_queries():
    keyword = entry_keyword.get()
    geo = get_selected_geo()
    if keyword and geo:
        results = get_related_queries(keyword, geo)
        mostra_grafico(results, geo, title=f'Query Correlate per "{keyword}" in {nazioni_dict[geo]}')

def get_selected_geo():
    if combo_nazioni.get():
        nome_nazione_selezionato = combo_nazioni.get()
        return [code for code, name in nazioni_dict.items() if name == nome_nazione_selezionato][0]
    return None

def show_results(title, results):
    results_window = tk.Toplevel(root)
    results_window.title(title)
    if not results.empty:
        text_area = tk.Text(results_window, wrap=tk.WORD, width=50, height=20)
        text_area.pack(padx=10, pady=10)
        text_area.insert(tk.END, results.to_string())
    else:
        tk.Label(results_window, text="Nessun risultato trovato.").pack(pady=20)

def get_related_queries(keyword, geo):
    pytrend = TrendReq()
    pytrend.build_payload(kw_list=[keyword], geo=geo)
    related_queries = pytrend.related_queries()
    return related_queries[keyword]['top']

def get_related_topics(keyword, geo):
    pytrend = TrendReq()
    pytrend.build_payload(kw_list=[keyword], geo=geo)
    related_topics = pytrend.related_topics()
    return related_topics[keyword]['top']

def get_interest_by_region(keyword, geo):
    pytrend = TrendReq()
    pytrend.build_payload(kw_list=[keyword], geo=geo)
    interest_by_region = pytrend.interest_by_region()
    return interest_by_region

nazioni_dict = {
    "AL": "Albania", 
    "AD": "Andorra", 
    "AM": "Armenia", 
    "AT": "Austria", 
    "AZ": "Azerbaijan",
    "BY": "Belarus", 
    "BE": "Belgium", 
    "BA": "Bosnia and Herzegovina", 
    "BG": "Bulgaria",
    "HR": "Croatia", 
    "CY": "Cyprus", 
    "CZ": "Czech Republic", 
    "DK": "Denmark", 
    "EE": "Estonia",
    "FI": "Finland", 
    "FR": "France", 
    "GE": "Georgia", 
    "DE": "Germany", 
    "GR": "Greece",
    "HU": "Hungary", 
    "IS": "Iceland", 
    "IE": "Ireland", 
    "IT": "Italy", 
    "KZ": "Kazakhstan",
    "XK": "Kosovo", 
    "LV": "Latvia", 
    "LI": "Liechtenstein", 
    "LT": "Lithuania", 
    "LU": "Luxembourg",
    "MT": "Malta", 
    "MD": "Moldova", 
    "MC": "Monaco", 
    "ME": "Montenegro", 
    "NL": "Netherlands",
    "MK": "North Macedonia", 
    "NO": "Norway", 
    "PL": "Poland", 
    "PT": "Portugal", 
    "RO": "Romania",
    "RU": "Russia", 
    "SM": "San Marino", 
    "RS": "Serbia", 
    "SK": "Slovakia", 
    "SI": "Slovenia",
    "ES": "Spain", 
    "SE": "Sweden", 
    "CH": "Switzerland", 
    "TR": "Turkey", 
    "UA": "Ukraine",
    "GB": "United Kingdom", 
    "VA": "Vatican City"
}

def mostra_grafico(data, geo, title=None):
    plt.figure(figsize=(10,5))
    plt.plot(data.index, data.iloc[:,0], marker='o', linestyle='-')
    plt.title(f'Trend di Ricerca per "{data.columns[0]}" in {nazioni_dict[geo]}')
    plt.xlabel('Data')
    plt.ylabel('Interesse relativo')
    plt.grid(True, which='both', linestyle='--', linewidth=0.5)
    plt.tight_layout()
    plt.show()

def ricerca_trend():
    keyword = entry_keyword.get()
    geo = None

    if combo_nazioni.get():
        nome_nazione_selezionato = combo_nazioni.get()
        geo = [code for code, name in nazioni_dict.items() if name == nome_nazione_selezionato][0]

    if keyword and geo:
        pytrend = TrendReq()
        pytrend.build_payload(kw_list=[keyword], geo=geo)
        data = pytrend.interest_over_time()

        if not data.empty:
            mostra_grafico(data, geo)

        codice = ''.join(random.choices(string.digits, k=4))
        filename = f"{codice}_{geo}.txt"
        data.to_csv(filename)
        tk.messagebox.showinfo("Info", f"Risultato salvato in {filename}")
    else:
        tk.messagebox.showwarning("Attenzione", "Inserire una parola chiave e selezionare una nazione o un capoluogo.")

root = tk.Tk()
root.title("Ricerca Google Trends")

tk.Button(root, text="Mostra Query Correlate", command=show_related_queries).pack(pady=10)
tk.Button(root, text="Mostra Temi Correlati", command=show_related_topics).pack(pady=10)
tk.Button(root, text="Mostra Interesse per Regione", command=show_interest_by_region).pack(pady=10)

tk.Label(root, text="Parola chiave:").pack(pady=10)
entry_keyword = tk.Entry(root)
entry_keyword.pack(pady=10)

tk.Label(root, text="Seleziona una nazione:").pack(pady=10)
combo_nazioni = ttk.Combobox(root, values=list(nazioni_dict.values()))
combo_nazioni.pack(pady=10)

tk.Button(root, text="Ricerca Trend", command=ricerca_trend).pack(pady=20)

root.mainloop()