Python3数据科学包系列(三):数据分析实战



Python3中类的高级语法及实战

Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案

Python3数据科学包系列(一):数据分析实战

Python3数据科学包系列(二):数据分析实战

Python3数据科学包系列(三):数据分析实战




一:  数据分析与挖掘认知升维


我们知道在数据分析与数据挖掘中,数据处理是一项复杂且繁琐的工作,同时也是整个数据分析过程中的最为重要的环节;数据处理一方面能提供数据的质量;另一方面能让数据更好的使用数据分析工具;

数据处理的主要内容包括:

(1) 数据清洗

      1.1 重复值处理

       1.2 缺少值处理

(2) 数据的抽取

       2.1 字段抽取

       2.2 字段拆分

       2.3 重置索引

       2.4 记录抽取

       2.5 随机抽样

       2.6 通过索引抽取数据

       2.7 字典数据抽取

       2.8 插入数据

       2.9 修改数据记录

(3) 数据交换

       3.1 交换行与列

       3.2  排名索引

       3.3  数据合并

(4) 数据计算

        4.1 简单计算 (加,减,乘,除的计算)

        4.2  数据标准化

         4.3  数据分组

         4.4  日期处理

....................

(5) 数据可视化

            5.1 图表化

             5.2 Excel|Word|PPT化


 二:数据处理

数据清洗认知升级:在数据分析时,海量的原始数据中存在大量不完整,不一致,有异常的数据,严重影响到数据分析的结果;索引进行数据清洗很重要,数据清洗是数据价值链中最关键的步骤。垃圾数据,即使是通过最好的分析,也将产生错误的结果,并误导业务本身.因此在数据分析过程中.数据清洗占据很大的工作量数据清洗就是处理缺失的数据以及清除无意义的信息,如删除原始数据集中的无关数据,重复数据,平滑噪声数据,筛选掉与分析主题无关的数据,处理缺失值,异常值等
数据清洗:一: 重复值的处理二: 缺失的处理
实例一:重复数据处理


# -*- coding:utf-8 -*-import pandas as pd
from pandas import Series"""数据清洗认知升级:在数据分析时,海量的原始数据中存在大量不完整,不一致,有异常的数据,严重影响到数据分析的结果;索引进行数据清洗很重要,数据清洗是数据价值链中最关键的步骤。垃圾数据,即使是通过最好的分析,也将产生错误的结果,并误导业务本身.因此在数据分析过程中.数据清洗占据很大的工作量数据清洗就是处理缺失的数据以及清除无意义的信息,如删除原始数据集中的无关数据,重复数据,平滑噪声数据,筛选掉与分析主题无关的数据,处理缺失值,异常值等数据清洗:一: 重复值的处理二: 缺失的处理
"""print("""(1)重复值的处理利用DataFrame中的duplicated方法返回一个布尔型的Series,展示是否有重复行,没有重复的行显示FALSE;有重复的则从第二行起均显示为TRUE(2)使用drop_duplicates方法用于把数据结构中行相同的数据去除(只保留一行),该方法返回一个DataFrame的数据框
""")
dataFrame = pd.DataFrame({'age': Series([26, 85, 64, 85, 85]),'name': Series(['Ben', 'John', 'Jerry', 'John', 'John'])
})
print(dataFrame)
# 显示那些行有重复
repeatableDataFrame = dataFrame.duplicated()
print()
print(repeatableDataFrame)
print("""去掉重复的行
""")
print("查看name列重复行")
print(dataFrame.duplicated('name'))
print()
print("查看age列重复行")
print(dataFrame.duplicated('age'))
print()
print("根据age列去掉重复的行数")
print(dataFrame.drop_duplicates('age'))print()
print("根据name列去掉重复的行数")
print(dataFrame.drop_duplicates('name'))

运行效果:


