import numpy as np
import pandas as pd
import matplotlib.dates as mdates
from datetime import datetime
from statsmodels.tsa.seasonal import seasonal_decompose
import os
from sklearn.model_selection import train_test_split
# 热力图-------------
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
import numpy as np
import pandas as pd
import re
import matplotlib.dates as mdates
from datetime import datetime
from statsmodels.tsa.seasonal import seasonal_decompose
import os
# print(data_x)
# 热力图-------------
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
data1 = pd.read_excel("国内电影票房.xlsx") # 1 3 7 是 预测列
data1 = data1.fillna(0)
print(data1.columns) # 'SO2', 'NO2', 'PM10', 'CO', 'O3', 'PM2.5'
data1 = data1[['上座率', '场均人次', '综合票价', '综合票房(万元)', '综合票房占比', '大盘退票率', '排座占比', '场次', '排片占比', '分帐票价', '分帐票房(万元)']]
data1 = data1.astype(str)
# data1.replace('--', 0, inplace=True)
# data1.to_excel('国内电影票房.xlsx')
# 定义一个函数,用正则表达式匹配小数,并将匹配结果转换为浮点数
def extract_decimal(value):
match = re.search(r'[-+]?\d*\.\d+|\d+', value)
if match:
return float(match.group())
else:
return None
# 对DataFrame中的每一列应用这个函数
for col in data1.columns:
print('col:',col)
data1[col] = data1[col].apply(extract_decimal)
# 显示处理后的 DataFrame
print(data1.head(5))
print(data1.columns)# 'SO2', 'NO2', 'PM10', 'CO', 'O3', 'PM2.5'
data=data1[['上座率', '场均人次', '综合票价', '综合票房(万元)', '综合票房占比', '大盘退票率', '排座占比', '场次', '排片占比', '分帐票价', '分帐票房(万元)']]
print(data.values.shape)
print(data[:2])
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.subplots(figsize=(20, 50))
sns.heatmap(
data.corr(
method='spearman').round(5), annot=True)
plt.show()
# 示例数据,你可以替换为你自己的数据
# PM2.5 数据
# timestamps =data1['日期'].values
values = data['分帐票房(万元)'].values
# plt.plot(timestamps, values, marker='o', linestyle='-')
# plt.title('PM2.5 值变化')
# plt.xlabel('时间')
# plt.ylabel('PM2.5 值')
# plt.xticks(rotation=45) # 旋转 x 轴标签,使其更易读
# plt.grid(True) # 添加网格线
# plt.tight_layout() # 调整布局,防止标签被截断
# plt.show()
# 计算均值
mean = np.mean(values)
# 计算中位数
median = np.median(values)
# 计算标准差
std_dev = np.std(values)
# 计算方差
variance = np.var(values)
print(f"均值:{mean}")
print(f"中位数:{median}")
print(f"标准差:{std_dev}")
print(f"方差:{variance}")
# 设置图形大小import matplotlib.dates as mdates
# 创建箱线图
plt.figure(figsize=(6, 4))
sns.boxplot(data=values,color='orange')
plt.title('箱线图')
plt.show()
# 使用 seaborn 绘制核密度估计图
sns.kdeplot(values, shade=True,color='orange')
# 或者使用 sns.displot(data, kind='kde') # 绘制核密度估计图(新版 seaborn 中的 displot)
# 设置图表标题和标签
plt.title('密度图')
plt.xlabel('数据值')
plt.ylabel('密度')
# 显示图表
plt.show()
# 使用 seaborn 绘制小提琴图
sns.violinplot(data=values,color='orange')
# 设置图表标题和标签
plt.title('小提琴图')
plt.ylabel('数据值')
# 显示图表
plt.show()
# 计算特征与目标列的相关性
correlation_matrix = data.corr()
correlation_with_target = correlation_matrix['分帐票房(万元)'].abs().sort_values(ascending=False)
# 筛选与目标列相关性较高的特征
selected_features = correlation_with_target[correlation_with_target > 0.5].index
# 打印相关性排序
print("特征与目标列的相关性排序:")
print(correlation_with_target)
# 绘制柱状图显示相关性
plt.figure(figsize=(10, 6))
sns.barplot(x=correlation_with_target.values, y=correlation_with_target.index, palette='viridis')
plt.title('Feature Correlation with 分帐票房(万元)')
plt.xlabel('Correlation')
plt.ylabel('Feature')
plt.show()