今日内容概要

  • 时间序列
  • 针对表格数据的分组与聚合操作
  • 其他函数补充(apply)
  • 练习题(为了加深对DataFrame操作的印象)
  • mataplotlib画图模块

今日内容详细

时间序列处理

时间序列类型
1.时间戳
2.具体日期
3.时间间隔 # 灵活处理时间对象dateutil包
import dateutil
dateutil.parser.parse("2020 May 2nd") # 这中间的时间格式一定要是英文格式
运行结果:
datetime.datetime(2020, 5, 2, 0, 0) # 日期批处理
pd.to_datetime(['2020-05-01','2020 May 6'])
运行结果:
DatetimeIndex(['2020-05-01', '2020-05-06'], dtype='datetime64[ns]', freq=None) # 产生一个DatetimeIndex对象 # 转时间索引 res = pd.to_datetime(['2019-04-01','2017 May 09'])
x1= pd.Series([1,2],index=res)
x1
运行结果:
2019-04-01 1
2017-05-09 2
dtype: int64 # 转换为array数组
pd.to_datetime(['2018-05-20','2020 Feb 18']).to_pydatetime()
运行结果:
array([datetime.datetime(2018, 5, 20, 0, 0),
datetime.datetime(2020, 2, 18, 0, 0)], dtype=object) # 产生时间对象数组:date_range
pd.date_range("2020-1-1","2020-2-1")
运行结果:
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
'2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08',
'2020-01-09', '2020-01-10', '2020-01-11', '2020-01-12',
'2020-01-13', '2020-01-14', '2020-01-15', '2020-01-16',
'2020-01-17', '2020-01-18', '2020-01-19', '2020-01-20',
'2020-01-21', '2020-01-22', '2020-01-23', '2020-01-24',
'2020-01-25', '2020-01-26', '2020-01-27', '2020-01-28',
'2020-01-29', '2020-01-30', '2020-01-31', '2020-02-01'],
dtype='datetime64[ns]', freq='D') # 时间序列
以时间对象作为索引的Series或DataFrame
# 转换时间索引
res1 = pd.date_range("2020-01-01","2020-02-01")
b = pd.DataFrame({"num":pd.Series(random.randint(-100,100)for _ in range(32)),"date":res1})
b
运行结果:
num date
0 13 2020-01-01
1 76 2020-01-02
2 -93 2020-01-03
3 87 2020-01-04
4 -16 2020-01-05
5 67 2020-01-06
6 -79 2020-01-07
7 -10 2020-01-08
8 5 2020-01-09
9 -93 2020-01-10
10 9 2020-01-11
11 24 2020-01-12
12 61 2020-01-13
13 82 2020-01-14
14 -52 2020-01-15
15 -49 2020-01-16
16 -65 2020-01-17
17 4 2020-01-18
18 84 2020-01-19
19 44 2020-01-20
20 -69 2020-01-21
21 -3 2020-01-22
22 96 2020-01-23
23 13 2020-01-24
24 80 2020-01-25
25 -3 2020-01-26
26 -73 2020-01-27
27 -51 2020-01-28
28 35 2020-01-29
29 40 2020-01-30
30 24 2020-01-31
31 -56 2020-02-01 # 先生成一个带有时间数据的DataFrame数组
b.index = pd.to_datetime(b["date"])
b
运行结果:
num date
date
2020-01-01 13 2020-01-01
2020-01-02 76 2020-01-02
2020-01-03 -93 2020-01-03
2020-01-04 87 2020-01-04
2020-01-05 -16 2020-01-05
2020-01-06 67 2020-01-06
2020-01-07 -79 2020-01-07
2020-01-08 -10 2020-01-08
2020-01-09 5 2020-01-09
2020-01-10 -93 2020-01-10
2020-01-11 9 2020-01-11
2020-01-12 24 2020-01-12
2020-01-13 61 2020-01-13
2020-01-14 82 2020-01-14
2020-01-15 -52 2020-01-15
2020-01-16 -49 2020-01-16
2020-01-17 -65 2020-01-17
2020-01-18 4 2020-01-18
2020-01-19 84 2020-01-19
2020-01-20 44 2020-01-20
2020-01-21 -69 2020-01-21
2020-01-22 -3 2020-01-22
2020-01-23 96 2020-01-23
2020-01-24 13 2020-01-24
2020-01-25 80 2020-01-25
2020-01-26 -3 2020-01-26
2020-01-27 -73 2020-01-27
2020-01-28 -51 2020-01-28
2020-01-29 35 2020-01-29
2020-01-30 40 2020-01-30
2020-01-31 24 2020-01-31
2020-02-01 -56 2020-02-01 # 再通过index修改索引 '''
补充
1.传入年或者年月作为切片方式
2.传入日期范围作为切片方式
3.丰富的函数支持:resample(),strftime(),…
4.批量转换为Datetime对象:to_pydatetime()
a.resample("3D").mean() # 计算每三天的均值
a.resample("3D"),sum() # 计算每三天的和 '''