D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\dataanalysis\DataAnalysisDataCleaning.py 

    (1)重复值的处理
          利用DataFrame中的duplicated方法返回一个布尔型的Series,展示是否有重复行,没有重复的行显示FALSE;
          有重复的则从第二行起均显示为TRUE
    (2)使用drop_duplicates方法用于把数据结构中行相同的数据去除(只保留一行),该方法返回一个DataFrame的数据框

   age   name
0   26    Ben
1   85   John
2   64  Jerry
3   85   John
4   85   John

0    False
1    False
2    False
3     True
4     True
dtype: bool

    去掉重复的行

查看name列重复行
0    False
1    False
2    False
3     True
4     True
dtype: bool

查看age列重复行
0    False
1    False
2    False
3     True
4     True
dtype: bool

根据age列去掉重复的行数
   age   name
0   26    Ben
1   85   John
2   64  Jerry

根据name列去掉重复的行数
   age   name
0   26    Ben
1   85   John
2   64  Jerry

Process finished with exit code 0
 

三:  缺失值处理

认知升维从统计上说,缺失的数据可能会产生有偏估计,从而导致样本数据不能很好地代表总体,而现实中绝大部分数据都包含缺失值,因此如何处理缺失值很重要。一般来说,缺失值的处理包括两个步骤:(1)缺失数据的识别(2)缺失数据的处理

# -*- coding:utf-8 -*-import pandas as pd
from pandas import Series"""认知升维从统计上说,缺失的数据可能会产生有偏估计,从而导致样本数据不能很好地代表总体,而现实中绝大部分数据都包含缺失值,因此如何处理缺失值很重要。一般来说,缺失值的处理包括两个步骤:(1)缺失数据的识别(2)缺失数据的处理
"""print("读取数据来源: ")
dataFrame = pd.read_excel(r'./file/rz.xlsx', sheet_name='Sheet2')
print(dataFrame)print("""1)缺失值的识别Pandas使用浮点值NaN表示浮点数和非浮点数组里的缺失数据,并使用.isnull和.notnull函数来判断缺失情况
""")
print()
print("缺失值判断;True表示缺失,False表示非缺失")
print(dataFrame.isnull())print()
print("缺失值判断;True表示非缺失,False表示缺失")
print(dataFrame.notnull())print("""2)缺失值处理对于缺失数据的处理方式有数据补齐,删除对应行,不处理等方式2.1 dropna()去除数据结构中值为空的数据行2.2 fillna()用其他数替代NaN;有的时候直接删除空数据会影响分析结果,可以对数据进行填补2.3 fillna(method = 'pad')用前一个数据值代替NaN
""")print("删除数据为空所对应的行: ")
print(dataFrame.dropna())
print()
print("使用数值或者任意字符替代缺失值:")
print(dataFrame.fillna("$"))
print()
print("用前一个值替换缺失的值: ")
print(dataFrame.fillna(method='pad'))print()
print("用后一个值替换缺失的值:")
print(dataFrame.fillna(method='bfill'))print()
print("用平均数或者其它描述性统计量替代NaN")
print(dataFrame.fillna(dataFrame.mean(numeric_only=True)))print()
print("""dataFrame.mean()['填补列名':'计算均值的列名']:可以使用选择列的均值进行缺失值的处理
""")print(dataFrame.fillna(dataFrame.mean(numeric_only=True)['高代':'解几']))
print()
print("dataFrame.fillna({'列名1':值1,'列名2':值2}): 可以传入一个字典,对不同的列填充不同的值")
print(dataFrame.fillna({'数分': 100, '高代': 0}))print("使用strip()清除字符串左,右或首尾指定的字符串,默认为空格,中间不清除")
dataFrameStrip = pd.DataFrame({'age': Series([26, 85, 64, 85, 85]),'name': Series(['Ben', 'John   ', 'Jerry', 'John     ', '  John'])
})
print(dataFrameStrip)
print()
print(dataFrameStrip['name'].str.strip())print()
print("只删除右边的字符n,如果不指定删除的字符串,默认删除空格")
print(dataFrameStrip['name'].str.rstrip())
print()
print(dataFrameStrip['name'].str.rstrip('n'))print()
print("只删除左边的字符n,如果不指定删除的字符串,默认删除空格")
print(dataFrameStrip['name'].str.lstrip())
print()
print(dataFrameStrip['name'].str.lstrip('J'))

