ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第二章:第一节数据清洗及特征处理-课程

2022-01-13 20:30:00  阅读:129  来源: 互联网

标签:... csv clear 第一节 train pd Mr 清洗 第二章


【回顾&引言】前面一章的内容大家可以感觉到我们主要是对基础知识做一个梳理,让大家了解数据分析的一些操作,主要做了数据的各个角度的观察。那么在这里,我们主要是做数据分析的流程性学习,主要是包括了数据清洗以及数据的特征处理,数据重构以及数据可视化。这些内容是为数据分析最后的建模和模型评价做一个铺垫。

开始之前,导入numpy、pandas包和数据

#加载所需的库
import numpy as np
import pandas as pd
#加载数据train.csv
pd_train_csv=pd.read_csv('./train.csv')
pd_train_csv
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
.......................................
88688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS
88989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ

891 rows × 12 columns

2 第二章:数据清洗及特征处理

我们拿到的数据通常是不干净的,所谓的不干净,就是数据中有缺失值,有一些异常点等,需要经过一定的处理才能继续做后面的分析或建模,所以拿到数据的第一步是进行数据清洗,本章我们将学习缺失值、重复值、字符串和数据转换等操作,将数据清洗成可以分析或建模的亚子。

2.1 缺失值观察与处理

我们拿到的数据经常会有很多缺失值,比如我们可以看到Cabin列存在NaN,那其他列还有没有缺失值,这些缺失值要怎么处理呢

2.1.1 任务一:缺失值观察

(1) 请查看每个特征缺失值个数
(2) 请查看Age, Cabin, Embarked列的数据
以上方式都有多种方式,所以大家多多益善

#写入代码
pd_train_csv['Age']


0      22.0
1      38.0
2      26.0
3      35.0
4      35.0
       ... 
886    27.0
887    19.0
888     NaN
889    26.0
890    32.0
Name: Age, Length: 891, dtype: float64
#写入代码
pd_train_csv.Cabin


0       NaN
1       C85
2       NaN
3      C123
4       NaN
       ... 
886     NaN
887     B42
888     NaN
889    C148
890     NaN
Name: Cabin, Length: 891, dtype: object
#写入代码  loc 索引器的一般形式是 loc[*, *] ,其中第一个 * 代表行的选择,第二个 * 代表列的选择
pd_train_csv.loc[:,'Embarked']


0      S
1      C
2      S
3      S
4      S
      ..
886    S
887    S
888    S
889    C
890    Q
Name: Embarked, Length: 891, dtype: object
# 是基于元素的 loc 索引器,基于位置的 iloc 索引器
pd_train_csv.iloc[:,5]
0      22.0
1      38.0
2      26.0
3      35.0
4      35.0
       ... 
886    27.0
887    19.0
888     NaN
889    26.0
890    32.0
Name: Age, Length: 891, dtype: float64

2.1.2 任务二:对缺失值进行处理

(1)处理缺失值一般有几种思路

(2) 请尝试对Age列的数据的缺失值进行处理

(3) 请尝试使用不同的方法直接对整张表的缺失值进行处理

#处理缺失值的一般思路:
#提醒:可使用的函数有--->dropna函数与fillna函数



#写入代码
pd_train_csv[pd_train_csv['Age'].isnull()]



PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
5603Moran, Mr. JamesmaleNaN003308778.4583NaNQ
171812Williams, Mr. Charles EugenemaleNaN0024437313.0000NaNS
192013Masselmani, Mrs. FatimafemaleNaN0026497.2250NaNC
262703Emir, Mr. Farred ChehabmaleNaN0026317.2250NaNC
282913O'Dwyer, Miss. Ellen "Nellie"femaleNaN003309597.8792NaNQ
.......................................
85986003Razi, Mr. RaihedmaleNaN0026297.2292NaNC
86386403Sage, Miss. Dorothy Edith "Dolly"femaleNaN82CA. 234369.5500NaNS
86886903van Melkebeke, Mr. PhilemonmaleNaN003457779.5000NaNS
87887903Laleff, Mr. KristomaleNaN003492177.8958NaNS
88888903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS

177 rows × 12 columns

#写入代码    .dropna将空值所在的行/列删除
df=pd_train_csv.dropna(axis=0,how='any',subset=['Age'])
df=pd_train_csv.dropna(axis=0,how='any',subset=['Sex'])
df=pd_train_csv.dropna(axis=0,how='any',subset=['Embarked'])

#写入代码 .fillna补充缺失值
pd_train_csv=df.fillna(axis=0,method='ffill')

pd_train_csv=pd_train_csv.fillna(axis=0,method='bfill')
pd_train_csv


PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500C85S
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250C85S
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500C123S
.......................................
88688702Montvila, Rev. Juozasmale27.00021153613.0000C50S
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888903Johnston, Miss. Catherine Helen "Carrie"female19.012W./C. 660723.4500B42S
88989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089103Dooley, Mr. Patrickmale32.0003703767.7500C148Q

889 rows × 12 columns

【思考1】dropna和fillna有哪些参数,分别如何使用呢?

【思考】检索空缺值用np.nan,None以及.isnull()哪个更好,这是为什么?如果其中某个方式无法找到缺失值,原因又是为什么?

#思考回答



【参考】https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html

【参考】https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html

2.2 重复值观察与处理

由于这样那样的原因,数据中会不会存在重复值呢,如果存在要怎样处理呢

2.2.1 任务一:请查看数据中的重复值

#写入代码
pd_train_csv[pd_train_csv.duplicated()==True]


PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked

2.2.2 任务二:对重复值进行处理

(1)重复值有哪些处理方式呢?

(2)处理我们数据的重复值

方法多多益善

#重复值有哪些处理方式:

pd_train_csv.duplicated().sum()

0
#写入代码 .drop_duplicates()去重复
pd_train_csv = pd_train_csv.drop_duplicates(keep=False)
pd_train_csv.head(200)

PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500C85S
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250C85S
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500C123S
.......................................
19619703Mernagh, Mr. Robertmale58.0003687037.7500B80Q
19719803Olsen, Mr. Karl Siegwart Andreasmale42.00145798.4042B80S
19819913Madigan, Miss. Margaret "Maggie"female42.0003703707.7500B80Q
19920002Yrois, Miss. Henriette ("Mrs Harbeck")female24.00024874713.0000B80S
20020103Vande Walle, Mr. Nestor Cyrielmale28.0003457709.5000B80S

200 rows × 12 columns

2.2.3 任务三:将前面清洗的数据保存为csv格式

#写入代码

pd_train_csv.to_csv('./pd_train_clear.csv')

2.3 特征观察与处理

我们对特征进行一下观察,可以把特征大概分为两大类:
数值型特征:Survived ,Pclass, Age ,SibSp, Parch, Fare,其中Survived, Pclass为离散型数值特征,Age,SibSp, Parch, Fare为连续型数值特征
文本型特征:Name, Sex, Cabin,Embarked, Ticket,其中Sex, Cabin, Embarked, Ticket为类别型文本特征,数值型特征一般可以直接用于模型的训练,但有时候为了模型的稳定性及鲁棒性会对连续变量进行离散化。文本型特征往往需要转换成数值型特征才能用于建模分析。

2.3.1 任务一:对年龄进行分箱(离散化)处理

(1) 分箱操作是什么?

(2) 将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示

(3) 将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示

(4) 将连续变量Age按10% 30% 50% 70% 90%五个年龄段,并用分类变量12345表示

(5) 将上面的获得的数据分别进行保存,保存为csv格式