数据分组与聚合

x2 = pd.DataFrame({'key1':['x','x','y','y','x'],'key2':['one','two','one','two','one'],'data1':np.random.randn(5),'data2':np.random.randn(5)})
x2
运行结果:
key1 key2 data1 data2
0 x one -1.035376 -0.771586
1 x two -0.431538 -0.417636
2 y one 0.961583 1.500525
3 y two -0.969363 -1.919455
4 x one 1.080788 0.720058 n1 = x2['data1'].groupby(x2['key1'])
n1.mean() # 调用mean函数求出平均值
n2 = x2['data1'].groupby([x2['key1'],x2['key2']])
n2.mean()
运行结果:
key1 key2
x one 0.022706
two -0.431538
y one 0.961583
two -0.969363
Name: data1, dtype: float64 n2.mean().unstack()
运行结果:
key2 one two
key1
x 0.022706 -0.431538
y 0.961583 -0.969363
# 通过unstack方法就可以让索引不堆叠在一起了 # 以上面的n2测试
n2.size()
key1 key2
x one 2
two 1
y one 1
two 1
Name: data1, dtype: int64

聚合函数的自定义

# 使用自定义的聚合函数,需要将其传入aggregate或者agg方法当中
def peak_to_peak(arr):
return arr.max() - arr.min()
n1.aggregate(peak_to_peak)
运行结果:
key1
x 2.116164
y 1.930947
Name: data1, dtype: float64

多个聚合函数联合

n1.agg(['mean','std'])
运行结果:
mean std
key1
x -0.128708 1.090099
y -0.003890 1.365385 n2.agg(['mean','std','sum']).unstack()
运行结果:
mean std sum
key2 one two one two one two
key1
x 0.022706 -0.431538 1.496354 NaN 0.045412 -0.431538
y 0.961583 -0.969363 NaN NaN 0.961583 -0.969363 """
总结
聚合函数的时候 单个情况下可以直接点击函数名
df.sum()
如果想要执行多个聚合函数
df.agg(['mean','sum']) 多个
df.agg(['mean']) 单个
"""

apply

支持你自定义各种对数据的操作方式