运行效果:

D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\dataanalysis\DataAnalysisDataMissing.py 
读取数据来源: 
           学号  姓名  英语    数分    高代  解几
0  2308024241  成龙  76  40.0  23.0  60
1  2308024244  周怡  66  47.0  47.0  44
2  2308024251  张波  85   NaN  45.0  60
3  2308024249  朱浩  65  72.0  62.0  71
4  2308024219  封印  73  61.0  47.0  46
5  2308024201  迟培  60  71.0  76.0  71
6  2308024347  李华  67  61.0  65.0  78
7  2308024307  陈田  76  69.0   NaN  69
8  2308024326  余皓  66  65.0  61.0  71
9  2308024219  封印  73  61.0  47.0  46

    1)缺失值的识别
    Pandas使用浮点值NaN表示浮点数和非浮点数组里的缺失数据,并使用.isnull和.notnull函数来判断缺失情况


缺失值判断;True表示缺失,False表示非缺失
      学号     姓名     英语     数分     高代     解几
0  False  False  False  False  False  False
1  False  False  False  False  False  False
2  False  False  False   True  False  False
3  False  False  False  False  False  False
4  False  False  False  False  False  False
5  False  False  False  False  False  False
6  False  False  False  False  False  False
7  False  False  False  False   True  False
8  False  False  False  False  False  False
9  False  False  False  False  False  False

缺失值判断;True表示非缺失,False表示缺失
     学号    姓名    英语     数分     高代    解几
0  True  True  True   True   True  True
1  True  True  True   True   True  True
2  True  True  True  False   True  True
3  True  True  True   True   True  True
4  True  True  True   True   True  True
5  True  True  True   True   True  True
6  True  True  True   True   True  True
7  True  True  True   True  False  True
8  True  True  True   True   True  True
9  True  True  True   True   True  True

    2)缺失值处理
    对于缺失数据的处理方式有数据补齐,删除对应行,不处理等方式
      2.1 dropna()去除数据结构中值为空的数据行
      2.2 fillna()用其他数替代NaN;有的时候直接删除空数据会影响分析结果,可以对数据进行填补
      2.3 fillna(method = 'pad')用前一个数据值代替NaN

删除数据为空所对应的行: 
           学号  姓名  英语    数分    高代  解几
0  2308024241  成龙  76  40.0  23.0  60
1  2308024244  周怡  66  47.0  47.0  44
3  2308024249  朱浩  65  72.0  62.0  71
4  2308024219  封印  73  61.0  47.0  46
5  2308024201  迟培  60  71.0  76.0  71
6  2308024347  李华  67  61.0  65.0  78
8  2308024326  余皓  66  65.0  61.0  71
9  2308024219  封印  73  61.0  47.0  46

使用数值或者任意字符替代缺失值:
           学号  姓名  英语    数分    高代  解几
0  2308024241  成龙  76  40.0  23.0  60
1  2308024244  周怡  66  47.0  47.0  44
2  2308024251  张波  85     $  45.0  60
3  2308024249  朱浩  65  72.0  62.0  71
4  2308024219  封印  73  61.0  47.0  46
5  2308024201  迟培  60  71.0  76.0  71
6  2308024347  李华  67  61.0  65.0  78
7  2308024307  陈田  76  69.0     $  69
8  2308024326  余皓  66  65.0  61.0  71
9  2308024219  封印  73  61.0  47.0  46

用前一个值替换缺失的值: 
           学号  姓名  英语    数分    高代  解几
0  2308024241  成龙  76  40.0  23.0  60
1  2308024244  周怡  66  47.0  47.0  44
2  2308024251  张波  85  47.0  45.0  60
3  2308024249  朱浩  65  72.0  62.0  71
4  2308024219  封印  73  61.0  47.0  46
5  2308024201  迟培  60  71.0  76.0  71
6  2308024347  李华  67  61.0  65.0  78
7  2308024307  陈田  76  69.0  65.0  69
8  2308024326  余皓  66  65.0  61.0  71
9  2308024219  封印  73  61.0  47.0  46