#分箱操作是什么:
#将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示
pd_train_clear_csv=pd.read_csv('pd_train_clear.csv')
pd_train_clear_csv['cut']=pd.cut(pd_train_clear_csv['Age'],bins=5,labels=[1,2,3,4,5])
pd_train_clear_csv.head(20)
Unnamed: 0PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarkedcut
00103Braund, Mr. Owen Harrismale22.010A/5 211717.2500C85S2
11211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C3
22313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250C85S2
33411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S3
44503Allen, Mr. William Henrymale35.0003734508.0500C123S3
55603Moran, Mr. Jamesmale35.0003308778.4583C123Q3
66701McCarthy, Mr. Timothy Jmale54.0001746351.8625E46S4
77803Palsson, Master. Gosta Leonardmale2.03134990921.0750E46S1
88913Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)female27.00234774211.1333E46S2
991012Nasser, Mrs. Nicholas (Adele Achem)female14.01023773630.0708E46C1
10101113Sandstrom, Miss. Marguerite Rutfemale4.011PP 954916.7000G6S1
11111211Bonnell, Miss. Elizabethfemale58.00011378326.5500C103S4
12121303Saundercock, Mr. William Henrymale20.000A/5. 21518.0500C103S2
13131403Andersson, Mr. Anders Johanmale39.01534708231.2750C103S3
14141503Vestrom, Miss. Hulda Amanda Adolfinafemale14.0003504067.8542C103S1
15151612Hewlett, Mrs. (Mary D Kingcome)female55.00024870616.0000C103S4
16161703Rice, Master. Eugenemale2.04138265229.1250C103Q1
17171812Williams, Mr. Charles Eugenemale2.00024437313.0000C103S1
18181903Vander Planke, Mrs. Julius (Emelia Maria Vande...female31.01034576318.0000C103S2
19192013Masselmani, Mrs. Fatimafemale31.00026497.2250C103C2
#写入代码  将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示
pd_train_clear_csv['cut1']=pd.cut(pd_train_clear_csv['Age'],bins=[0,5,15,30,50,80],labels=[1,2,3,4,5])
pd_train_clear_csv,head(20)

---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

<ipython-input-305-35c221b93aec> in <module>
      1 #写入代码  将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示
      2 pd_train_clear_csv['cut1']=pd.cut(pd_train_clear_csv['Age'],bins=[0,5,15,30,50,80],labels=[1,2,3,4,5])
----> 3 pd_train_clear_csv,head(20)


NameError: name 'head' is not defined
#写入代码  将连续变量Age按10% 30% 50% 70% 90%五个年龄段,并用分类变量12345表示  # q为
pd_train_clear_csv['cut2']=pd.qcut(pd_train_clear_csv['Age'],q=[0,0.1,0.3,0.5,0.7,0.9],labels=[1,2,3,4,5])
pd_train_clear_csv.head(20)


Unnamed: 0PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarkedcutcut1cut2
00103Braund, Mr. Owen Harrismale22.010A/5 211717.2500C85S232
11211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C345
22313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250C85S233
33411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S344
44503Allen, Mr. William Henrymale35.0003734508.0500C123S344
55603Moran, Mr. Jamesmale35.0003308778.4583C123Q344
66701McCarthy, Mr. Timothy Jmale54.0001746351.8625E46S45NaN
77803Palsson, Master. Gosta Leonardmale2.03134990921.0750E46S111
88913Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)female27.00234774211.1333E46S233
991012Nasser, Mrs. Nicholas (Adele Achem)female14.01023773630.0708E46C122
10101113Sandstrom, Miss. Marguerite Rutfemale4.011PP 954916.7000G6S111
11111211Bonnell, Miss. Elizabethfemale58.00011378326.5500C103S45NaN
12121303Saundercock, Mr. William Henrymale20.000A/5. 21518.0500C103S232
13131403Andersson, Mr. Anders Johanmale39.01534708231.2750C103S345
14141503Vestrom, Miss. Hulda Amanda Adolfinafemale14.0003504067.8542C103S122
15151612Hewlett, Mrs. (Mary D Kingcome)female55.00024870616.0000C103S45NaN
16161703Rice, Master. Eugenemale2.04138265229.1250C103Q111
17171812Williams, Mr. Charles Eugenemale2.00024437313.0000C103S111
18181903Vander Planke, Mrs. Julius (Emelia Maria Vande...female31.01034576318.0000C103S244
19192013Masselmani, Mrs. Fatimafemale31.00026497.2250C103C244
#写入代码
pd_train_clear_csv.to_csv('pd_train_clear_cut.csv')


【参考】https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.cut.html

【参考】https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.qcut.html

2.3.2 任务二:对文本变量进行转换

(1) 查看文本变量名及种类
(2) 将文本变量Sex, Cabin ,Embarked用数值变量12345表示
(3) 将文本变量Sex, Cabin, Embarked用one-hot编码表示

#写入代码
pd_train_clear_csv=pd.read_csv('pd_train_clear_cut.csv')
pd_train_clear_csv['Sex'].value_counts()


male      577
female    312
Name: Sex, dtype: int64
  
        

#写入代码
# pd_train_clear_csv['Cabin'].unique()
pd_train_csv['Cabin'].value_counts()


G6             24
B78            21
C78            20
C83            19
C23 C25 C27    19
               ..
E36             1
A5              1
F G63           1
D46             1
T               1
Name: Cabin, Length: 146, dtype: int64
#写入代码 #  .nunique()查询一共多少种类
# pd_train_csv['Embarked'].nunique()
pd_train_clear_csv['Cabin'].nunique()
# 查询行
# pd_train_csv.iloc[1,:].nunique()
146
# 2) 将文本变量Sex, Cabin ,Embarked用数值变量12345表示
# 方法一 replace
pd_train_clear_csv['Sex_num']=pd_train_clear_csv['Sex'].replace(['male','female'],[1,2])
pd_train_clear_csv
Unnamed: 0Unnamed: 0.1PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarkedcutcut1Sex_num
000103Braund, Mr. Owen Harrismale22.010A/5 211717.2500C85S231
111211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C342
222313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250C85S232
333411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S342
444503Allen, Mr. William Henrymale35.0003734508.0500C123S341
......................................................
88488488688702Montvila, Rev. Juozasmale27.00021153613.0000C50S231
88588588788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S232
88688688888903Johnston, Miss. Catherine Helen "Carrie"female19.012W./C. 660723.4500B42S232
88788788989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C231
88888889089103Dooley, Mr. Patrickmale32.0003703767.7500C148Q241

889 rows × 17 columns

# map  字典映射
pd_train_clear_csv['Embarked'].value_counts()
S    644
C    168
Q     77
Name: Embarked, dtype: int64
pd_train_clear_csv['Embarked_num']=pd_train_clear_csv['Embarked'].map({'S':1,'C':2,'Q':3})
pd_train_clear_csv
Unnamed: 0Unnamed: 0.1PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarkedcutcut1Sex_numEmbarked_num
000103Braund, Mr. Owen Harrismale22.010A/5 211717.2500C85S2311
111211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C3422
222313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250C85S2321
333411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S3421
444503Allen, Mr. William Henrymale35.0003734508.0500C123S3411
.........................................................
88488488688702Montvila, Rev. Juozasmale27.00021153613.0000C50S2311
88588588788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S2321
88688688888903Johnston, Miss. Catherine Helen "Carrie"female19.012W./C. 660723.4500B42S2321
88788788989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C2312
88888889089103Dooley, Mr. Patrickmale32.0003703767.7500C148Q2413

889 rows × 18 columns

# sklearn.preprocessing的LabelEncoder
pd_train_clear_csv['Cabin'].value_counts()
G6             24
B78            21
C78            20
C83            19
C23 C25 C27    19
               ..
E36             1
A5              1
F G63           1
D46             1
T               1
Name: Cabin, Length: 146, dtype: int64
from sklearn.preprocessing import LabelEncoder
for feet in ['Cabin','Ticket']:
    lbl=LabelEncoder()
    label_dict=dict(zip(pd_train_clear_csv[feet].unique(),range(pd_train_clear_csv[feet].nunique())))
    pd_train_clear_csv[feet+"_LabelEncoder_map"]=pd_train_clear_csv[feet].map(label_dict)
    pd_train_clear_csv[feet+"_LabelEncoder"]=lbl.fit_transform(pd_train_clear_csv[feet].astype(str))
    
pd_train_clear_csv


Unnamed: 0Unnamed: 0.1PassengerIdSurvivedPclassNameSexAgeSibSpParch...CabinEmbarkedcutcut1Sex_numEmbarked_numCabin_LabelEncoder_mapCabin_LabelEncoderTicket_LabelEncoder_mapTicket_LabelEncoder
000103Braund, Mr. Owen Harrismale22.010...C85S23110800522
111211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010...C85C34220801595
222313Heikkinen, Miss. Lainafemale26.000...C85S23210802668
333411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.010...C123S3421154348
444503Allen, Mr. William Henrymale35.000...C123S34111544471
..................................................................
88488488688702Montvila, Rev. Juozasmale27.000...C50S231114369676100
88588588788811Graham, Miss. Margaret Edithfemale19.000...B42S23211442967714
88688688888903Johnston, Miss. Catherine Helen "Carrie"female19.012...B42S232114429613674
88788788989011Behr, Mr. Karl Howellmale26.000...C148C2312145596788
88888889089103Dooley, Mr. Patrickmale32.000...C148Q241314559679465

889 rows × 22 columns

# 笔记: 
# zip函数 用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
# zip 格式不能len 可以将对象进行for 循环遍历
# .map 映射 后面用字典形式
# range函数可创建一个整数列表

2.3.3 任务三:从纯文本Name特征里提取出Titles的特征(所谓的Titles就是Mr,Miss,Mrs等)

#写入代码
pd_train_clear_csv['Title']=pd_train_clear_csv.Name.str.extract('([A-Za-z]+)\.',expand=False)
pd_train_clear_csv


Unnamed: 0Unnamed: 0.1PassengerIdSurvivedPclassNameSexAgeSibSpParch...Embarkedcutcut1Sex_numEmbarked_numCabin_LabelEncoder_mapCabin_LabelEncoderTicket_LabelEncoder_mapTicket_LabelEncoderTitle
000103Braund, Mr. Owen Harrismale22.010...S23110800522Mr
111211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010...C34220801595Mrs
222313Heikkinen, Miss. Lainafemale26.000...S23210802668Miss
333411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.010...S3421154348Mrs
444503Allen, Mr. William Henrymale35.000...S34111544471Mr
..................................................................
88488488688702Montvila, Rev. Juozasmale27.000...S231114369676100Rev
88588588788811Graham, Miss. Margaret Edithfemale19.000...S23211442967714Miss
88688688888903Johnston, Miss. Catherine Helen "Carrie"female19.012...S232114429613674Miss
88788788989011Behr, Mr. Karl Howellmale26.000...C2312145596788Mr
88888889089103Dooley, Mr. Patrickmale32.000...Q241314559679465Mr

889 rows × 23 columns

#保存最终你完成的已经清理好的数据
pd_train_clear_csv.to_csv('train_fin.csv')
# 笔记 举例LabelEncoder()方法

from sklearn.preprocessing import LabelEncoder
lbl=LabelEncoder()
data=['小猫','小猫','小狗','小狗','兔子','兔子','wu']
encode=lbl.fit_transform(data)
print(encode)
[3 3 2 2 1 1 0]

标签:...,csv,clear,第一节,train,pd,Mr,清洗,第二章
来源: https://blog.csdn.net/qq_51065211/article/details/122481971

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有