python數據分析之紅酒品質


一、選題背景:

我國餐桌酒文化盛行,白酒、紅酒及啤酒的消費比較普及。隨着國民經濟的快速增長,居民收入及消費能力不斷提高,消費結構逐漸升級,消費者的飲酒習慣隨之改變,加上紅酒文化知識在我國的滲透,消費者對低度酒精飲料-一紅酒認知度不斷提高,紅酒不僅僅作為一種產品被消費,同時也作為一種時尚、高雅的文化和品位的象征慢慢滲透消費層次,中國紅酒消費市場同時呈現出高速增長。而許多企業仍然缺乏產品質量及誠信意識,生產冒牌、假品和產區、假年份酒等偽劣產品,擾亂了正常的市場秩序。

二、數據說明:

kaggle的https://www.kaggle.com/hufe09/winequality 項目提供了紅酒品質的具體的數據,該數據包括了紅酒的揮發性酸度、氯化物、游離二氧化硫、總二氧化硫、ph值等數據

三、實施過程及代碼

導入庫

import numpy as np
import scipy as sp
import pandas as pd
import matplotlib
import seaborn as sn
import pylab as pl
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn import  linear_model
from sklearn import tree
from sklearn.ensemble import RandomForestClassifier
import warnings#忽略warning提示

查看數據大小

hj = pd.read_csv('E:/excl/winequality-red(4).csv')
print('紅酒品質:',hj.shape,)

 

 

 

#查看數據情況
hj.head()

 

 

 

#計算紅酒的總酸度
hj['total acid'] = hj['fixed acidity'] + hj['volatile acidity'] + hj['citric acid']
#移動hj總酸到列首
r = hj.columns.tolist()
r.insert(0,r.pop())
hj = hj.reindex(columns=r)
#移動hj總酸到列首
r =hj.columns.tolist()
r.insert(0,r.pop())
hj = hj.reindex(columns=r)
hj.head()

 

 

 

hj.columns.tolist()

 

 

 通過上述表格,我們可以看到紅酒的品質的總酸度,酸度,殘糖,二氧化硫,ph等具體值。

#查看數據總體信息
print('紅酒品質:',hj.info(),)

 

 

 二、數據清洗

#缺失值查詢 #只顯示存在缺失值的行列,清楚的確定缺失值的位置 #[hj.isnull().values==True]是條件表達式

hj[hj.isnull().values==True]

 

 

 說明該數據沒有缺失值

#刪除無效列與行,可使用如下drop方法進行無效列的處理(axis =1)。 #若處理無效行,設置axis =0。 #axis=0表示index行,axis=1表示columns列,默認為0

#統計各列的空值情況
print('\n各列的空值情況如下:')
hj.isnull().sum()

 

 

# 查找重復值,索引行返回值為“True”,表示該行是一個重復值行
hj.duplicated()

 

 

# 刪除重復值
hj = hj.drop_duplicates()
print(hj.shape)
# 查找重復值
hj.duplicated()#顯示表示已經刪除重復值

 

 

#使用describe查看統計信息
hj.describe()

 

三、 大數據分析過程及采用的算法

sns.set_style('ticks')
sns.set_context("notebook", font_scale=1.4)
plt.figure(figsize=(6,4))#畫出雙變量的散點圖,然后以y~x擬合回歸方程和預測值95%置信區間並將其畫出。
sns.regplot(x='density',y='alcohol',data=hj, scatter_kws={'s':10})
plt.xlim(0.989,1.005)
plt.ylim(7,16)
print("密度 vs 酒精濃度")

 

 密度和酒精濃度是相關的,物理上,兩者並不是線性關系。上圖展示了兩者的關系。另外密度還與酒中其他物質的含量有關,但是關系很小

from sklearn import  linear_model
model = linear_model.LinearRegression()
x=hj['density'].values
y=hj['alcohol'].values
x=x.reshape(-1,1)
model.fit(x,y)
print("回歸方程系數{}".format(model.coef_))
print("回歸方程截距:{}".format(model.intercept_))

 

 

x = np.random.uniform(hj['alcohol'])
y = np.log(x) + np.random.normal(hj['density'])
 
