如何做電商網(wǎng)站成都seo的方法
🤵?♂? 個人主頁:@艾派森的個人主頁
?🏻作者簡介:Python學(xué)習(xí)者
🐋 希望大家多多支持,我們一起進(jìn)步!😄
如果文章對你有幫助的話,
歡迎評論 💬點(diǎn)贊👍🏻 收藏 📂加關(guān)注+
喜歡大數(shù)據(jù)分析項目的小伙伴,希望可以多多支持該系列的其他文章
大數(shù)據(jù)分析案例-基于隨機(jī)森林算法預(yù)測人類預(yù)期壽命 |
大數(shù)據(jù)分析案例-基于隨機(jī)森林算法的商品評價情感分析 |
大數(shù)據(jù)分析案例-用RFM模型對客戶價值分析(聚類) |
大數(shù)據(jù)分析案例-對電信客戶流失分析預(yù)警預(yù)測 |
大數(shù)據(jù)分析案例-基于隨機(jī)森林模型對北京房價進(jìn)行預(yù)測 |
大數(shù)據(jù)分析案例-基于RFM模型對電商客戶價值分析 |
大數(shù)據(jù)分析案例-基于邏輯回歸算法構(gòu)建垃圾郵件分類器模型 |
大數(shù)據(jù)分析案例-基于決策樹算法構(gòu)建員工離職預(yù)測模型 |
大數(shù)據(jù)分析案例-基于KNN算法對茅臺股票進(jìn)行預(yù)測 |
大數(shù)據(jù)分析案例-基于多元線性回歸算法構(gòu)建廣告投放收益模型 |
大數(shù)據(jù)分析案例-基于隨機(jī)森林算法構(gòu)建返鄉(xiāng)人群預(yù)測模型 |
大數(shù)據(jù)分析案例-基于決策樹算法構(gòu)建金融反欺詐分類模型 |
目錄
1.項目背景
2.項目簡介
2.1項目說明
2.2數(shù)據(jù)說明
2.3技術(shù)工具
3.算法原理
4.項目實(shí)施步驟
4.1理解數(shù)據(jù)
4.2數(shù)據(jù)預(yù)處理
4.3探索性數(shù)據(jù)分析
4.4特征工程
4.5模型構(gòu)建
4.6模型評估
5.實(shí)驗(yàn)總結(jié)
源代碼
1.項目背景
????????電影票房預(yù)測一直是電影產(chǎn)業(yè)中的一個重要問題,對于制片方、發(fā)行方和影院等利益相關(guān)者而言,準(zhǔn)確地預(yù)測電影票房可以幫助他們做出更明智的決策。在電影產(chǎn)業(yè)中,投資決策、市場營銷策略、排片安排等方面的決策都受到電影票房預(yù)測的影響。因此,構(gòu)建一種準(zhǔn)確可靠的電影票房預(yù)測模型對于電影產(chǎn)業(yè)的發(fā)展具有重要意義。
研究背景主要包括以下幾個方面:
-
市場競爭激烈: 電影市場競爭激烈,每年推出大量新片。在這種競爭環(huán)境下,能夠提前了解一部電影可能取得的票房情況,對于選擇上映時機(jī)、進(jìn)行市場宣傳、確定投資規(guī)模等方面至關(guān)重要。
-
復(fù)雜多變的影響因素: 影響電影票房的因素眾多,包括但不限于演員陣容、導(dǎo)演水平、電影類型、上映時間、市場宣傳、觀眾口碑等。這些因素之間存在復(fù)雜的相互關(guān)系,傳統(tǒng)的分析方法難以全面考慮這些因素的綜合影響。
-
數(shù)據(jù)科學(xué)的應(yīng)用需求: 隨著數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)技術(shù)的發(fā)展,利用大量的電影數(shù)據(jù)進(jìn)行建模和預(yù)測成為可能。隨機(jī)森林算法是一種集成學(xué)習(xí)方法,具有高準(zhǔn)確性和強(qiáng)大的泛化能力,特別適用于處理大規(guī)模、高維度的數(shù)據(jù),因此成為構(gòu)建電影票房預(yù)測模型的理想選擇。
2.項目簡介
2.1項目說明
????????本研究旨在利用隨機(jī)森林算法構(gòu)建一種高效的電影票房預(yù)測模型,通過綜合考慮各種影響因素,提高預(yù)測準(zhǔn)確性,為電影產(chǎn)業(yè)相關(guān)方提供科學(xué)的決策依據(jù)。通過該研究,可以更好地理解影響電影票房的關(guān)鍵因素,為電影從業(yè)者提供更全面的市場分析和預(yù)測服務(wù)。
2.2數(shù)據(jù)說明
????????該數(shù)據(jù)集來源于kaggle,該數(shù)據(jù)集包含1995年至2018年上映的電影類型統(tǒng)計數(shù)據(jù),原始數(shù)據(jù)集共有300條,9個變量,各變量含義解釋如下:
Genre:電影的類別或類型。(分類)
Year:電影發(fā)行的年份。(數(shù)字)
Movies Released :特定類型和年份發(fā)行的電影數(shù)量。(數(shù)字)
Gross:該類型和年份的電影產(chǎn)生的總收入。(數(shù)字)
Tickets Sold:該類型和年份的電影售出門票總數(shù)。(數(shù)字)
Inflation-Adjusted Gross:考慮到貨幣價值隨時間的變化,根據(jù)通貨膨脹進(jìn)行調(diào)整的總收入。(數(shù)字)
Top Movie:該類型和年份中票房最高的電影的標(biāo)題。(文本)
Top Movie Gross (That Year):該類型和年份中票房最高的電影產(chǎn)生的總收入。(數(shù)字)
Top Movie Inflation-Adjusted Gross (That Year):根據(jù)該類型和年份的通貨膨脹調(diào)整后票房最高的電影的總收入。(數(shù)字)
2.3技術(shù)工具
Python版本:3.9
代碼編輯器:jupyter notebook
3.算法原理
????????隨機(jī)森林是一種有監(jiān)督學(xué)習(xí)算法。就像它的名字一樣,它創(chuàng)建了一個森林,并使它擁有某種方式隨機(jī)性。所構(gòu)建的“森林”是決策樹的集成,大部分時候都是用“bagging”方法訓(xùn)練的。bagging 方法,即 bootstrapaggregating,采用的是隨機(jī)有放回的選擇訓(xùn)練數(shù)據(jù)然后構(gòu)造分類器,最后組合學(xué)習(xí)到的模型來增加整體的效果。簡而言之,隨機(jī)森林建立了多個決策樹,并將它們合并在一起以獲得更準(zhǔn)確和穩(wěn)定的預(yù)測。其一大優(yōu)勢在于它既可用于分類,也可用于回歸問題,這兩類問題恰好構(gòu)成了當(dāng)前的大多數(shù)機(jī)器學(xué)習(xí)系統(tǒng)所需要面對的。
????????隨機(jī)森林分類器使用所有的決策樹分類器以及 bagging 分類器的超參數(shù)來控制整體結(jié)構(gòu)。與其先構(gòu)建 bagging分類器,并將其傳遞給決策樹分類器,我們可以直接使用隨機(jī)森林分類器類,這樣對于決策樹而言,更加方便和優(yōu)化。要注意的是,回歸問題同樣有一個隨機(jī)森林回歸器與之相對應(yīng)。
????????隨機(jī)森林算法中樹的增長會給模型帶來額外的隨機(jī)性。與決策樹不同的是,每個節(jié)點(diǎn)被分割成最小化誤差的最佳指標(biāo),在隨機(jī)森林中我們選擇隨機(jī)選擇的指標(biāo)來構(gòu)建最佳分割。因此,在隨機(jī)森林中,僅考慮用于分割節(jié)點(diǎn)的隨機(jī)子集,甚至可以通過在每個指標(biāo)上使用隨機(jī)閾值來使樹更加隨機(jī),而不是如正常的決策樹一樣搜索最佳閾值。這個過程產(chǎn)生了廣泛的多樣性,通常可以得到更好的模型。
4.項目實(shí)施步驟
4.1理解數(shù)據(jù)
導(dǎo)入數(shù)據(jù)分析常用的第三方庫并加載數(shù)據(jù)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import plotly.subplots as spdf = pd.read_csv("movies_data.csv")
df.head()
查看數(shù)據(jù)大小
?
查看數(shù)據(jù)基本信息
查看數(shù)值型變量的描述性統(tǒng)計
查看非數(shù)值型變量的描述性統(tǒng)計
4.2數(shù)據(jù)預(yù)處理
統(tǒng)計缺失值情況
從結(jié)果來看,不存在缺失值?
檢測是否存在重復(fù)值?
?
結(jié)果為False,說明不存在
4.3探索性數(shù)據(jù)分析
基于門票銷售和發(fā)行數(shù)量的流行類型
# 基于門票銷售和發(fā)行數(shù)量的流行類型
# 根據(jù)上映的電影數(shù)量找到受歡迎的類型
genre_movies_released = df.groupby('Genre')['Movies Released'].sum().sort_values(ascending=False)
print("Popular genres based on Movies Released:")
print(genre_movies_released.head())
# 根據(jù)售出的門票總數(shù)來查找受歡迎的類型
genre_tickets_sold = df.groupby('Genre')['Tickets Sold'].sum().sort_values(ascending=False)
print("\nPopular genres based on Tickets Sold:")
print(genre_tickets_sold.head())
fig, axes = plt.subplots(2, 1, figsize=(10, 8))
genre_movies_released.head().plot(kind='bar', ax=axes[0], color='skyblue')
axes[0].set_title('Top Genres by Movies Released')
axes[0].set_ylabel('Total Movies Released')
genre_tickets_sold.head().plot(kind='bar', ax=axes[1], color='lightcoral')
axes[1].set_title('Top Genres by Tickets Sold')
axes[1].set_ylabel('Total Tickets Sold')
plt.tight_layout()
plt.show()
類型和收益分析
# 類型和收益分析
genre_gross = df.groupby('Genre')['Gross'].sum().sort_values(ascending=False).head()
genre_inflation_adjusted_gross = df.groupby('Genre')['Inflation-Adjusted Gross'].sum().sort_values(ascending=False).head()
genre_top_movie_gross = df.groupby('Genre')['Top Movie Gross (That Year)'].max().sort_values(ascending=False).head()
fig = make_subplots(rows=3, cols=1, subplot_titles=['Top Genres by Gross Revenue', 'Top Genres by Inflation-Adjusted Gross Revenue', 'Top Genres by Top Movie Gross (That Year)'])
fig.add_trace(go.Bar(x=genre_gross.index, y=genre_gross.values, name='Gross Revenue', marker_color='skyblue'), row=1, col=1)
fig.add_trace(go.Bar(x=genre_inflation_adjusted_gross.index, y=genre_inflation_adjusted_gross.values, name='Inflation-Adjusted Gross Revenue', marker_color='lightcoral'), row=2, col=1)
fig.add_trace(go.Bar(x=genre_top_movie_gross.index, y=genre_top_movie_gross.values, name='Top Movie Gross (That Year)', marker_color='lightgreen'), row=3, col=1)
fig.update_layout(height=900, showlegend=False, title_text="Financial Success of Genres")
fig.update_xaxes(title_text="Genres", row=3, col=1)
fig.update_yaxes(title_text="Total Gross Revenue", row=1, col=1)
fig.update_yaxes(title_text="Total Inflation-Adjusted Gross Revenue", row=2, col=1)
fig.update_yaxes(title_text="Top Movie Gross (That Year)", row=3, col=1)
fig.show()
多年來的類型趨勢和分析
# 多年來的類型趨勢和分析
selected_genres = ['Action', 'Comedy', 'Drama', 'Adventure']
filtered_df = df[df['Genre'].isin(selected_genres)]
fig = px.line(filtered_df, x='Year', y='Movies Released', color='Genre',title='Movie Releases Over Time for Selected Genres',labels={'Movies Released': 'Number of Movies Released'},line_shape='linear')
fig.show()# 為不同年份的總收入創(chuàng)建一個交互式折線圖
fig = px.line(filtered_df, x='Year', y='Gross', color='Genre',title='Gross Revenue Over Time for Selected Genres',labels={'Gross': 'Total Gross Revenue'},line_shape='linear')
fig.show()
一段時間內(nèi)選定類型中票房最高的電影
# 一段時間內(nèi)選定類型中票房最高的電影
selected_genres = ['Action', 'Comedy', 'Drama', 'Adventure']
filtered_df = df[df['Genre'].isin(selected_genres)]
# 創(chuàng)建一個交互式條形圖來顯示每種類型和年份中票房最高的電影
fig = px.bar(filtered_df, x='Year', y='Top Movie Gross (That Year)', color='Genre',title='Highest-Grossing Movies in Selected Genres Over Time',labels={'Top Movie Gross (That Year)': 'Gross Revenue'},text='Top Movie', height=500)
fig.update_traces(textposition='outside')
fig.show()
多年來的類型分布
# 多年來的類型分布
# 多年來類型分布的堆疊區(qū)域圖
fig = px.area(df, x='Year', y='Movies Released', color='Genre',title='Genre Distribution Over the Years',labels={'Movies Released': 'Number of Movies Released'},height=500)
fig.show()
受眾參與分析
# 受眾參與分析
# 觀眾參與的散點(diǎn)圖
fig = px.scatter(df, x='Tickets Sold', y='Gross', color='Genre',title='Audience Engagement by Genre',labels={'Tickets Sold': 'Number of Tickets Sold', 'Gross': 'Total Gross Revenue'},height=500)
fig.show()
歷年最佳電影表現(xiàn)
# 歷年最佳電影表現(xiàn)
# 隨時間變化的頂級電影表現(xiàn)的折線圖
fig = px.line(df, x='Year', y='Top Movie Gross (That Year)', color='Genre',title='Top Movie Performance Over Time',labels={'Top Movie Gross (That Year)': 'Gross Revenue'},height=500)
fig.show()
按類型劃分的每部電影平均收入
# 按類型劃分的每部電影平均收入
# 按類型計算每部電影的平均收入
df['Average Revenue per Movie'] = df['Gross'] / df['Movies Released']
# 按類型劃分的每部電影平均收入柱狀圖
fig = px.bar(df, x='Genre', y='Average Revenue per Movie',title='Average Revenue per Movie by Genre',labels={'Average Revenue per Movie': 'Average Revenue per Movie'},height=500)
fig.show()
不同類型的門票銷售和發(fā)行
# 不同類型的門票銷售和發(fā)行
fig = px.violin(df, x='Genre', y='Tickets Sold',title='Genre-wise Ticket Sales Distribution',labels={'Tickets Sold': 'Number of Tickets Sold'},height=500)
fig.show()
通貨膨脹調(diào)整后總收益的類型趨勢
# 通貨膨脹調(diào)整后總收益的類型趨勢
fig = px.line(df, x='Year', y='Inflation-Adjusted Gross', color='Genre',title='Genre Trends in Inflation-Adjusted Gross Revenue',labels={'Inflation-Adjusted Gross': 'Inflation-Adjusted Gross Revenue'},height=500)
fig.show()
每個類型和收入的頂級電影
# 每個類型和收入的頂級電影
unique_top_movies_count = df.groupby('Genre')['Top Movie'].nunique().sort_values(ascending=False)
top_movies_gross = df.groupby('Top Movie')['Top Movie Gross (That Year)'].max().sort_values(ascending=False).head(10)
fig = sp.make_subplots(rows=3, cols=1, subplot_titles=['Count of Unique Top Movies per Genre', 'Top Movies with the Highest Gross Revenue', 'Distribution of Gross Revenue for Top Movies'])
fig.add_trace(go.Bar(x=unique_top_movies_count.index, y=unique_top_movies_count.values),row=1, col=1)
fig.add_trace(go.Bar(x=top_movies_gross.index, y=top_movies_gross.values),row=2, col=1)
fig.add_trace(go.Box(x=df['Top Movie'], y=df['Top Movie Gross (That Year)']),row=3, col=1)
fig.update_layout(height=1000, showlegend=False, title_text="Top Movie Analysis")
fig.show()
4.4特征工程
導(dǎo)入第三方庫并準(zhǔn)備建模需要的數(shù)據(jù)
from sklearn.model_selection import KFold, cross_val_predict
from sklearn.ensemble import RandomForestRegressor
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.metrics import mean_squared_error
dff = df.copy()
categorical_features = ['Genre'] # 假設(shè)“類型”是一個分類變量
numerical_features = ['Year', 'Movies Released']
target_variable = 'Tickets Sold'# 篩選DataFrame以僅包含相關(guān)列
data = df[['Year', 'Movies Released', 'Genre', 'Tickets Sold', 'Gross']]# 將數(shù)據(jù)拆分為特征和目標(biāo)變量
X = data[['Year', 'Movies Released', 'Genre', 'Gross']]
y = data[target_variable]
4.5模型構(gòu)建
初始化模型,創(chuàng)建管道
# 定義分類編碼的預(yù)處理器
preprocessor = ColumnTransformer(transformers=[('cat', OneHotEncoder(), categorical_features),],remainder='passthrough'
)# 初始化隨機(jī)森林回歸模型
model = RandomForestRegressor(n_estimators=100, random_state=42)# 創(chuàng)建帶有預(yù)處理和模型的管道
pipeline = Pipeline([('preprocessor', preprocessor),('model', model)
])
交叉驗(yàn)證
# 初始化KFold以進(jìn)行交叉驗(yàn)證
kf = KFold(n_splits=5, shuffle=True, random_state=42)
# 進(jìn)行k-fold交叉驗(yàn)證并進(jìn)行預(yù)測
predictions = cross_val_predict(pipeline, X, y, cv=kf)
# 評估模型性能
mse = mean_squared_error(y, predictions)
print(f'Mean Squared Error: {mse}')
?
4.6模型評估
# 可視化實(shí)際值和預(yù)測值
plt.scatter(y, predictions)
plt.xlabel('Actual Tickets Sold')
plt.ylabel('Predicted Tickets Sold')
plt.title('Actual vs. Predicted Tickets Sold')
plt.show()
5.實(shí)驗(yàn)總結(jié)
? ? ? ? 本實(shí)驗(yàn)通過對電影數(shù)據(jù)進(jìn)行數(shù)據(jù)可視化、特征工程、建模分析,使用隨機(jī)森林算法構(gòu)建預(yù)測模型。總的來說,基于隨機(jī)森林算法構(gòu)建的電影票房預(yù)測模型為電影產(chǎn)業(yè)提供了一種強(qiáng)大的工具。然而,對于實(shí)際應(yīng)用,還需要綜合考慮業(yè)務(wù)背景、市場趨勢等因素,將模型預(yù)測結(jié)果與實(shí)際情況相結(jié)合,形成更全面的決策依據(jù)。
心得與體會:
通過這次Python項目實(shí)戰(zhàn),我學(xué)到了許多新的知識,這是一個讓我把書本上的理論知識運(yùn)用于實(shí)踐中的好機(jī)會。原先,學(xué)的時候感嘆學(xué)的資料太難懂,此刻想來,有些其實(shí)并不難,關(guān)鍵在于理解。
在這次實(shí)戰(zhàn)中還鍛煉了我其他方面的潛力,提高了我的綜合素質(zhì)。首先,它鍛煉了我做項目的潛力,提高了獨(dú)立思考問題、自我動手操作的潛力,在工作的過程中,復(fù)習(xí)了以前學(xué)習(xí)過的知識,并掌握了一些應(yīng)用知識的技巧等
在此次實(shí)戰(zhàn)中,我還學(xué)會了下面幾點(diǎn)工作學(xué)習(xí)心態(tài):
1)繼續(xù)學(xué)習(xí),不斷提升理論涵養(yǎng)。在信息時代,學(xué)習(xí)是不斷地汲取新信息,獲得事業(yè)進(jìn)步的動力。作為一名青年學(xué)子更就應(yīng)把學(xué)習(xí)作為持續(xù)工作用心性的重要途徑。走上工作崗位后,我會用心響應(yīng)單位號召,結(jié)合工作實(shí)際,不斷學(xué)習(xí)理論、業(yè)務(wù)知識和社會知識,用先進(jìn)的理論武裝頭腦,用精良的業(yè)務(wù)知識提升潛力,以廣博的社會知識拓展視野。
2)努力實(shí)踐,自覺進(jìn)行主角轉(zhuǎn)化。只有將理論付諸于實(shí)踐才能實(shí)現(xiàn)理論自身的價值,也只有將理論付諸于實(shí)踐才能使理論得以檢驗(yàn)。同樣,一個人的價值也是透過實(shí)踐活動來實(shí)現(xiàn)的,也只有透過實(shí)踐才能鍛煉人的品質(zhì),彰顯人的意志。
3)提高工作用心性和主動性。實(shí)習(xí),是開端也是結(jié)束。展此刻自我面前的是一片任自我馳騁的沃土,也分明感受到了沉甸甸的職責(zé)。在今后的工作和生活中,我將繼續(xù)學(xué)習(xí),深入實(shí)踐,不斷提升自我,努力創(chuàng)造業(yè)績,繼續(xù)創(chuàng)造更多的價值。
這次Python實(shí)戰(zhàn)不僅僅使我學(xué)到了知識,豐富了經(jīng)驗(yàn)。也幫忙我縮小了實(shí)踐和理論的差距。在未來的工作中我會把學(xué)到的理論知識和實(shí)踐經(jīng)驗(yàn)不斷的應(yīng)用到實(shí)際工作中,為實(shí)現(xiàn)理想而努力。
源代碼
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import plotly.subplots as spdf = pd.read_csv("movies_data.csv")
df.head()
df.shape
df.info()
df.describe()
df.describe(include='O')
df.isnull().sum()
any(df.duplicated())
# 基于門票銷售和發(fā)行數(shù)量的流行類型
# 根據(jù)上映的電影數(shù)量找到受歡迎的類型
genre_movies_released = df.groupby('Genre')['Movies Released'].sum().sort_values(ascending=False)
print("Popular genres based on Movies Released:")
print(genre_movies_released.head())
# 根據(jù)售出的門票總數(shù)來查找受歡迎的類型
genre_tickets_sold = df.groupby('Genre')['Tickets Sold'].sum().sort_values(ascending=False)
print("\nPopular genres based on Tickets Sold:")
print(genre_tickets_sold.head())
fig, axes = plt.subplots(2, 1, figsize=(10, 8))
genre_movies_released.head().plot(kind='bar', ax=axes[0], color='skyblue')
axes[0].set_title('Top Genres by Movies Released')
axes[0].set_ylabel('Total Movies Released')
genre_tickets_sold.head().plot(kind='bar', ax=axes[1], color='lightcoral')
axes[1].set_title('Top Genres by Tickets Sold')
axes[1].set_ylabel('Total Tickets Sold')
plt.tight_layout()
plt.show()
# 類型和收益分析
genre_gross = df.groupby('Genre')['Gross'].sum().sort_values(ascending=False).head()
genre_inflation_adjusted_gross = df.groupby('Genre')['Inflation-Adjusted Gross'].sum().sort_values(ascending=False).head()
genre_top_movie_gross = df.groupby('Genre')['Top Movie Gross (That Year)'].max().sort_values(ascending=False).head()
fig = make_subplots(rows=3, cols=1, subplot_titles=['Top Genres by Gross Revenue', 'Top Genres by Inflation-Adjusted Gross Revenue', 'Top Genres by Top Movie Gross (That Year)'])
fig.add_trace(go.Bar(x=genre_gross.index, y=genre_gross.values, name='Gross Revenue', marker_color='skyblue'), row=1, col=1)
fig.add_trace(go.Bar(x=genre_inflation_adjusted_gross.index, y=genre_inflation_adjusted_gross.values, name='Inflation-Adjusted Gross Revenue', marker_color='lightcoral'), row=2, col=1)
fig.add_trace(go.Bar(x=genre_top_movie_gross.index, y=genre_top_movie_gross.values, name='Top Movie Gross (That Year)', marker_color='lightgreen'), row=3, col=1)
fig.update_layout(height=900, showlegend=False, title_text="Financial Success of Genres")
fig.update_xaxes(title_text="Genres", row=3, col=1)
fig.update_yaxes(title_text="Total Gross Revenue", row=1, col=1)
fig.update_yaxes(title_text="Total Inflation-Adjusted Gross Revenue", row=2, col=1)
fig.update_yaxes(title_text="Top Movie Gross (That Year)", row=3, col=1)
fig.show()
# 多年來的類型趨勢和分析
selected_genres = ['Action', 'Comedy', 'Drama', 'Adventure']
filtered_df = df[df['Genre'].isin(selected_genres)]
fig = px.line(filtered_df, x='Year', y='Movies Released', color='Genre',title='Movie Releases Over Time for Selected Genres',labels={'Movies Released': 'Number of Movies Released'},line_shape='linear')
fig.show()# 為不同年份的總收入創(chuàng)建一個交互式折線圖
fig = px.line(filtered_df, x='Year', y='Gross', color='Genre',title='Gross Revenue Over Time for Selected Genres',labels={'Gross': 'Total Gross Revenue'},line_shape='linear')
fig.show()
# 一段時間內(nèi)選定類型中票房最高的電影
selected_genres = ['Action', 'Comedy', 'Drama', 'Adventure']
filtered_df = df[df['Genre'].isin(selected_genres)]
# 創(chuàng)建一個交互式條形圖來顯示每種類型和年份中票房最高的電影
fig = px.bar(filtered_df, x='Year', y='Top Movie Gross (That Year)', color='Genre',title='Highest-Grossing Movies in Selected Genres Over Time',labels={'Top Movie Gross (That Year)': 'Gross Revenue'},text='Top Movie', height=500)
fig.update_traces(textposition='outside')
fig.show()
# 多年來的類型分布
# 多年來類型分布的堆疊區(qū)域圖
fig = px.area(df, x='Year', y='Movies Released', color='Genre',title='Genre Distribution Over the Years',labels={'Movies Released': 'Number of Movies Released'},height=500)
fig.show()
# 受眾參與分析
# 觀眾參與的散點(diǎn)圖
fig = px.scatter(df, x='Tickets Sold', y='Gross', color='Genre',title='Audience Engagement by Genre',labels={'Tickets Sold': 'Number of Tickets Sold', 'Gross': 'Total Gross Revenue'},height=500)
fig.show()
# 歷年最佳電影表現(xiàn)
# 隨時間變化的頂級電影表現(xiàn)的折線圖
fig = px.line(df, x='Year', y='Top Movie Gross (That Year)', color='Genre',title='Top Movie Performance Over Time',labels={'Top Movie Gross (That Year)': 'Gross Revenue'},height=500)
fig.show()
# 按類型劃分的每部電影平均收入
# 按類型計算每部電影的平均收入
df['Average Revenue per Movie'] = df['Gross'] / df['Movies Released']
# 按類型劃分的每部電影平均收入柱狀圖
fig = px.bar(df, x='Genre', y='Average Revenue per Movie',title='Average Revenue per Movie by Genre',labels={'Average Revenue per Movie': 'Average Revenue per Movie'},height=500)
fig.show()
# 不同類型的門票銷售和發(fā)行
fig = px.violin(df, x='Genre', y='Tickets Sold',title='Genre-wise Ticket Sales Distribution',labels={'Tickets Sold': 'Number of Tickets Sold'},height=500)
fig.show()
# 通貨膨脹調(diào)整后總收益的類型趨勢
fig = px.line(df, x='Year', y='Inflation-Adjusted Gross', color='Genre',title='Genre Trends in Inflation-Adjusted Gross Revenue',labels={'Inflation-Adjusted Gross': 'Inflation-Adjusted Gross Revenue'},height=500)
fig.show()
# 每個類型和收入的頂級電影
unique_top_movies_count = df.groupby('Genre')['Top Movie'].nunique().sort_values(ascending=False)
top_movies_gross = df.groupby('Top Movie')['Top Movie Gross (That Year)'].max().sort_values(ascending=False).head(10)
fig = sp.make_subplots(rows=3, cols=1, subplot_titles=['Count of Unique Top Movies per Genre', 'Top Movies with the Highest Gross Revenue', 'Distribution of Gross Revenue for Top Movies'])
fig.add_trace(go.Bar(x=unique_top_movies_count.index, y=unique_top_movies_count.values),row=1, col=1)
fig.add_trace(go.Bar(x=top_movies_gross.index, y=top_movies_gross.values),row=2, col=1)
fig.add_trace(go.Box(x=df['Top Movie'], y=df['Top Movie Gross (That Year)']),row=3, col=1)
fig.update_layout(height=1000, showlegend=False, title_text="Top Movie Analysis")
fig.show()
from sklearn.model_selection import KFold, cross_val_predict
from sklearn.ensemble import RandomForestRegressor
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.metrics import mean_squared_error
dff = df.copy()
categorical_features = ['Genre'] # 假設(shè)“類型”是一個分類變量
numerical_features = ['Year', 'Movies Released']
target_variable = 'Tickets Sold'# 篩選DataFrame以僅包含相關(guān)列
data = df[['Year', 'Movies Released', 'Genre', 'Tickets Sold', 'Gross']]# 將數(shù)據(jù)拆分為特征和目標(biāo)變量
X = data[['Year', 'Movies Released', 'Genre', 'Gross']]
y = data[target_variable]
# 定義分類編碼的預(yù)處理器
preprocessor = ColumnTransformer(transformers=[('cat', OneHotEncoder(), categorical_features),],remainder='passthrough'
)# 初始化隨機(jī)森林回歸模型
model = RandomForestRegressor(n_estimators=100, random_state=42)# 創(chuàng)建帶有預(yù)處理和模型的管道
pipeline = Pipeline([('preprocessor', preprocessor),('model', model)
])
# 初始化KFold以進(jìn)行交叉驗(yàn)證
kf = KFold(n_splits=5, shuffle=True, random_state=42)
# 進(jìn)行k-fold交叉驗(yàn)證并進(jìn)行預(yù)測
predictions = cross_val_predict(pipeline, X, y, cv=kf)
# 評估模型性能
mse = mean_squared_error(y, predictions)
print(f'Mean Squared Error: {mse}')
# 可視化實(shí)際值和預(yù)測值
plt.scatter(y, predictions)
plt.xlabel('Actual Tickets Sold')
plt.ylabel('Predicted Tickets Sold')
plt.title('Actual vs. Predicted Tickets Sold')
plt.show()