传媒网站建设方案,学校网站开发程序,wordpress字不能显示,南宁市哪里有帮搞网页设计的目录 问题 11.1 对这些玻璃文物的表面风化与其玻璃类型、纹饰和颜色的关系进行分析数据探索 -- 单个分类变量的绘图树形图条形图扇形图雷达图 Cramer’s V 相关分析统计检验列联表分析卡方检验Fisher检验 绘图堆积条形图分组条形图 分类模型Logistic回归随机森林 import matplo… 目录 问题 11.1 对这些玻璃文物的表面风化与其玻璃类型、纹饰和颜色的关系进行分析数据探索 -- 单个分类变量的绘图树形图条形图扇形图雷达图 Cramer’s V 相关分析统计检验列联表分析卡方检验Fisher检验 绘图堆积条形图分组条形图 分类模型Logistic回归随机森林 import matplotlib.pyplot as plt
# Linux show Chinese characters *** important
plt.rcParams[font.family] WenQuanYi Micro Hei import warnings
warnings.filterwarnings(ignore)import pandas as pd# read by default 1st sheet of an excel file
path /home/shiyu/Desktop/path_acdemic/ant/数模/历年题目/2022/附件.xlsx
d1 pd.read_excel(path, sheet_name表单1)
d2 pd.read_excel(path, sheet_name表单2)
d3 pd.read_excel(path, sheet_name表单3)print(d1.shape)
print(d2.shape)
print(d3.shape)(58, 5)
(69, 15)
(8, 16)问题 1
1.1 对这些玻璃文物的表面风化与其玻璃类型、纹饰和颜色的关系进行分析
数据探索 – 单个分类变量的绘图 树形图
https://www.geeksforgeeks.org/treemaps-in-python-using-squarify/
import seaborn as sb
import matplotlib.pyplot as plt
import squarifydata list(d1[颜色].value_counts())
labels list(d1[颜色].value_counts().index)plt.rcParams[figure.dpi] 300
plt.rcParams[savefig.dpi] 300plt.figure(figsize(15,8))
squarify.plot(sizesdata, labellabels, text_kwargs{fontsize: 20},colorsb.color_palette(Spectral,len(data))) plt.axis(off) (0.0, 100.0, 0.0, 100.0)条形图
df pd.DataFrame(d1[颜色].value_counts())
df[颜色] df.index
dfcount颜色颜色浅蓝20浅蓝蓝绿15蓝绿深绿7深绿紫4紫浅绿3浅绿深蓝2深蓝黑2黑绿1绿
import matplotlib.pyplot as plt
import plotly.express as px
import numpy as np# Linux show Chinese characters *** important
plt.rcParams[font.family] WenQuanYi Micro Hei fig px.bar(df, x颜色, ycount, title颜色类别计数)
# center title
fig.update_layout(title_x0.5)
# remove background color
fig.update_layout({
plot_bgcolor: rgba(0, 0, 0, 0),
paper_bgcolor: rgba(0, 0, 0, 0),
})fig.show()扇形图
print(d1[纹饰].value_counts())纹饰
C 30
A 22
B 6
Name: count, dtype: int64import plotly.express as px
fig px.pie(d1, names纹饰, title玻璃纹饰类别的比例分布)
# center title
fig.update_layout(title_x0.5)
fig.show()print(d1[类型].value_counts())
fig px.pie(d1, names类型, title玻璃类型的比例分布)
# center title
fig.update_layout(title_x0.5)
fig.show()类型
铅钡 40
高钾 18
Name: count, dtype: int64print(d1[颜色].value_counts())
fig px.pie(d1, names颜色, title玻璃颜色的比例分布)
# center title
fig.update_layout(title_x0.5)
fig.show()颜色
浅蓝 20
蓝绿 15
深绿 7
紫 4
浅绿 3
深蓝 2
黑 2
绿 1
Name: count, dtype: int64print(d1[表面风化].value_counts())
fig px.pie(d1, names表面风化, title表面风化和未风化的比例分布)
# center title
fig.update_layout(title_x0.5)
fig.show()表面风化
风化 34
无风化 24
Name: count, dtype: int64雷达图
https://plotly.com/python/radar-chart/
df pd.DataFrame(d1[颜色].value_counts())
df[颜色] df.index
dfcount颜色颜色浅蓝20浅蓝蓝绿15蓝绿深绿7深绿紫4紫浅绿3浅绿深蓝2深蓝黑2黑绿1绿
import plotly.express as px
import pandas as pd
plt.rcParams[figure.dpi] 300
plt.rcParams[savefig.dpi] 300fig px.line_polar(df, rcount, theta颜色, line_closeFalse,title颜色各类别计数)
fig.update_traces(filltoself)
# center title
fig.update_layout(title_x0.5)
fig.show()表面风化 vs 纹饰
Cramer’s V 相关分析
Cramer’s V: 用于计算名义分类变量之间的相关性。
理论 https://www.ibm.com/docs/en/cognos-analytics/11.1.0?topicterms-cramrs-v
代码 https://www.geeksforgeeks.org/how-to-calculate-cramers-v-in-python/
crosstab pd.crosstab(d1[表面风化],d1[纹饰])# dataframe to numpy
d crosstab.to_numpy()
darray([[11, 0, 13],[11, 6, 17]])import scipy.stats as stats
import numpy as np X2 stats.chi2_contingency(d, correctionFalse)[0]
N np.sum(d)
minimum_dimension min(d.shape)-1# Calculate Cramers V
result np.sqrt((X2/N) / minimum_dimension) Cramer’s V 相关系数 表面风化 vs 纹饰 str(result)Cramer’s V 相关系数 表面风化 vs 纹饰 0.29233117579189066crosstab pd.crosstab(d1[表面风化],d1[类型])
d crosstab.to_numpy()X2 stats.chi2_contingency(d, correctionFalse)[0]
N np.sum(d)
minimum_dimension min(d.shape)-1# Calculate Cramers V
result np.sqrt((X2/N) / minimum_dimension) Cramer’s V 相关系数 表面风化 vs 类型 str(result)Cramer’s V 相关系数 表面风化 vs 类型 0.3444233600968322crosstab pd.crosstab(d1[表面风化],d1[颜色])
d crosstab.to_numpy()X2 stats.chi2_contingency(d, correctionFalse)[0]
N np.sum(d)
minimum_dimension min(d.shape)-1# Calculate Cramers V
result np.sqrt((X2/N) / minimum_dimension) Cramer’s V 相关系数 表面风化 vs 颜色 str(result)Cramer’s V 相关系数 表面风化 vs 颜色 0.34121631178560535统计检验
列联表分析
crosstab pd.crosstab(d1[表面风化],d1[纹饰])
crosstab纹饰ABC表面风化无风化11013风化11617
卡方检验
https://www.geeksforgeeks.org/python-pearsons-chi-square-test/
import scipy.stats
from scipy.stats import chi2_contingency
# 表面风化 vs 纹饰
crosstab pd.crosstab(d1[表面风化],d1[纹饰])
stat, p, dof, expected chi2_contingency(crosstab)
# interpret p-value
alpha 0.05
print(p value is str(p))
if p alpha:print(Dependent (reject H0))
else:print(Independent (H0 holds true))p value is 0.08388839673210007
Independent (H0 holds true)# 表面风化 vs 类型
crosstab pd.crosstab(d1[表面风化],d1[类型])
stat, p, dof, expected chi2_contingency(crosstab)
# interpret p-value
alpha 0.05
print(p value is str(p))
if p alpha:print(Dependent (reject H0))
else:print(Independent (H0 holds true))p value is 0.019548014331003307
Dependent (reject H0)# 表面风化 vs 颜色
crosstab pd.crosstab(d1[表面风化],d1[颜色])
stat, p, dof, expected chi2_contingency(crosstab)
# interpret p-value
alpha 0.05
print(p value is str(p))
if p alpha:print(Dependent (reject H0))
else:print(Independent (H0 holds true))p value is 0.5066496855976865
Independent (H0 holds true)Fisher检验
pd.crosstab(d1[表面风化],d1[颜色])颜色浅绿浅蓝深绿深蓝紫绿蓝绿黑表面风化无风化28322160风化112402092
import FisherExact as fsprint(表面风化 vs 颜色)
print(fs.fisher_exact(pd.crosstab(d1[表面风化],d1[颜色])))表面风化 vs 颜色
0.0绘图
堆积条形图
表面风化 vs 纹饰
crosstab pd.crosstab(d1[表面风化],d1[纹饰])
crosstab纹饰ABC表面风化无风化11013风化11617
dp [[无风化, 纹饰A, 11], [无风化, 纹饰B, 0],[无风化, 纹饰C, 13],[风化, 纹饰A, 11],[风化, 纹饰B, 6],[风化, 纹饰C, 17]]# Create the pandas DataFrame
df pd.DataFrame(dp, columns[表面风化, 纹饰, 计数])
df表面风化纹饰计数0无风化纹饰A111无风化纹饰B02无风化纹饰C133风化纹饰A114风化纹饰B65风化纹饰C17
import matplotlib.pyplot as plt
import plotly.express as px
import numpy as np# Linux show Chinese characters *** important
plt.rcParams[font.family] WenQuanYi Micro Hei fig px.bar(df, x表面风化, y计数, color纹饰, title表面风化与纹饰的关系)
# center title
fig.update_layout(title_x0.5)
# remove background color
fig.update_layout({
plot_bgcolor: rgba(0, 0, 0, 0),
paper_bgcolor: rgba(0, 0, 0, 0),
})fig.show()表面风化 vs 玻璃类型
crosstab pd.crosstab(d1[表面风化],d1[类型])
crosstab类型铅钡高钾表面风化无风化1212风化286
dp [[无风化, 铅钡, 12], [无风化, 高钾, 12],[风化, 铅钡, 28],[风化, 高钾, 6]]# Create the pandas DataFrame
df pd.DataFrame(dp, columns[表面风化, 玻璃类型, 计数])
df表面风化玻璃类型计数0无风化铅钡121无风化高钾122风化铅钡283风化高钾6
fig px.bar(df, x表面风化, y计数, color玻璃类型, title表面风化与玻璃类型的关系)
# center title
fig.update_layout(title_x0.5)
# remove background color
fig.update_layout({
plot_bgcolor: rgba(0, 0, 0, 0),
paper_bgcolor: rgba(0, 0, 0, 0),
})fig.show()表面风化 vs 颜色
crosstab pd.crosstab(d1[表面风化],d1[颜色])
crosstab颜色浅绿浅蓝深绿深蓝紫绿蓝绿黑表面风化无风化28322160风化112402092
col1 pd.DataFrame([无风化] * crosstab.shape[1] [风化] * crosstab.shape[1])
col2 pd.DataFrame(list(crosstab.columns) * 2)
col3 pd.DataFrame(list(crosstab.iloc[0]) list(crosstab.iloc[1]))df pd.concat([col1, col2, col3], axis1)
df.columns [表面风化, 颜色, 计数]
df表面风化颜色计数0无风化浅绿21无风化浅蓝82无风化深绿33无风化深蓝24无风化紫25无风化绿16无风化蓝绿67无风化黑08风化浅绿19风化浅蓝1210风化深绿411风化深蓝012风化紫213风化绿014风化蓝绿915风化黑2
fig px.bar(df, x表面风化, y计数, color颜色, title表面风化与颜色的关系)
# center title
fig.update_layout(title_x0.5)
# remove background color
fig.update_layout({
plot_bgcolor: rgba(0, 0, 0, 0),
paper_bgcolor: rgba(0, 0, 0, 0),
})fig.show()分组条形图
fig px.bar(df, x表面风化, y计数, color颜色, title表面风化与颜色的关系, barmodegroup)
# center title
fig.update_layout(title_x0.5)
# remove background color
fig.update_layout({
plot_bgcolor: rgba(0, 0, 0, 0),
paper_bgcolor: rgba(0, 0, 0, 0),
})fig.show()分类模型
Logistic回归
https://www.w3schools.com/python/python_ml_logistic_regression.asp
import sklearn
import warnings
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn import linear_modeld1[颜色].fillna(浅蓝, inplaceTrue)
df d1.iloc[:,1:5]
# data encode
label_encoder LabelEncoder()
df_encode df.select_dtypes(include[object]).apply(label_encoder.fit_transform)
df_encode.head()纹饰类型颜色表面风化0216010011201603016040160
X df_encode.drop(表面风化, axis1)
y df_encode[表面风化]logr linear_model.LogisticRegression()
logr.fit(X,y)print(截距项 str(logr.intercept_))log_odds logr.coef_
odds numpy.exp(log_odds)
print(回归系数 str(odds))截距项 [0.20030893]
回归系数 [[1.12409879 0.24081195 1.1795666 ]]随机森林
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import pandas as pd
#import shap
from sklearn.metrics import accuracy_score
import numpy as npclf RandomForestClassifier(n_estimators100, random_state42)
clf.fit(X, y)importances clf.feature_importances_
feature_imp_df pd.DataFrame({变量名: X.columns, 重要性程度: importances}).sort_values(重要性程度, ascendingTrue)
feature_imp_df变量名重要性程度0纹饰0.2703581类型0.2976452颜色0.431998
import matplotlib.pyplot as plt
import plotly.express as px
import numpy as np# Linux show Chinese characters *** important
plt.rcParams[font.family] WenQuanYi Micro Hei fig px.bar(feature_imp_df, y变量名, x重要性程度,title表面风化与其玻璃类型、纹饰和颜色的关系强度, orientationh)
# center title
fig.update_layout(title_x0.5)
# remove background color
fig.update_layout({
plot_bgcolor: rgba(0, 0, 0, 0),
paper_bgcolor: rgba(0, 0, 0, 0),
})fig.show()相关阅读
2022高教社杯全国大学生数学建模竞赛C题 问题一(2) Python代码2022高教社杯全国大学生数学建模竞赛C题 问题一(3) Python代码2023高教社杯全国大学生数学建模竞赛C题 Python代码