pl.scatter(x, y, s=1, label="log(x) with noise")
pl.plot(np.arange(1, 100), np.log(np.arange(1, 100)), c="b", label="log(x) true function")
pl.xlabel("x")
pl.ylabel("f(x) = log(x)")
pl.legend(loc="best")
pl.title("A Basic Log Function")
pl.show() 

 

 隨機森林

warnings.filterwarnings("ignore")
data= pd.read_csv('E:/excl/winequality-red(4).csv')

data.replace([3,4,5,6,7,8],[0,0,0,1,1,1],inplace=True)#我們將質量為6以上評為高質量
X = data.iloc[:, :-1]#切片不包含最后一列
Y = data.iloc[:,-1]#結果
#kfold,將數據分成三部份
from sklearn.model_selection import KFold
k = KFold(n_splits = 3)    #class  k=3
#定義函數,用於返回模型的平均accuarcy(正確率)
def get_score(model, x_train, x_test, y_train, y_test):
    model.fit(x_train, y_train)
    return model.score(x_test, y_test) #函數score返回模型的平均 accuracy(正確率)
#定義畫圖函數
def draw(fpr,tpr):
    plt.figure()
    lw = 2
    plt.plot(fpr, tpr, color='darkorange',
         lw=lw, label='ROC curve (area = %0.2f)' % auc(fpr, tpr))
    plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
    plt.xlim([0.0, 1.0])
    plt.ylim([0.0, 1.05])
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('Receiver operating characteristic example')
    plt.legend(loc="lower right")
    plt.show()
from sklearn.metrics import roc_curve
from sklearn.metrics import auc,accuracy_score
RF = RandomForestClassifier(n_estimators = 100,max_samples=0.2)
scoreRF = []
s=1
for train,test in k.split(data):
    #計算平均得分
    scoreRF.append(get_score(RF,X.loc[train],X.loc[test],Y.loc[train],Y.loc[test]))
    #畫圖 roc曲線,auc得分
    fpr, tpr, thresholds = roc_curve(Y.loc[test], RF.predict_proba(X.loc[test])[:, 1])
    print("隨機森林%s"%s)
    draw(fpr,tpr)
    s+=1

print("隨機森林:",scoreRF)

 

 

 

 輸出結果的准確率大致在七點幾

 

繪圖

colnm = hj.columns.tolist()
plt.figure(figsize=(15,12))
for i in range(12):
    plt.subplot(4,3,i+1)
    hj[colnm[i]].hist(bins = 50)#bins指每張圖柱子的個數
    plt.xlabel(colnm[i], fontsize=12)#xlabel:x軸標注
    plt.ylabel('Frequency')#頻率ylabel:y軸標注