数据分析的数据来源

  • 公司内部

  • 从外购买的

  • 爬虫爬取

    '''
    HTML:超文本标记语言
    HTML页面:就是由一系列html标签组成的浏览器能够直接查看的界面
    ''' # 1.分析NBA各球队冠军次数及球员FMVP次数
    import numpy as np
    import pandas as pd
    ses1=pd.read_html(r"https://baike.baidu.com/item/NBA%E6%80%BB%E5%86%A0%E5%86%9B/2173192") #切记 如果报错记得在网址前加r
    # 返回的是一个列表 列表中是当前页面的所有表格数据
    ses1
    运行结果:
    [ 0 1 2 3 4 5
    0 年份 比赛日期 冠军 总比分 亚军 FMVP
    1 1947 4.16-4.22 费城勇士队 4-1 芝加哥牡鹿队 无
    2 1948 4.10-4.21 巴尔的摩子弹队 4-2 费城勇士队 无
    3 1949 4.4-4.13 明尼阿波利斯湖人队 4-2 华盛顿国会队 无
    4 1950 4.8-4.23 明尼阿波利斯湖人队 4-2 塞拉库斯民族队 无
    .. ... ... ... ... ... ...
    69 2015 6.5-6.17 金州勇士队 4-2 克里夫兰骑士队 安德烈·伊戈达拉
    70 2016 6.3-6.20 克里夫兰骑士队 4-3 金州勇士队 勒布朗·詹姆斯
    71 2017 6.2-6.13 金州勇士队 4-1 克利夫兰骑士队 凯文·杜兰特
    72 2018 6.1-6.9 金州勇士队 4-0 克利夫兰骑士队 凯文·杜兰特
    73 2019 5.31-6.14 多伦多猛龙队 4-2 金州勇士队 科怀·伦纳德 [74 rows x 6 columns],
    0 1 2 3 \
    0 联盟 赛区 球队 夺冠次数
    1 东部联盟 大西洋 波士顿凯尔特人队 17
    2 西部联盟 太平洋 洛杉矶湖人队 16
    3 西部联盟 太平洋 金州勇士队 [1] 6
    4 东部联盟 中部 芝加哥公牛队 6
    5 西部联盟 西南 圣安东尼奥马刺队 5
    6 东部联盟 大西洋 费城76人队 3
    7 东部联盟 中部 底特律活塞队 3
    8 东部联盟 东南 迈阿密热火队 3
    9 东部联盟 大西洋 纽约尼克斯队 2
    10 西部联盟 西南 休斯敦火箭队 2
    11 西部联盟 太平洋 萨克拉门托国王队 1
    12 东部联盟 东南 亚特兰大老鹰队 1
    13 东部联盟 中部 密尔沃基雄鹿队 1
    14 西部联盟 西北 波特兰开拓者队 1
    15 东部联盟 东南 华盛顿奇才队 1
    16 西部联盟 西北 俄克拉荷马城雷霆队(西雅图超音速) 1
    17 西部联盟 西南 达拉斯小牛队 1
    18 东部联盟 中部 克里夫兰骑士队 1
    19 东部联盟 大西洋 多伦多猛龙队 1
    20 东部联盟 大西洋 布鲁克林篮网队 0
    21 东部联盟 中部 印第安纳步行者队 0
    22 东部联盟 东南 夏洛特黄蜂队 0
    23 东部联盟 东南 奥兰多魔术队 0
    24 西部联盟 太平洋 洛杉矶快船队 0
    25 西部联盟 太平洋 菲尼克斯太阳队 0
    26 西部联盟 西北 丹佛掘金队 0
    27 西部联盟 西北 明尼苏达森林狼队 0
    28 西部联盟 西北 犹他爵士队 0
    29 西部联盟 西南 孟菲斯灰熊队 0
    30 西部联盟 西南 新奥尔良鹈鹕队 0
    31 已撤销 已撤销 巴尔的摩子弹 1 4
    0 夺冠年份
    1 1957、1959-1966、1968-1969、1974、 1976、1981、1984、...
    2 1949-1950、1952-1954、1972、1980、1982、 1985、1987-...
    3 1947、1956、1975、2015、2017-2018
    4 1991-1993、1996-1998
    5 1999、2003、2005、2007、2014
    6 1955、1967、1983
    7 1989-1990、2004
    8 2006、2012、2013
    9 1970、1973
    10 1994-1995
    11 1951
    12 1958
    13 1971
    14 1977
    15 1978
    16 1979
    17 2011
    18 2016
    19 2019
    20 NaN
    21 NaN
    22 NaN
    23 NaN
    24 NaN
    25 NaN
    26 NaN
    27 NaN
    28 NaN
    29 NaN
    30 NaN
    31 1948(该队并非现奇才队前身) ] # 获取有效数据
    cv = ses1[0]
    cv
    运行结果:
    0 1 2 3 4 5
    0 年份 比赛日期 冠军 总比分 亚军 FMVP
    1 1947 4.16-4.22 费城勇士队 4-1 芝加哥牡鹿队 无
    2 1948 4.10-4.21 巴尔的摩子弹队 4-2 费城勇士队 无
    3 1949 4.4-4.13 明尼阿波利斯湖人队 4-2 华盛顿国会队 无
    4 1950 4.8-4.23 明尼阿波利斯湖人队 4-2 塞拉库斯民族队 无
    ... ... ... ... ... ... ...
    69 2015 6.5-6.17 金州勇士队 4-2 克里夫兰骑士队 安德烈·伊戈达拉
    70 2016 6.3-6.20 克里夫兰骑士队 4-3 金州勇士队 勒布朗·詹姆斯
    71 2017 6.2-6.13 金州勇士队 4-1 克利夫兰骑士队 凯文·杜兰特
    72 2018 6.1-6.9 金州勇士队 4-0 克利夫兰骑士队 凯文·杜兰特
    73 2019 5.31-6.14 多伦多猛龙队 4-2 金州勇士队 科怀·伦纳德
    74 rows × 6 columns # 1.将第一行变成列名称(原来的行数据还在)
    cv.columns = cv.lioc[0]
    cv
    # 2.将第二行数据删除 del drop
    cv.drop([0],inplace = True) # 默认不是修改的原数据 可以加inplace参数
    cv
    运行结果:
    年份 比赛日期 冠军 总比分 亚军 FMVP
    1 1947 4.16-4.22 费城勇士队 4-1 芝加哥牡鹿队 无
    2 1948 4.10-4.21 巴尔的摩子弹队 4-2 费城勇士队 无
    3 1949 4.4-4.13 明尼阿波利斯湖人队 4-2 华盛顿国会队 无
    4 1950 4.8-4.23 明尼阿波利斯湖人队 4-2 塞拉库斯民族队 无
    5 1951 4.7-4.21 罗切斯特皇家队 4-3 纽约尼克斯队 无
    ... ... ... ... ... ... ...
    69 2015 6.5-6.17 金州勇士队 4-2 克里夫兰骑士队 安德烈·伊戈达拉
    70 2016 6.3-6.20 克里夫兰骑士队 4-3 金州勇士队 勒布朗·詹姆斯
    71 2017 6.2-6.13 金州勇士队 4-1 克利夫兰骑士队 凯文·杜兰特
    72 2018 6.1-6.9 金州勇士队 4-0 克利夫兰骑士队 凯文·杜兰特
    73 2019 5.31-6.14 多伦多猛龙队 4-2 金州勇士队 科怀·伦纳德
    73 rows × 6 columns # 针对冠军字段分组
    cv.groupby('冠军').groups
    运行结果:
    {'休斯顿火箭队': [48, 49], '克里夫兰骑士队': [70], '华盛顿子弹队': [32], '圣安东尼奥马刺队': [53, 57, 59, 61, 68], '圣路易斯老鹰队': [12], '塞拉库斯民族队': [9], '多伦多猛龙队': [73], '密尔沃基雄鹿队': [25], '巴尔的摩子弹队': [2], '底特律活塞队': [43, 44, 58], '明尼阿波利斯湖人队': [3, 4, 6, 7, 8], '波士顿凯尔特人队': [11, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 28, 30, 35, 38, 40, 62], '波特兰开拓者队': [31], '洛杉矶湖人队': [26, 34, 36, 39, 41, 42, 54, 55, 56, 63, 64], '纽约尼克斯队': [24, 27], '罗切斯特皇家队': [5], '芝加哥公牛队': [45, 46, 47, 50, 51, 52], '西雅图超音速队': [33], '费城76人队': [21, 37], '费城勇士队': [1, 10], '达拉斯小牛队': [65], '迈阿密热火队': [60, 66, 67], '金州勇士队': [29, 69, 71, 72]} # 获取分组之后的各分组大小
    cv.groupby('冠军').size()
    运行结果:
    冠军
    休斯顿火箭队 2
    克里夫兰骑士队 1
    华盛顿子弹队 1
    圣安东尼奥马刺队 5
    圣路易斯老鹰队 1
    塞拉库斯民族队 1
    多伦多猛龙队 1
    密尔沃基雄鹿队 1
    巴尔的摩子弹队 1
    底特律活塞队 3
    明尼阿波利斯湖人队 5
    波士顿凯尔特人队 17
    波特兰开拓者队 1
    洛杉矶湖人队 11
    纽约尼克斯队 2
    罗切斯特皇家队 1
    芝加哥公牛队 6
    西雅图超音速队 1
    费城76人队 2
    费城勇士队 2
    达拉斯小牛队 1
    迈阿密热火队 3
    金州勇士队 4
    dtype: int64 # 获取各组冠军次数
    cv.groupby('冠军').size().sort_values(ascending=False) # 升序
    运行结果:
    冠军
    波士顿凯尔特人队 17
    洛杉矶湖人队 11
    芝加哥公牛队 6
    圣安东尼奥马刺队 5
    明尼阿波利斯湖人队 5
    金州勇士队 4
    迈阿密热火队 3
    底特律活塞队 3
    休斯顿火箭队 2
    纽约尼克斯队 2
    费城76人队 2
    费城勇士队 2
    塞拉库斯民族队 1
    克里夫兰骑士队 1
    华盛顿子弹队 1
    达拉斯小牛队 1
    圣路易斯老鹰队 1
    西雅图超音速队 1
    多伦多猛龙队 1
    密尔沃基雄鹿队 1
    罗切斯特皇家队 1
    波特兰开拓者队 1
    巴尔的摩子弹队 1
    dtype: int64 # 分组字段可以一次性取多个
    cv.groupby(['冠军','FMVP']).size()
    运行结果:
    冠军 FMVP
    休斯顿火箭队 哈基姆·奥拉朱旺 2
    克里夫兰骑士队 勒布朗·詹姆斯 1
    华盛顿子弹队 韦斯·昂塞尔德 1
    圣安东尼奥马刺队 托尼·帕克 1
    科怀·伦纳德 1
    蒂姆·邓肯 3
    圣路易斯老鹰队 无 1
    塞拉库斯民族队 无 1
    多伦多猛龙队 科怀·伦纳德 1
    密尔沃基雄鹿队 贾巴尔 1
    巴尔的摩子弹队 无 1
    底特律活塞队 乔·杜马斯 1
    伊塞亚·托马斯 1
    昌西·比卢普斯 1
    明尼阿波利斯湖人队 无 5
    波士顿凯尔特人队 乔·乔·怀特 1
    保罗·皮尔斯 1
    塞德里克·麦克斯维尔 1
    拉里·伯德 2
    无 10
    杰里·韦斯特 1
    约翰·哈夫利切克 1
    波特兰开拓者队 比尔·沃顿 1
    洛杉矶湖人队 埃尔文·约翰逊 3
    张伯伦 1
    沙奎尔·奥尼尔 3
    科比·布莱恩特 2
    詹姆斯·沃西 1
    贾巴尔 1
    纽约尼克斯队 威利斯·里德 2
    罗切斯特皇家队 无 1
    芝加哥公牛队 迈克尔·乔丹 6
    西雅图超音速队 丹尼斯·约翰逊 1
    费城76人队 摩西·马龙 1
    无 1
    费城勇士队 无 2
    达拉斯小牛队 德克·诺维茨基 1
    迈阿密热火队 勒布朗·詹姆斯 2
    德怀恩·韦德 1
    金州勇士队 凯文·杜兰特 2
    安德烈·伊戈达拉 1
    里克·巴里 1
    dtype: int64
    # 欧洲杯
    # 分析欧洲杯和欧洲冠军联赛决赛名单
    url="https://en.wikipedia.org/wiki/List_of_European_Cup_and_UEFA_Champions_League_finals"
    eu_champions=pd.read_html(url) # 获取数据 b1 = eu_champions[2] # 取出决赛名单 b1.columns = b1.loc[0] # 使用第一行的数据替换默认的横向索引 b1.drop(0,inplace=True) # 将第一行的数据删除
    b1.drop('#',axis=1,inplace=True) # 将以#为列名的那一列删除 b1.columns=['Season', 'Nation', 'Winners', 'Score', 'Runners_up', 'Runners_up_Nation', 'Venue','Attendance'] # 设置列名 b1.tail() # 查看后五行数据
    b1.drop([64,65],inplace=True) # 删除其中的缺失行以及无用行
    b1

    Matplotlib模块

