文章目录
- 前言
- 一、数据分析
-
- [1. 数据分析代码实现](#1. 数据分析代码实现)
- [2. 分析后的数据截图](#2. 分析后的数据截图)
-
- [2.1 描述性分析结果数据](#2.1 描述性分析结果数据)
- [2.2 类别分布分析结果数据](#2.2 类别分布分析结果数据)
- [2.3 模式识别分析结果数据](#2.3 模式识别分析结果数据)
- [2.4 时间序列分析结果数据](#2.4 时间序列分析结果数据)
-
- [2.4.1 每年的电影发布数量](#2.4.1 每年的电影发布数量)
- [2.4.2 按年份的评分趋势](#2.4.2 按年份的评分趋势)
- [2.5 相关性分析结果数据](#2.5 相关性分析结果数据)
- 二、数据可视化
-
- [1. 描述性分析数据可视化](#1. 描述性分析数据可视化)
- [2. 类别分布分析数据可视化](#2. 类别分布分析数据可视化)
- [3. 模式识别分析数据可视化](#3. 模式识别分析数据可视化)
- [4. 时间序列分析数据可视化](#4. 时间序列分析数据可视化)
-
- [4.1 每年的电影发布数量数据可视化](#4.1 每年的电影发布数量数据可视化)
- [4.2 每年平均评分数据可视化](#4.2 每年平均评分数据可视化)
- [5. 相关性分析数据可视化](#5. 相关性分析数据可视化)
前言
在数据科学的领域,数据分析和可视化是理解和解释数据的重要工具。通过对数据的深入分析,我们能够揭示潜在的趋势、模式和关系,从而为决策提供有力支持。本项目旨在对从1905电影网爬取的电影数据进行全面的数据分析与可视化,帮助我们更好地理解电影行业的动态和特征。
本项目的分析分为几个主要部分:描述性分析、类别分布分析、模式识别分析、时间序列分析和相关性分析。我们将使用Python的Pandas库进行数据处理,并通过SQLAlchemy将分析结果存储到MySQL数据库中。此外,数据可视化将通过图表和图形展示分析结果,使得数据的解读更加直观和易于理解。
一、数据分析
1. 数据分析代码实现
python
import pandas as pd
from sqlalchemy import create_engine
def get_engine():
# 设置数据库连接信息
db_user = 'root'
db_password = 'zxcvbq'
db_host = '127.0.0.1'
db_port = '3306'
db_name = 'movie1905'
# 创建数据库引擎
return create_engine(f'mysql+pymysql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}')
def save_df_to_db(dataframe, table_name):
# 设置数据库连接信息
db_user = 'root'
db_password = 'zxcvbq'
db_host = '127.0.0.1' # 或者你的数据库主机地址
db_port = '3306' # MySQL默认端口是3306
db_name = 'movie1905'
# 创建数据库引擎
engine = create_engine(f'mysql+mysqlconnector://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}')
# 将df写入MySQL表
dataframe.to_sql(name=table_name, con=engine, if_exists='replace', index=False)
print("所有csv文件的数据已成功清洗并写入MySQL数据库")
def process_row(row, data_list):
director = row['movie_director']
actors = eval(row['movie_lead_actors'])
for actor in actors:
data_dict = {
'director': director,
'actor': actor
}
data_list.append(data_dict)
if __name__ == '__main__':
# 加载数据到DataFrame
query = "SELECT * FROM movie1905_china"
df = pd.read_sql(query, get_engine())
# 描述性分析
df_describe = df[['movie_duration', 'movie_rating']].describe().round(2)
save_df_to_db(df_describe.reset_index(), 'describe_analysis')
# 类别分布分析
df_category = df['movie_genres'].apply(lambda x: eval(x)).explode().value_counts()
save_df_to_db(df_category.reset_index(), 'category_analysis')
# 模式识别分析
df_copy = df.copy()
df_copy['movie_director'] = df_copy['movie_director'].replace('未知', None)
df_copy.dropna(subset=['movie_director', 'movie_lead_actors'], inplace=True)
df_mode = df_copy[['movie_director', 'movie_lead_actors']]
director_actor_list = []
df_mode.apply(lambda x: process_row(x, director_actor_list), axis=1)
df_director_actor = pd.DataFrame(director_actor_list)
df_schema = df_director_actor.groupby(['director', 'actor']).size().reset_index(name='count')
save_df_to_db(df_schema, 'mode_analysis')
# 时间序列分析
# 每年的电影发布数量
df_release_date = df.rename(columns={'movie_release_date': 'movie_release_year'})
df_year = df_release_date['movie_release_year'].str[0:4].value_counts()
save_df_to_db(df_year.reset_index(), 'year_amount_analysis')
# 按年份的评分趋势
df['movie_year'] = df['movie_release_date'].str[0:4]
year_rating = df.groupby('movie_year')['movie_rating'].agg(['mean', 'count']).round(1)
save_df_to_db(year_rating.reset_index(), 'year_rating_analysis')
# 相关性分析
df_corr = df[['movie_duration', 'movie_rating']].corr(method='pearson').round(2)
save_df_to_db(df_corr.reset_index(), 'corr_analysis')
2. 分析后的数据截图
2.1 描述性分析结果数据
2.2 类别分布分析结果数据
2.3 模式识别分析结果数据
2.4 时间序列分析结果数据
2.4.1 每年的电影发布数量
2.4.2 按年份的评分趋势
2.5 相关性分析结果数据
二、数据可视化
1. 描述性分析数据可视化
2. 类别分布分析数据可视化