用后一个值替换缺失的值:
           学号  姓名  英语    数分    高代  解几
0  2308024241  成龙  76  40.0  23.0  60
1  2308024244  周怡  66  47.0  47.0  44
2  2308024251  张波  85  72.0  45.0  60
3  2308024249  朱浩  65  72.0  62.0  71
4  2308024219  封印  73  61.0  47.0  46
5  2308024201  迟培  60  71.0  76.0  71
6  2308024347  李华  67  61.0  65.0  78
7  2308024307  陈田  76  69.0  61.0  69
8  2308024326  余皓  66  65.0  61.0  71
9  2308024219  封印  73  61.0  47.0  46

用平均数或者其它描述性统计量替代NaN
           学号  姓名  英语         数分         高代  解几
0  2308024241  成龙  76  40.000000  23.000000  60
1  2308024244  周怡  66  47.000000  47.000000  44
2  2308024251  张波  85  60.777778  45.000000  60
3  2308024249  朱浩  65  72.000000  62.000000  71
4  2308024219  封印  73  61.000000  47.000000  46
5  2308024201  迟培  60  71.000000  76.000000  71
6  2308024347  李华  67  61.000000  65.000000  78
7  2308024307  陈田  76  69.000000  52.555556  69
8  2308024326  余皓  66  65.000000  61.000000  71
9  2308024219  封印  73  61.000000  47.000000  46


   dataFrame.mean()['填补列名':'计算均值的列名']:可以使用选择列的均值进行缺失值的处理

           学号  姓名  英语    数分         高代  解几
0  2308024241  成龙  76  40.0  23.000000  60
1  2308024244  周怡  66  47.0  47.000000  44
2  2308024251  张波  85   NaN  45.000000  60
3  2308024249  朱浩  65  72.0  62.000000  71
4  2308024219  封印  73  61.0  47.000000  46
5  2308024201  迟培  60  71.0  76.000000  71
6  2308024347  李华  67  61.0  65.000000  78
7  2308024307  陈田  76  69.0  52.555556  69
8  2308024326  余皓  66  65.0  61.000000  71
9  2308024219  封印  73  61.0  47.000000  46

dataFrame.fillna({'列名1':值1,'列名2':值2}): 可以传入一个字典,对不同的列填充不同的值
           学号  姓名  英语     数分    高代  解几
0  2308024241  成龙  76   40.0  23.0  60
1  2308024244  周怡  66   47.0  47.0  44
2  2308024251  张波  85  100.0  45.0  60
3  2308024249  朱浩  65   72.0  62.0  71
4  2308024219  封印  73   61.0  47.0  46
5  2308024201  迟培  60   71.0  76.0  71
6  2308024347  李华  67   61.0  65.0  78
7  2308024307  陈田  76   69.0   0.0  69
8  2308024326  余皓  66   65.0  61.0  71
9  2308024219  封印  73   61.0  47.0  46
使用strip()清除字符串左,右或首尾指定的字符串,默认为空格,中间不清除
   age       name
0   26        Ben
1   85    John   
2   64      Jerry
3   85  John     
4   85       John

0      Ben
1     John
2    Jerry
3     John
4     John
Name: name, dtype: object

只删除右边的字符n,如果不指定删除的字符串,默认删除空格
0       Ben
1      John
2     Jerry
3      John
4      John
Name: name, dtype: object

0           Be
1      John   
2        Jerry
3    John     
4          Joh
Name: name, dtype: object

只删除左边的字符n,如果不指定删除的字符串,默认删除空格
0          Ben
1      John   
2        Jerry
3    John     
4         John
Name: name, dtype: object

0         Ben
1      ohn   
2        erry
3    ohn     
4        John
Name: name, dtype: object

