当前位置: 首页 > news >正文

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



Python3中类的高级语法及实战

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

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

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

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

国庆中秋宅家自省: Python在Excel中绘图尝鲜 




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


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

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

(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
 

相关文章:

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

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 Python3数据科学包系列(三):数据分析实战 国庆中秋宅家自省: Pyth…...

UE4.27.2 自定义 PrimitiveComponent 出现的问题

目录 CreatePrimitiveUniformBufferImmediateFLocalVertexFactory 默认构造函数GetTypeHashENQUEUE_RENDER_COMMANDnull resource entry in uniform buffer parameters FLocalVertexFactory 在看大象无形,其中关于静态物体网络绘制的代码出错的 bug 我也搞了一会………...

【docker】数据卷和数据卷容器

一、如何管理docker容器中的数据? 二、数据卷 1、数据卷原理 将容器内部的配置文件目录,挂载到宿主机指定目录下 数据卷默认会一直存在,即使容器被删除 宿主机和容器是两个不同的名称空间,如果想进行连接需要用ssh,…...

HTML——列表,表格,表单内容的讲解

文章目录 一、列表1.1无序(unorder)列表1.2 有序(order)列表1.3 定义列表 二、表格**2.1 基本的表格标签2.2 演示 三、表单3.1 form元素3.2 input元素3.2.1 单选按钮 3.3 selcet元素 基础部分点击: web基础 一、列表 …...

Mongodb学习

一、初步了解 1.1 Mongodb 是什么 MongoDB 是一个基于分布式文件存储的数据库,官方地址 https://www.mongodb.com/ 1.2 数据库是什么 数据库(DataBase)是按照数据结构来组织、存储和管理数据的 应用程序 1.3 数据库的作用 数据库的主要…...

2024届计算机毕业生福利来啦!Python毕业设计选题分享Django毕设选题大全Flask毕设选题最易过题目

💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…...

网络爬虫指南

一、定义 网络爬虫,是按照一定规则,自动抓取网页信息。爬虫的本质是模拟浏览器打开网页,从网页中获取我们想要的那部分数据。 二、Python为什么适合爬虫 Python相比与其他编程语言,如java,c#,C&#xff…...

9、媒体元素标签

9、媒体元素标签 一、视频元素 video标签 二、音频元素 audio标签 <!--音频和视频 video&#xff1a;视频标签 audio&#xff1a;音频标签 controls&#xff1a;控制选项&#xff0c;可以显示进度条 autoplay&#xff1a;自动播放 -->示例 <!DOCTYPE html> &…...

php单独使用think-rom数据库 | thinkphp手动关闭数据库连接

背景&#xff08;think-orm2.0.61&#xff09; 由于需要长时间运行一个php脚本&#xff0c;而运行过程并不是需要一直与数据库交互&#xff0c;但thinkphp主要是为web站点开发的框架&#xff0c;而站点一般都是数据获取完则进程结束&#xff0c;所以thinkphp没提供手动关闭数据…...

337. 打家劫舍 III

题目描述 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两…...

tio-websocket-spring-boot-starter的最简单实例,看完你一定有所收获

前言 我最近一个月一直在寻找能够快速开发实时通讯的简单好用的模块,所以我就去寻找了一下相关的内容.在此之前我使用的是Spring原生的webSocket,她有个弊端就是设置组不容易设置,而且配置上也稍微复杂一点,需要配置拦截器和处理器,还需要把它放入到Springboot的启动容器里面,也…...

列出连通集

输入样例: 8 6 0 7 0 1 2 0 4 1 2 4 3 5 输出样例: { 0 1 4 2 7 } { 3 5 } { 6 } { 0 1 2 7 4 } { 3 5 } { 6 } solution #include <stdio.h> #include <string.h> int arcs[10][10]; int visited[10] {0}; void DFS(int n, int v); void BFS(int n , int i)…...

前端 富文本编辑器原理——从javascript、html、css开始入门

文章目录 ⭐前言⭐html的contenteditable属性&#x1f496; 输入的光标位置&#xff08;浏览器获取selection&#xff09;⭐使用Selection.toString () 返回指定的文本⭐getRangeAt 获取指定索引范围 &#x1f496; 修改光标位置&#x1f496; 设置选取range ⭐总结⭐结束 ⭐前…...

堆--数据流中第K大元素

如果对于堆不是太认识&#xff0c;请点击&#xff1a;堆的初步认识-CSDN博客 数据流与上述堆--数组中第K大元素-CSDN博客的数组区别&#xff1a; 数据流的数据是动态变化的&#xff0c;数组是写死的 堆--数组中第K大元素-CSDN博客题的小顶堆加一个方法&#xff1a; class MinH…...

【算法|动态规划No.12】leetcode152. 乘积最大子数组

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…...

Covert Communication 与选择波束(毫米波,大规模MIMO,可重构全息表面)

Covert Communication for Spatially Sparse mmWave Massive MIMO Channels 2023 TOC abstract 隐蔽通信&#xff0c;也称为低检测概率通信&#xff0c;旨在为合法用户提供可靠的通信&#xff0c;并防止任何其他用户检测到合法通信的发生。出于下一代通信系统安全链路的强烈…...

计算机毕业设计 基于协调过滤算法的绿色食品推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

华为云云耀云服务器L实例评测|部署在线影音媒体系统 Jellyfin

华为云云耀云服务器L实例评测&#xff5c;部署在线影音媒体系统 Jellyfin 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 产品规格1.3 应用场景1.4 支持镜像 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Jellyfin3.1 Jellyfin 介绍3.2 Docke…...

GhostNet原理解析及pytorch实现

论文&#xff1a;https://arxiv.org/abs/1911.11907 源码&#xff1a;https://github.com/huawei-noah/ghostnet 简要论述GhostNet的核心内容。 Ghost Net 1、Introduction 在训练良好的深度神经网络的特征图中&#xff0c;丰富甚至冗余的信息通常保证了对输入数据的全面理…...

视频二维码的制作方法,支持内容修改编辑

现在学生经常会需要使用音视频二维码&#xff0c;比如外出打开、才艺展示、课文背诵等等。那么如何制作一个可以长期使用的二维码呢&#xff1f;下面来给大家分享一个二维码制作&#xff08;免费在线二维码生成器-二维码在线制作-音视频二维码在线生成工具-机智熊二维码&#x…...

清华GLM部署记录

环境部署 首先安装anaconda&#xff08;建议包管理比较方便&#xff09;windows用户需手动配置一下环境变量&#xff0c;下面默认是在ubuntu环境说明创建python环境&#xff0c;conda create -n your_env_name python3.10 (注&#xff1a;官方是提供是python3.8&#xff0c;但…...

贪心算法+练习

正值国庆之际&#xff0c;祝愿祖国繁荣昌盛&#xff0c;祝愿朋友一生平安&#xff01;终身学习&#xff0c;奋斗不息&#xff01; 目录 1.贪心算法简介 2.贪心算法的特点 3.如何学习贪心算法 题目练习&#xff08;持续更新&#xff09; 1.柠檬水找零&#xff08;easy&…...

使用华为eNSP组网试验⑷-OSPF多区域组网

今天进行了OSPF的多区域组网试验&#xff0c;本来这是个很简单的操作&#xff0c;折腾了好长时间&#xff0c;根本原因只是看了别人写的配置代码&#xff0c;没有真正弄明白里面对应的规则。 一般情况下&#xff0c;很多单位都使用OSPF进行多区域的组网&#xff0c;大体分为1个…...

P1843 奶牛晒衣服 【贪心】

P1843 奶牛晒衣服 【贪心】 题目背景 熊大妈决定给每个牛宝宝都穿上可爱的婴儿装 。但是由于衣服很湿&#xff0c;为牛宝宝晒衣服就成了很不爽的事情。于是&#xff0c;熊大妈请你&#xff08;奶牛&#xff09;帮助她完成这个重任。 题目描述 一件衣服在自然条件下用一秒的时间…...

91、Redis - 事务 与 订阅-发布 相关的命令 及 演示

★ 事务相关的命令 Redis事务保证事务内的多条命令会按顺序作为整体执行&#xff0c;其他客户端发出的请求绝不可能被插入到事务处理的中间&#xff0c; 这样可以保证事务内所有命令作为一个隔离操作被执行。 Redis事务同样具有原子性&#xff0c;事务内所有命令要么全部被执…...

GPU如何成为AI的加速器

0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解&#xff0c;但是内容可能存在不准确的地方。如果发现文中错误&#xff0c;希望批评指正&#xff0c;共同进步。 本文关键词&#xff1a;GPU、深度学习、GP…...

Map声明、元素访问及遍历、⼯⼚模式、实现 Set - GO语言从入门到实战

Map声明、元素访问及遍历 - GO语言从入门到实战 Map 声明的方式 m := map[string]int{"one": 1, "two": 2, "three": 3} //m初始化时就已经设置了3个键值对,所以它的初始长度len(m)是3。m1 := map[string]int{} //m1被初始化为一个空的m…...

机器人中的数值优化|【七】线性搜索牛顿共轭梯度法、可信域牛顿共轭梯度法

机器人中的数值优化|【七】线性搜索牛顿共轭梯度法、可信域牛顿共轭梯度法 Line Search Newton-CG, Trust Region Newton-CG 往期回顾 机器人中的数值优化|【一】数值优化基础 机器人中的数值优化|【二】最速下降法&#xff0c;可行牛顿法的python实现&#xff0c;以Rosenbro…...

websocket实现go(server)与c#(client)通讯

go 服务端 使用到github.com/gorilla/websocket package mainimport ("fmt""github.com/gorilla/websocket""log""net/http" )func main() {var upgrader websocket.Upgrader{ReadBufferSize: 1024,WriteBufferSize: 1024,CheckOr…...

洛谷题目题解详细解答

洛谷是一个很不错的刷题软件&#xff0c;可是找不到合适的题解是个大麻烦&#xff0c;大家有啥可以私信问我&#xff0c;以下是我已经通过的题目。 你如果有哪一题不会&#xff08;最好是我通过过的&#xff0c;我没过的也没关系&#xff09;&#xff0c;可以私信我&#xff0…...

织梦cms网站/百度爱采购平台登录

导读在上周末&#xff0c;开源的Mesa图形库背后的开发团队宣布&#xff0c;基于Linux的操作系统的最终Mesa 18.1版本发布。Mesa 18.1系列在大约18.0分支释出两个月后发布的&#xff0c;可能大多数GNU/Linux发行版目前正在使用&#xff0c;并且已经获得了第四次维护更新。 Mesa …...

旅游建设网站/百度关键词怎么做

我们在开发时&#xff0c;经常需要重复编写很多和业务无关的代码&#xff0c;比如获取指定日期对象、获取本机 IP 地址、校验身份证号、数据加密等。通常我们会把这些代码独立出来&#xff0c;放到 util 包下&#xff0c;作为 工具类 供其他代码调用。相信每位 Java 开发者都自…...

公司网站招聘板块怎么做/如何快速推广网上国网

无法挂载&#xff0c;提示 unsafe state的时候&#xff0c;请使用 sudo nftsfix dev/sdc5 #这个参数看报错信息来确定安装chrome无法打开网页或者无法启动的时候&#xff0c;在命令行中启动程序&#xff0c;输入网址&#xff0c;观察报错信息搜素解决方案 转载于:https://www…...

谷歌网站收录提交入口/百度应用商店app

app开发中&#xff0c;当展示限时优惠的某些商品时&#xff0c;往往会加一个倒计时&#xff0c;提示用户该商品限时优惠所剩的时间&#xff0c;。那对于开发者来说&#xff0c;这就需要我们去实现的是一个倒计时的功能&#xff0c;这个倒计时根据具体需求&#xff0c;可以以天、…...

保定全员核酸检测/太原整站优化排名外包

本篇文章是对MySQL游标的具体使用进行了详细的分析介绍&#xff0c;需要的朋友参考下测试表 level 代码如下: create table test.level (name varchar(20)); 再 insert 些数据 ;初始化 代码如下: drop procedure if exists useCursor // 建立 存储过程 create代码如下: CREATE…...

wordpress播放没声音/seo入门

三星家电业务对并购持开放态度 北京时间1月25日消息&#xff0c;三星电子高管今天在接受媒体采访时表示&#xff0c;为了保持家电业务的增长&#xff0c;公司会考虑各种选择&#xff0c;包括收购与合并。 本周一&#xff0c;三星召开媒体见面会。三星电子家电业务主管Suh Byung…...