可以将numpy pandas里面的数据用图形化的展示出来

是一个强大的python绘图和数据可视化工具包,数据可视化也是我们数据分析重要环节之一,可以帮助我们分析出很多价值信息,也是数据分析的最后一个可视化阶段

导入语句

# 下载
pip3 install matplotlib # 推荐语法
import matplotlib.pyplot as plt

pandas模块篇(终章)及初识mataplotlib的更多相关文章

  1. pandas模块篇(之三)

    今日内容概要 目标:将Pandas尽量结束 如何读取外部excel文件数据到DataFrame中 针对DataFrame的常用数据操作 索引与切片 操作DataFrame的字段名称 时间对象序列操作 ...

  2. pandas模块篇(之二)

    今日内容概要 布尔选择器 索引 数据对齐 数据操作(增出改查) 算术方法 DataFrame(Excel表格数据) 布尔选择器 import numpy as np import pandas as ...

  3. C#使用Xamarin开发可移植移动应用终章(11.获取设备信息与常用组件,开源一个可开发模版.)

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 本系列,终 ...

  4. 关于Python pandas模块输出每行中间省略号问题

    关于Python数据分析中pandas模块在输出的时候,每行的中间会有省略号出现,和行与行中间的省略号....问题,其他的站点(百度)中的大部分都是瞎写,根本就是复制黏贴以前的版本,你要想知道其他问题 ...

  5. Pandas模块

    前言: 最近公司有数据分析的任务,如果使用Python做数据分析,那么对Pandas模块的学习是必不可少的: 本篇文章基于Pandas 0.20.0版本 话不多说社会你根哥!开干! pip insta ...

  6. 史上最简单的 SpringCloud 教程 | 终章

    https://blog.csdn.net/forezp/article/details/70148833转载请标明出处:http://blog.csdn.net/forezp/article/det ...

  7. BugPhobia终章篇章:学霸在线系统Beta阶段展示

    0x00 :序言 1 universe, 9 planets, 204 countries,809 islands, 7 seas, and i had the privilege to meet y ...

  8. SpringBoot非官方教程 | 终章:文章汇总

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-all/ 本文出自方志朋的博客 SpringBo ...

  9. 开发技术--pandas模块

    开发|pandas模块 整了一篇关于pandas模块的使用文章,方便检查自己的学习质量.自从使用了pandas之后,真的是被它的功能所震撼~~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识: ...