Process finished with exit code 0
 


四:  数据抽取


# -*- coding:utf-8 -*-import pandas as pd
from pandas import Seriesimport warningsprint("数据抽取:")
extractDataFrame = pd.read_excel(r'./file/i_nuc.xls', sheet_name='Sheet4')
print(extractDataFrame.head())
print("""字段抽取是抽取出某列上指定位置的数据做成新的列:slice(start,stop)start表示开始位置stop表示结束
""")
print()
#  把’电话‘列转换为字符串: astype(str)转换类型  及修改extractDataFrame的列为字符串类型
extractDataFrame['电话'] = extractDataFrame['电话'].astype(str)
print(extractDataFrame)
print("抽取电话号码的前三位,便于判断号码的品牌:")
bands = extractDataFrame['电话'].str.slice(0, 3)
print(bands)
print()
print("抽取手机号码的中间4位,以判断手机号码的区域:")
print(extractDataFrame['电话'].str.slice(3, 7))
print()
print("抽取手机号的后四位:")
print(extractDataFrame['电话'].str.slice(7, 11))print()
print("""字符串拆分:字符串拆分是指指定的字符sep,拆分已有的字符串。split(sep,n,expand=False)sep:表示用于分隔字符串的分隔符n表示分割后新增的列数expand表示是否展开为数据库,默认为False返回值: expand是否展开为数据框,默认为False
""")dataFrameSeries = pd.read_excel(r'./file/i_nuc.xls', sheet_name='Sheet4')
print(dataFrameSeries)print()
print("现将IP列转换为字符串str,在删除首尾空格")
print(dataFrameSeries['IP'].str.strip())
print()
print("按第一个'.'分成两列,1表示新增的列数")
print("""FutureWarning: In a future version of pandas all arguments of StringMethods.split except for the argument 'pat' will be keyword-only.splitDataFrameSeries = dataFrameSeries['IP'].str.split('.', 1, True)忽略警告
""")
warnings.filterwarnings('ignore', category=FutureWarning)  # 忽略警告
splitDataFrameSeries = dataFrameSeries['IP'].str.split('.', 1, True)
print(splitDataFrameSeries)print("给第一列和第二类指定列名称")
splitDataFrameSeries.columns = ['IPOne', 'IPTwo']
print(splitDataFrameSeries)print("")
print("重置索引")
print("""重置索引是指指定某列为索引,以便于对其他数据进行操作:dataFrame.set_index('列名')
""")
df = pd.DataFrame({'age': Series([26, 85, 64, 85, 85]),'name': Series(['Ben', 'John', 'Jerry', 'John', 'John'])}
)
print(df)
# 指定name为索引
dataFrameReIndex = df.set_index('name')
print("重置索引后数据结构")
print(dataFrameReIndex)

运行效果:


D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\dataanalysis\DataAnalysisDataExtractData.py 
数据抽取:
           学号            电话                 IP
0  2308024241  1.892225e+10      221.205.98.55
1  2308024244  1.352226e+10    183.184.226.205
2  2308024251  1.342226e+10      221.205.98.55
3  2308024249  1.882226e+10      222.31.51.200
4  2308024219  1.892225e+10       120.207.64.3

    字段抽取是抽取出某列上指定位置的数据做成新的列:
    slice(start,stop)
    start表示开始位置
    stop表示结束


            学号             电话                 IP
0   2308024241  18922254812.0      221.205.98.55
1   2308024244  13522255003.0    183.184.226.205
2   2308024251  13422259938.0      221.205.98.55
3   2308024249  18822256753.0      222.31.51.200
4   2308024219  18922253721.0       120.207.64.3
5   2308024201            nan      222.31.51.200
6   2308024347  13822254373.0      222.31.59.220
7   2308024307  13322252452.0  221.205.98.55    
8   2308024326  18922257681.0     183.184.230.38
9   2308024320  13322252452.0  221.205.98.55    
10  2308024342  18922257681.0     183.184.230.38
11  2308024310  19934210999.0     183.184.230.39
12  2308024435  19934210911.0     185.184.230.40
13  2308024432  19934210912.0     183.154.230.41
14  2308024446  19934210913.0     183.184.231.42
15  2308024421  19934210914.0     183.154.230.43
16  2308024433  19934210915.0     173.184.230.44
17  2308024428  19934210916.0                NaN
18  2308024402  19934210917.0      183.184.230.4
19  2308024422  19934210918.0      153.144.230.7
抽取电话号码的前三位,便于判断号码的品牌:
0     189
1     135
2     134
3     188
4     189
5     nan
6     138
7     133
8     189
9     133
10    189
11    199
12    199
13    199
14    199
15    199
16    199
17    199
18    199
19    199
Name: 电话, dtype: object

抽取手机号码的中间4位,以判断手机号码的区域:
0     2225
1     2225
2     2225
3     2225
4     2225
5         
6     2225
7     2225
8     2225
9     2225
10    2225
11    3421
12    3421
13    3421
14    3421
15    3421
16    3421
17    3421
18    3421
19    3421
Name: 电话, dtype: object

抽取手机号的后四位:
0     4812
1     5003
2     9938
3     6753
4     3721
5         
6     4373
7     2452
8     7681
9     2452
10    7681
11    0999
12    0911
13    0912
14    0913
15    0914
16    0915
17    0916
18    0917
19    0918
Name: 电话, dtype: object


   字符串拆分:
       字符串拆分是指指定的字符sep,拆分已有的字符串。
       split(sep,n,expand=False)
       sep:表示用于分隔字符串的分隔符
       n表示分割后新增的列数
       expand表示是否展开为数据库,默认为False
   返回值: expand是否展开为数据框,默认为False

            学号            电话                 IP
0   2308024241  1.892225e+10      221.205.98.55
1   2308024244  1.352226e+10    183.184.226.205
2   2308024251  1.342226e+10      221.205.98.55
3   2308024249  1.882226e+10      222.31.51.200
4   2308024219  1.892225e+10       120.207.64.3
5   2308024201           NaN      222.31.51.200
6   2308024347  1.382225e+10      222.31.59.220
7   2308024307  1.332225e+10  221.205.98.55    
8   2308024326  1.892226e+10     183.184.230.38
9   2308024320  1.332225e+10  221.205.98.55    
10  2308024342  1.892226e+10     183.184.230.38
11  2308024310  1.993421e+10     183.184.230.39
12  2308024435  1.993421e+10     185.184.230.40
13  2308024432  1.993421e+10     183.154.230.41
14  2308024446  1.993421e+10     183.184.231.42
15  2308024421  1.993421e+10     183.154.230.43
16  2308024433  1.993421e+10     173.184.230.44
17  2308024428  1.993421e+10                NaN
18  2308024402  1.993421e+10      183.184.230.4
19  2308024422  1.993421e+10      153.144.230.7

现将IP列转换为字符串str,在删除首尾空格
0       221.205.98.55
1     183.184.226.205
2       221.205.98.55
3       222.31.51.200
4        120.207.64.3
5       222.31.51.200
6       222.31.59.220
7       221.205.98.55
8      183.184.230.38
9       221.205.98.55
10     183.184.230.38
11     183.184.230.39
12     185.184.230.40
13     183.154.230.41
14     183.184.231.42
15     183.154.230.43
16     173.184.230.44
17                NaN
18      183.184.230.4
19      153.144.230.7
Name: IP, dtype: object

按第一个'.'分成两列,1表示新增的列数

     FutureWarning: In a future version of pandas all arguments of StringMethods.split 
     except for the argument 'pat' will be keyword-only.
     splitDataFrameSeries = dataFrameSeries['IP'].str.split('.', 1, True)
     忽略警告

          0              1
0       221      205.98.55
1       183    184.226.205
2       221      205.98.55
3       222      31.51.200
4       120       207.64.3
5       222      31.51.200
6       222      31.59.220
7       221  205.98.55    
8       183     184.230.38
9       221  205.98.55    
10      183     184.230.38
11      183     184.230.39
12      185     184.230.40
13      183     154.230.41
14      183     184.231.42
15      183     154.230.43
16      173     184.230.44
17      NaN            NaN
18      183      184.230.4
19      153      144.230.7
给第一列和第二类指定列名称
      IPOne          IPTwo
0       221      205.98.55
1       183    184.226.205
2       221      205.98.55
3       222      31.51.200
4       120       207.64.3
5       222      31.51.200
6       222      31.59.220
7       221  205.98.55    
8       183     184.230.38
9       221  205.98.55    
10      183     184.230.38
11      183     184.230.39
12      185     184.230.40
13      183     154.230.41
14      183     184.231.42
15      183     154.230.43
16      173     184.230.44
17      NaN            NaN
18      183      184.230.4
19      153      144.230.7

重置索引

    重置索引是指指定某列为索引,以便于对其他数据进行操作:
    dataFrame.set_index('列名')

   age   name
0   26    Ben
1   85   John
2   64  Jerry
3   85   John
4   85   John
重置索引后数据结构
       age
name      
Ben     26
John    85
Jerry   64
John    85
John    85

Process finished with exit code 0
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/94927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux apt-get update - Could not connect to XXX(Connection refused)

Linux: apt-get update ----Err:Could not connect to XXX(Connection refused) - 知乎 先换源(vi不好使用,可以换成gedit) 若还是不行,可以再尝试执行: unset http_proxy unset https_proxy

图像分割中的色块的提取

一 色块提取方法: ①首先是色彩模型的转换 由RGB颜色空间转到HSV颜色空间 原因:RGB颜色空间适合显示系统,但是各分量间相关性很强,比如当图像亮度发生变化时,RGB三个分量都会发生相应改变 但是HSV颜色空间更能感知颜色…

ubuntu22.04 x11窗口环境手势控制

ubuntu22.04 x11窗口环境手势控制 ubuntu x11窗口环境的手势控制并不优秀,我们可以使用touchegg去代替 这个配置过程非常简单,并且可以很容易在一定范围内达到你想到的效果,类比mac的手势控制 关于安装 首先添加源,并安装 sud…

【NeurIPS 2023】Backdoor对抗攻防论文汇总

NeurIPS 对抗攻防论文 NeurIPS2022|对抗攻防论文整理 - 知乎 NeurIPS 2023 Papers BIRD: Generalizable Backdoor Detection and Removal for Deep Reinforcement Learning https://neurips.cc/virtual/2023/poster/70618 摘要: 后门攻击对深度强化学习&…

基于Java的飞机航班订票购票管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

Leetcode219. 存在重复元素 II

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给你一个整数数组 nums 和一个整数 k &#xff0c;判断数组中是否存在两个 不同的索引 i 和 j &#xff0c;满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xff1b…

深入了解 RabbitMQ:高性能消息中间件

目录 引言&#xff1a;一、RabbitMQ 介绍二、核心概念三、工作原理四、应用场景五、案例实战 引言&#xff1a; 在现代分布式系统中&#xff0c;消息队列成为了实现系统间异步通信、削峰填谷以及解耦组件的重要工具。而RabbitMQ作为一个高效可靠的消息队列解决方案&#xff0c;…

Python爬虫解决中文乱码

目录 一、中文乱码 二、chardet.detect()解决 三、在页面查找编码格式解决 一、中文乱码 问题在于文本的编码格式不正确 import requestsurlhttps://www.shicimingju.com/book/sanguoyanyi.html headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKi…

C++_pen_静态与常量

成员 常成员、常对象&#xff08;C推荐使用 const 而不用#define,mutable&#xff09; const 数据成员只在某个对象生存周期内是常量&#xff0c;而对于整个类而言却是可变的&#xff08;static除外&#xff09; 1.常数据成员&#xff08;构造函数初始化表赋值&#xff09; c…

C#开发的OpenRA游戏之电力系统之一

C#开发的OpenRA游戏之电力系统之一 前面已经分析过雷达地图显示,在雷达地图的下面有一个显示电力数量显示,如下图: 从上图看到电力的数量为0,所以这时候就处于低电力的模式。 要在这里显示电力,那么就需要在界面上做一点编辑,是在yaml文件定义它: Container@POWERBAR…

在Ubuntu 20.04搭建最小实验环境

sudo apt-get -y install --no-install-recommends wget gnupg ca-certificates安装导入GPG公钥所需的依赖包。 sudo wget -O - https://openresty.org/package/pubkey.gpg | sudo apt-key add -导入GPG密钥。 sudo apt-get -y install --no-install-recommends software-p…

Docker启动Mysql

如果docker里面没有mysql需要先pull一个mysql镜像 docker pull mysql其中123456是mysql的密码 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql可以使用如下命令进入Mysql的命令行界面 docker exec -it mysql bash登录mysql使用如下命令,root是…

二层VLAN配置实验

四台PC的IP地址如图所示&#xff0c;子网掩码均为255.255.255.0&#xff0c;四台PC处在同一个局域网之中&#xff0c;在配置VLAN之前能够彼此ping通。配置的目的是将PC1和PC3划分到VLAN10中&#xff0c;PC2和PC4划分到VLAN20中。 在配置之前需要进入系统视角。 创建VLAN 在两…

集合-Map系列

系列文章目录 1.集合-Collection-CSDN博客​​​​​​ 2.集合-List集合-CSDN博客 3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客 4.数据结构-哈希表_喜欢吃animal milk的博客-CSDN博客 5.集合-set系列集合-CSDN博客 6.集合-Map系列-CSDN博客 文章目…

阿里云关系型数据库RDS详细说明

阿里云RDS关系型数据库大全&#xff0c;关系型数据库包括MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等&#xff0c;NoSQL数据库如Redis、Tair、Lindorm和MongoDB&#xff0c;阿里云百科分享阿里云RDS关系型数据库大全&#xff1a; 目录 阿里云RDS关系型数据库大全 …

人工智能:定义未来,揭开历史神秘面纱,展望无限可能!

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是尘缘&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f449;点击这里&#xff0c;就可以查看我的主页啦&#xff01;&#x1f447;&#x…

4、Linux内核的分析

一、内核分析 1、内核的概念 作为计算机而言&#xff0c;软件和硬件之间是相互依赖的&#xff0c;硬件如果脱离了软件&#xff0c;则无法正常工作&#xff0c;软件脱离了硬件则无法正常运行。这个软件一般指的是操作系统的内核&#xff0c;作为Linux而言&#xff0c;内核也被…

Unity中Shader的前向渲染路径ForwardRenderingPath

文章目录 前言一、前向渲染路径的特点二、渲染方式1、逐像素(效果最好)2、逐顶点(效果次之)3、SH球谐(效果最差) 三、Unity中对灯光设置 后&#xff0c;自动选择对应的渲染方式1、ForwardBase仅用于一个逐像素的平行灯&#xff0c;以及所有的逐顶点与SH2、ForwardAdd用于其他所…

浏览器从输入URL到展示的流程

文章目录 1. URL输入2. DNS解析3. 建立TCP连接4. 发送http或者https请求5. 服务器端响应请求6. 浏览器解析渲染页面7. 断开TCP连接 1. URL输入 输入URL后&#xff0c;浏览器会对URL进行以下的判断 是否合法如果合法&#xff0c;则判断URL是否完整&#xff0c;如果不完整&…

重生奇迹MU刷装备注意事项

在打斗游戏里面装备的作用非常巨大&#xff0c;较好的武器装备可以为玩家带来不错的体验&#xff0c;很多玩家甚至不惜花重金打造属于好装备。那么游戏中刷装备需要注意什么。 一、对武器装备的认识 对于玩家来说需要对武器装备有一定的认识&#xff0c;连基本的武器装备分类都…