plt.tight_layout()# 處理圖與圖之間的空隙
print('\n單變量直方圖'

 

 通過上圖我們可以看到每一個紅酒品質列名直方圖

#游離二氧化硫與總二氧化硫比較
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data1 = np.array(hj['free sulfur dioxide'][:10])
data2 = np.array(hj['total sulfur dioxide'][:10])
width =0.3
plt.bar(np.arange(len(data1)), data1, width=width, label='free sulfur')
plt.bar(np.arange(len(data2))+ width, data2, width=width, label='total sulfur')
plt.title('游離二氧化硫與總二氧化硫比較')
plt.legend()
plt.show()

 

 總二氧化硫遠遠高於游離的二氧化硫

plt.figure(figsize = (6,4))
plt.hist(hj['total acid'], bins = 50)
plt.xlabel('total acid')
plt.ylabel('Frequency')
plt.tight_layout()
print("總酸性直方圖")

 

 

#紅酒品質ph的直方圖用Matplotlib和Seaborn畫直方圖
a = hj['pH']
s = pd.Series(a) 
plt.hist(s,bins=50 )
plt.show()
sns.distplot(s, kde=True)
plt.show()

 

 

 

 從上面三幅圖可以看出紅酒的ph值平均在3.3,說明紅酒的口感清脆鮮活。

#紅酒品質質量的直方圖用Matplotlib和Seaborn畫直方圖
a = hj['quality']
s = pd.Series(a) 
plt.hist(s,bins=20)
plt.show()
sns.distplot(s, kde=True)
plt.show()

 

 可以看出數據集的大多數紅酒的品質在5和6之間,最差的是3,而最好的是8,但分布都比較少

hj['sweetness']=pd.cut(hj['residual sugar'], bins = [0,4,12,45],labels=["dry","medium dry","semi-sweet"])
plt.figure(figsize =(5,3))
hj['sweetness'].value_counts().plot(kind = 'bar')
plt.xticks(rotation=0)#rotation代表lable顯示的旋轉角度。
plt.xlabel('sweetness',fontsize=12)#fontsize文字大小
plt.ylabel('',fontsize=12)
plt.tight_layout()
print("甜度")

 

 殘糖與酒的甜度相關,通常用來區別各種紅酒,干紅<=4, 半干4-12,半甜12-45,和甜>45這個數據中主要為干紅,沒有甜葡萄酒。

fig = plt.figure(figsize=(15,9))
for i in range(12):
    plt.subplot(3,4,i+1)  # 三行四列 位置是i+1的子圖
    # orient:"v"|"h" 用於控制圖像使水平還是豎直顯示(這通常是從輸入變量的dtype推斷出來的,此參數一般當不傳入x、y,只傳入data的時候使用)
    sns.boxplot(hj[colnm[i]], orient="v", width = 0.3)
    plt.ylabel(colnm[i],fontsize = 13)
    # plt.xlabel('one_pic')
#  圖形調整
plt.subplots_adjust(left=0.2, wspace=0.8, top=0.9, hspace=0.1)  #  子圖的左側 子圖之間的寬度間隔   子圖的高   子圖之間的高度間隔
# tight_layout會自動調整子圖參數,使之填充整個圖像區域
plt.tight_layout()
print('箱線圖')

 

 

plt.figure(figsize=(10,8))
colnm = hj.columns.tolist()[:11]+['total acid','quality']
mcorr = hj[colnm].corr()#相關系數矩陣,即給出了任意兩個變量之間的相關系數
mask = np.zeros_like(mcorr,dtype=np.bool) # 創建一個mcorr一樣的全False矩陣
mask[np.triu_indices_from(mask)]=True  # 上三角置位True
cmap = sns.diverging_palette(220,10,as_cmap=True)# 建立一個發散調色板
g=sns.heatmap(mcorr,mask=mask, cmap=cmap, square=True,annot=True, fmt='0.1f')
print("兩兩相關圖")

 

 

根據上述兩幅圖可以看出品質好的酒有更高的檸檬酸,其中酒精度數和品質的相關性最高。 品質好的酒有較低的揮發性酸類,密度,和pH。 殘留糖分,氯離子,二氧化硫似乎對酒的品質影響不大。

 

對於好酒(7,8)以及差酒(3,4),關系很明顯。但是對於中等酒(5,6),酒精濃度的揮發性酸度有很大程度的交叉。

根據上圖可以得到質量較好的酒含的酒精量較高, 質量不好的酒的揮發性酸較高。

sns.lmplot(x = 'alcohol', y = 'volatile acidity', col='quality', hue = 'quality', data = hj,fit_reg = False, size = 3,  aspect= 0.9, col_wrap=3,scatter_kws={'s':20})
print("酒精揮發酸和質量的散點圖")
plt.show()

 

 品質相關性最高的三個特征是酒精濃度,揮發性酸度,和檸檬酸。下面圖中顯示的酒精濃度,揮發性酸和品質的關系。 酒精濃度,揮發性酸和品質 對於好酒(7,8)以及差酒(3,4),關系很明顯。但是對於中等酒(5,6),酒精濃度的揮發性酸度有很大程度的交叉。

sns.set_style('ticks')
sns.set_context("notebook", font_scale= 1.4)
plt.figure(figsize=(6,5))
cm = plt.cm.get_cmap('RdBu')
sc = plt.scatter(hj['fixed acidity'], hj['citric acid'], c=hj['pH'], vmin=2.6, vmax=4, s=15, cmap=cm)
bar = plt.colorbar(sc)
bar.set_label('pH', rotation = 0)
plt.xlabel('fixed acidity')
plt.ylabel('citric acid')
plt.xlim(4,18)
plt.ylim(0,1)
print('酸度何檸檬酸固定的ph值')

 

 pH,非揮發性酸和檸檬酸 pH和非揮發性的酸以及檸檬酸有相關性。整體趨勢也很合理,即濃度越高,pH越低。

總代碼

  1 import numpy as np
  2 import scipy as sp
  3 import pandas as pd
  4 import matplotlib
  5 import seaborn as sns
  6 import pylab as pl
  7 import matplotlib.pyplot as plt
  8 from sklearn.linear_model import LogisticRegression
  9 from sklearn import  linear_model
 10 from sklearn import tree
 11 from sklearn.ensemble import RandomForestClassifier
 12 import warnings#忽略warning提示
 13 
 14 hj = pd.read_csv('E:/excl/winequality-red(4).csv')
 15 print('紅酒品質:',hj.shape,)
 16 #查看數據情況
 17 hj.head()
 18 #計算紅酒的總酸度
 19 hj['total acid'] = hj['fixed acidity'] + hj['volatile acidity'] + hj['citric acid']
 20 #移動hj總酸到列首
 21 r = hj.columns.tolist()
 22 r.insert(0,r.pop())
 23 hj = hj.reindex(columns=r)
 24 #移動hj總酸到列首
 25 r =hj.columns.tolist()
 26 r.insert(0,r.pop())
 27 hj = hj.reindex(columns=r)
 28 #查看數據情況
 29 hj.head()
 30 hj.columns.tolist()
 31 #查看數據總體信息
 32 print('紅酒品質:',hj.info(),)
 33 #數據清洗
 34 hj[hj.isnull().values==True]
 35 #統計各列的空值情況
 36 print('\n各列的空值情況如下:')
 37 hj.isnull().sum()
 38 # 查找重復值,索引行返回值為“True”,表示該行是一個重復值行
 39 hj.duplicated()
 40 # 刪除重復值
 41 hj = hj.drop_duplicates()
 42 print(hj.shape)
 43 # 將異常值替換為平均值
 44 hj.replace([512.329200],hj['chlorides'].mean()).head()
 45 hj.describe()
 46 
 47 #三 大數據分析過程
 48 sns.set_style('ticks')
 49 sns.set_context("notebook", font_scale=1.4)
 50 plt.figure(figsize=(6,4))#畫出雙變量的散點圖,然后以y~x擬合回歸方程和預測值95%置信區間並將其畫出。
 51 sns.regplot(x='density',y='alcohol',data=hj, scatter_kws={'s':10})
 52 plt.xlim(0.989,1.005)
 53 plt.ylim(7,16)
 54 print("密度 vs 含酒飲料")
 55 
 56 #線性回歸
 57 from sklearn import  linear_model
 58 model = linear_model.LinearRegression()
 59 x=hj['density'].values
 60 y=hj['alcohol'].values
 61 x=x.reshape(-1,1)
 62 model.fit(x,y)
 63 print("回歸方程系數{}".format(model.coef_))
 64 print("回歸方程截距:{}".format(model.intercept_))
 65 
 66 x = np.random.uniform(hj['alcohol'])
 67 y = np.log(x) + np.random.normal(hj['density'])
 68 pl.scatter(x, y, s=1, label="log(x) with noise")
 69 pl.plot(np.arange(1, 100), np.log(np.arange(1, 100)), c="b", label="log(x) true function")
 70 pl.xlabel("x")
 71 pl.ylabel("f(x) = log(x)")
 72 pl.legend(loc="best")
 73 pl.title("A Basic Log Function")
 74 pl.show() 
 75 
 76 #隨機森林
 77 warnings.filterwarnings("ignore")
 78 data= pd.read_csv('E:/excl/winequality-red(4).csv')
 79 
 80 data.replace([3,4,5,6,7,8],[0,0,0,1,1,1],inplace=True)#我們將質量為6以上評為高質量
 81 X = data.iloc[:, :-1]#切片不包含最后一列
 82 Y = data.iloc[:,-1]#結果
 83 #kfold,將數據分成三部份
 84 from sklearn.model_selection import KFold
 85 k = KFold(n_splits = 3)    #class  k=3
 86 #定義函數,用於返回模型的平均accuarcy(正確率)
 87 def get_score(model, x_train, x_test, y_train, y_test):
 88     model.fit(x_train, y_train)
 89     return model.score(x_test, y_test) #函數score返回模型的平均 accuracy(正確率)
 90 #定義畫圖函數
 91 def draw(fpr,tpr):
 92     plt.figure()
 93     lw = 2
 94     plt.plot(fpr, tpr, color='darkorange',
 95          lw=lw, label='ROC curve (area = %0.2f)' % auc(fpr, tpr))
 96     plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
 97     plt.xlim([0.0, 1.0])
 98     plt.ylim([0.0, 1.05])
 99     plt.xlabel('False Positive Rate')
100     plt.ylabel('True Positive Rate')
101     plt.title('Receiver operating characteristic example')
102     plt.legend(loc="lower right")
103     plt.show()
104 from sklearn.metrics import roc_curve
105 from sklearn.metrics import auc,accuracy_score
106 RF = RandomForestClassifier(n_estimators = 100,max_samples=0.2)
107 scoreRF = []
108 s=1
109 for train,test in k.split(data):
110     #計算平均得分
111     scoreRF.append(get_score(RF,X.loc[train],X.loc[test],Y.loc[train],Y.loc[test]))
112     #畫圖 roc曲線,auc得分
113     fpr, tpr, thresholds = roc_curve(Y.loc[test], RF.predict_proba(X.loc[test])[:, 1])
114     print("隨機森林%s"%s)
115     draw(fpr,tpr)
116     s+=1
117 
118 print("隨機森林:",scoreRF)
119 #4畫圖
120 colnm = hj.columns.tolist()
121 plt.figure(figsize=(15,12))
122 for i in range(12):
123     plt.subplot(4,3,i+1)
124     hj[colnm[i]].hist(bins = 50)#bins指每張圖柱子的個數
125     plt.xlabel(colnm[i], fontsize=12)#xlabel:x軸標注
126     plt.ylabel('Frequency')#頻率ylabel:y軸標注
127 plt.tight_layout()# 處理圖與圖之間的空隙
128 print('\n單變量直方圖')
129 
130 #游離二氧化硫與總二氧化硫比較
131 plt.rcParams['font.sans-serif']=['SimHei']
132 plt.rcParams['axes.unicode_minus'] = False
133 data1 = np.array(hj['free sulfur dioxide'][:10])
134 data2 = np.array(hj['total sulfur dioxide'][:10])
135 width =0.3
136 plt.bar(np.arange(len(data1)), data1, width=width, label='free sulfur')
137 plt.bar(np.arange(len(data2))+ width, data2, width=width, label='total sulfur')
138 plt.title('游離二氧化硫與總二氧化硫比較')
139 plt.legend()
140 plt.show()
141 
142 #2總酸度
143 plt.figure(figsize = (6,4))
144 plt.hist(hj['total acid'], bins = 50)
145 plt.xlabel('total acid')
146 plt.ylabel('Frequency')
147 plt.tight_layout()
148 print("總酸性直方圖")
149 
150 #3ph和質量
151 #紅酒品質ph的直方圖用Matplotlib和Seaborn畫直方圖
152 a = hj['pH']#ph
153 s = pd.Series(a) 
154 plt.hist(s,bins=20)
155 plt.show()
156 sns.distplot(s, kde=True)
157 plt.show()
158 
159 #紅酒品質質量的直方圖用Matplotlib和Seaborn畫直方圖
160 a = hj['quality']#質量
161 s = pd.Series(a) 
162 plt.hist(s,bins=20)
163 plt.show()
164 sns.distplot(s, kde=True)
165 plt.show()
166 
167 #甜度
168 hj['sweetness']=pd.cut(hj['residual sugar'], bins = [0,4,12,45],labels=["dry","medium dry","semi-sweet"])
169 plt.figure(figsize =(5,3))
170 hj['sweetness'].value_counts().plot(kind = 'bar')
171 plt.xticks(rotation=0)#rotation代表lable顯示的旋轉角度。
172 plt.xlabel('sweetness',fontsize=12)#fontsize文字大小
173 plt.ylabel('',fontsize=12)
174 plt.tight_layout()
175 print("甜度")
176 
177 #單變量箱圖
178 fig = plt.figure(figsize=(15,9))
179 for i in range(12):
180     plt.subplot(3,4,i+1)  # 三行四列 位置是i+1的子圖
181     # orient:"v"|"h" 用於控制圖像使水平還是豎直顯示(這通常是從輸入變量的dtype推斷出來的,此參數一般當不傳入x、y,只傳入data的時候使用)
182     sns.boxplot(hj[colnm[i]], orient="v", width = 0.3)
183     plt.ylabel(colnm[i],fontsize = 13)
184     # plt.xlabel('one_pic')
185 #  圖形調整
186 plt.subplots_adjust(left=0.2, wspace=0.8, top=0.9, hspace=0.1)  #  子圖的左側 子圖之間的寬度間隔   子圖的高   子圖之間的高度間隔
187 # tight_layout會自動調整子圖參數,使之填充整個圖像區域
188 plt.tight_layout()
189 print('箱線圖')
190 #兩兩相關圖
191 
192 plt.figure(figsize=(10,8))
193 colnm = hj.columns.tolist()[:11]+['total acid','quality']
194 mcorr = hj[colnm].corr()#相關系數矩陣,即給出了任意兩個變量之間的相關系數
195 mask = np.zeros_like(mcorr,dtype=np.bool) # 創建一個mcorr一樣的全False矩陣
196 mask[np.triu_indices_from(mask)]=True  # 上三角置位True
197 cmap = sns.diverging_palette(220,10,as_cmap=True)# 建立一個發散調色板
198 g=sns.heatmap(mcorr,mask=mask, cmap=cmap, square=True,annot=True, fmt='0.1f')
199 print("兩兩相關圖")
200 
201 #酒精揮發酸和質量的散點圖
202 sns.lmplot(x = 'alcohol', y = 'volatile acidity', col='quality', hue = 'quality', data = hj,fit_reg = False, size = 3,  aspect= 0.9, col_wrap=3,scatter_kws={'s':20})
203 print("酒精揮發酸和質量的散點圖")
204 plt.show()
205 
206 #酸度何檸檬酸固定的ph值
207 sns.set_style('ticks')
208 sns.set_context("notebook", font_scale= 1.4)
209 plt.figure(figsize=(6,5))
210 cm = plt.cm.get_cmap('RdBu')
211 sc = plt.scatter(hj['fixed acidity'], hj['citric acid'], c=hj['pH'], vmin=2.6, vmax=4, s=15, cmap=cm)
212 bar = plt.colorbar(sc)
213 bar.set_label('pH', rotation = 0)
214 plt.xlabel('fixed acidity')
215 plt.ylabel('citric acid')
216 plt.xlim(4,18)
217 plt.ylim(0,1)
218 print('酸度何檸檬酸固定的ph值')

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

在紅酒品質的分析過程中,pH值主要是與fixed acidity有關,品質好的酒有更高的檸檬酸,硫酸鹽,和酒精度數。硫酸鹽的加入通常是調整酒的酸度的。其中酒精度數和品質的相關性最高。品質好的酒有較低的揮發性酸類,密度,和pH。殘留糖分,氯離子,二氧化硫似乎對酒的品質影響不大。另外密度還與酒中其他物質的含量有關,但是關系很小。pH和非揮發性酸性物質有-0.683的相關性。因為非揮發性酸性物質的含量遠遠高於其他酸性物質。整體而言,紅酒的品質主要與酒精濃度,揮發性酸,和檸檬酸有關。對於品質優於7,或者劣於4的酒,直觀上是線性可分的。但是品質為5,6的酒很難線性區分。
在此次的課程設計中我學到了很多,剛開始容易犯一些簡單的錯誤什么標點,練習多了后面就很少犯了,但是還會犯一些語法錯誤,上網查了好多函數的用法,然后把相關函數的用法一個一個搞清楚並且標注上去,然后再用自己的數據集改並且一步一步讓代碼運行出來,在數據分析的第三問也就是大數據分析和采用算法哪一步,通過不斷的上網學習將代碼改出來,在繪圖的過程中,上網找到https://matplotlib.org/ 繪圖網站,里面有相應的代碼,參照上面的繪圖代碼然后在改改,但是在改的過程中出現了n多次錯誤,有時候改的太難了,但是最終還是完成了這個課程設計,這個課程設計很有挑戰性,通過此次課程設計,這門課程是一門不簡單的課程,要通過自己的鑽研才能學到東西,這讓我更想學好python。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM