利用python进行数据分析(四)

写在前面
为了提高浏览量,以后在每天的最后加入微生物基因组学的相关知识,走过路过不要错过,看不了吃亏看不了上当~

第三章

3.1.5集合是一种无序且元素唯一的容器,可以理解为集合是只有键的字典。通过set函数或者大括号创建集合。集合具有很多操作方式,可以极大的方便我们对数据进行处理。

>>>a = {1, 2, 3, 4, 5}
>>>b = {3, 4, 5, 6, 7, 8}
#添加元素
>>>a.add(9)
>>>a
{1, 2, 3, 4, 5, 9}
#删除元素
>>>a.remove(9)
>>>a
{1, 2, 3, 4, 5}
#a和b的所有不同元素,即a和b的并集
>>>a.union(b)     等同于:  a | b
{1, 2, 3, 4, 5, 6, 7, 8}
#a和b中同时包含的元素
>>>a.intersection(b)  等同于: a & b
{3, 4, 5}
#在a不在b中的元素
>>>a.difference(b)   等同于: a-b
{1, 2}
#所有在a或者b中,但不同时在a、b中的元素
>>>a.symmetric_difference(b)  等同于: a^b
{1, 2, 6, 7, 8}
#a包含于b则返回True
>>>a.issubset(b)
False
#a包含b则返回True
>>>a.issuperset(b)
False
#a、b没有交集则返回True
>>>a.isdisjoint(b)
False

3.1.6列表、集合和字典推导式

列表推导式允许我们更快速的创建列表,其基本语法为:

list_comp = [ expr for value in collection if condition ]

其过滤条件是可以省略的,只保留表达式。这与下面的for循环时等价的:

result = []
for val in collection:
	if condition:
		result.append(expr)

给定一个字符串列表,我们过滤出长度大于2的,且将字母改为大写。

>>>strings = ['a', 'as', 'bat', 'car', 'love', 'python']
>>>[ x.upper() for x in strings if len(x) > 2]
['BAT', 'CAR', 'LOVE', 'PYTHON']

字典、集合推导式是列表推导式的扩展,字典推导式如下:

dict_comp = { key-expr : value-expr for key, valus in collection if condition}

还是这个给定的字符串,创建一个将字符串与其位置相匹配的字典:

>>>strings = ['a', 'as', 'bat', 'car', 'love', 'python']
>>>{val : index for index, val in enumerate(strings)}
{'a': 0, 'as': 1, 'bat': 2, 'car': 3, 'love': 4, 'python': 5}

集合推导式看起来很像列表推导式,只是将中括号变成大括号:

set_comp = { expr for value in collection if condition }

还是这个给定的字符串,创建一个包含字符串长度的集合:

>>>strings = ['a', 'as', 'bat', 'car', 'love', 'python']
>>>{len(x) for x in strings}
{1, 2, 3, 4, 6}

3.1.6.1 嵌套列表推导式
假如我们含有一个由列表组成的列表(想象一下数据表),内容是人名,我们想将其中含有某种特征的名字提取出来,比如名字中含有两个字母‘e’。
第一种方法:

>>>all_data = [['sda', 'dsadd', 'ioeja'], ['eijak', 'dawee', 'ralks'], ['eeksj', 'eolsa', 'ploij']]
>>>name_of_interest =[]
>>>for names in all_data:
... 	enough_es = [name for name in names if name.count('e') >=2]
... 	name_of_interest.extend(enough_es)
... 	
>>>name_of_interest
['dawee', 'eeksj']

嵌套列表推导式,第二种方法:

>>>result = [name for names in all_data for name in names if name.count('e') >=2 ]
>>>result
['dawee', 'eeksj']

要牢记,for表达式的顺序与写for循环时的顺序一样,即从外向内,且将过滤条件放在最内部。虽然可以嵌套多层的推导式,但当推导式超过3层的时候,就影响阅读了。
再来一个简单应用例子,将上面的名字列表扁平化为一个包含所有名字的列表:

>>>all_names = [name for names in all_data for name in names]
>>>all_names
['sda', 'dsadd', 'ioeja', 'eijak', 'dawee', 'ralks', 'eeksj', 'eolsa', 'ploij']

想象一下,如果我们是对数据表进行处理,将数据表中所有数据整理进一个列表或者集合中,也是这样去操作的,就可以省很多事。

微生物基因组 - 历史

1,1920年,基因组genome一词第一次引入学术界,它是由基因GENe和染色体chromosOME两个词组合而成的。
2,1975年,两个独立的研究组分别宣布发明了DNA测序技术;1977年,sanger改进了测序技术,到1978年,已经可以从一块胶上读出几百个碱基了。
3,1977年,sanger研究组完成了第一个全基因组–фX174噬菌体基因组,5386bp。
4,1986年,第一台自动DNA测序仪诞生。1987年自动测序仪上市,每天可测1~2万个碱基。
5,1986年,数位科学家建议开始人类基因组计划,1990年人类基因组计划正式启动。
6,1944年,完成流汗嗜血杆菌Rd的全基因组测序,1.8Mb,测序深度6。
7,1994年,启动微生物基因组计划。
8,1995年,生殖道支原体全基因组测序完成,600kb,含有470个基因,是最小的基因组。
9,1996年,酿酒酵母基因组测序完成,12Mb,含有6000个基因,分布于16条染色体。
10,1996年,詹氏甲烷球菌完成基因组测序。对它的基因组研究显示,它有关转录、翻译和复制的基因与真核生物类似,而与生物合成和代谢有关的基因与原核生物类似。这为生命划分为古生菌、细菌和真核生物的假说提供了有力支持。

通过对比,可以清晰的看到国外的领先,美国能源部与美国国立卫生院在1990年便拿出了几十亿美金的经费去发展基因组计划,这种魄力与眼光确实值得佩服。要知道哪怕到现在,这种投资对于我们都是很难的,刚刚完成了北斗导航,用了26完成全球组网,预算400~500亿。正视差距,仍有很长的路要走,努力努力再努力!

你可能感兴趣的:(利用python进行数据分析,python)