随机推荐

  1. Java 继承02

    向上类型转换 父类型的引用指向子类型的实例. Person p = new Person();Animal a = p; //子类对象赋值给父类类型的变量 注意: 向上转型后,子类单独定义的方法会丢失 ...

  2. 幂等性是数学中的一个概念,表达的是N次变换与1次变换的结果相同

    幂等性是数学中的一个概念,表达的是N次变换与1次变换的结果相同

  3. String类为什么可以直接赋值

    在研究String直接赋值与new String的区别之前我们需要先了解java中的字符串常量池的概念 字符串常量池 String类是我们平常项目中使用频率非常高的一种对象类型,jvm为了提升性能和减 ...

  4. iOS应用性能调优的建议和技巧--中高级--王朋

    中级(这些是你可能在一些相对复杂情况下可能用到的) 9. 重用和延迟加载Views 10. Cache, Cache, 还是Cache! 11. 权衡渲染方法 12. 处理内存警告 13. 重用大开销 ...

  5. 关于tx:method和pointcut中的方法,即事务管理中的方法和切入点表达式中的方法具体如何执行

    <tx:advice id="transaction" tranction-manager="transactionManager"> <tx ...

  6. 抽象修饰符abstract

    描述一类事物的时候发现该类存在一种行为,但不知道行为具体怎么实现,我们将这种行为称之为抽象行为,这时候我们就需要抽象类 抽象类的好处:抽象类中的抽象方法一定要备子类重写 抽象类注意点: 1.在类中,一 ...

  7. Redis 源码简洁剖析 10 - aeEventLoop 及事件

    aeEventLoop IO 事件处理 IO 事件创建 读事件处理 写事件处理 时间事件处理 时间事件定义 时间事件创建 时间事件回调函数 时间事件的触发处理 参考链接 Redis 源码简洁剖析系列 ...

  8. 安卓手机超频CPU(无修饰CPU控制)

    手机软件内存越占越大,手机硬件配置太低运行太卡.其实可以通过超频cpu提升性能,安卓智能手机cpu怎么超频下面我来演示手机如何超频cpu.   方法/步骤     打开无修饰CPU控制.   设置CP ...

  9. 精简的言语讲述技术人,必须掌握基础性IT知识技能,第一篇

    前言 此系列将以精简的言语讲述技术人,必须掌握基础性IT知识技能,请持续关注,希望给大家都是一些精简的干货. 第一部分:必须掌握的设计模式的6大基本原则 23个设计模式,都是从这六大设计模式中演化而来 ...

  10. v77.01 鸿蒙内核源码分析(消息封装篇) | 剖析LiteIpc(上)进程通讯内容 | 新的一年祝大家生龙活虎 虎虎生威

    百篇博客分析|本篇为:(消息封装篇) | 剖析LiteIpc进程通讯内容 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁 ...