在生信媛微信公众号看到一篇《对青年千人表格信息的可视化探索》(https://github.com/wandering513/Data_workshop),中间有一个分析是关于千人青年们的出生年月的,没有细化到星座,我决定细化到星座来检测一下星座是否科学。
作者是使用R的,用得熟练,我作为一个R初学者,难以完成这样的任务,只好祭出我的菜鸟python,至少能用来解决问题。其实是一个很简单的问题,只要建立一个字典,然后把千人青年们的出生日期处理一下对应上去。把生日变成了小数,本来是做了一个星座:星座日期的列表的字典,运行过程 中发现列表不能作为字典的键值,因为我要把日期对应星座的时候需要对调字典的键值,所以就改成了字符串:字符串形式的字典。尽管代码不是最好的,但是,还是完成了任务,代码 如下:
fin = open('1000.txt','r')
def get_astro():
astro_dict = {}
dict_of_date = { '水瓶':'1.20-2.18', '摩羯':'0.00-0.0',\
'双鱼':'2.19-3.20', '白羊':'3.21-4.19', \
'金牛':'4.20-5.20', '双子':'5.21-6.21', \
'巨蟹':'6.22-7.22', '狮子':'7.23-8.22', \
'处女':'8.23-9.22', '天秤':'9.23-10.23', \
'天蝎':'10.24-11.22', '射手':'11.23-12.21'
} #'摩羯':'12.22-1.19',
new_dict = {v:k for k,v in dict_of_date.items()}
for b in dict_of_date.keys():
astro_dict[b] = 0
for line in fin:
birthday = line.strip().split('\t')[3].split('/')[1:]
birthday = birthday[0] + '.' + birthday[1]
birthday = float(birthday)
#print(birthday)
if birthday > 12.21 or birthday <= 1.19:
astro_dict['摩羯'] += 1
else:
for a in dict_of_date.values():
if float(a.split('-')[0]) <= birthday <= float(a.split('-')[1]):
astro_dict[new_dict.get(a)] += 1
#print(astro_dict)
#break
print(astro_dict)
get_astro()
因为只有600多人,秒得到了结果,结果如下:
'水瓶': 46, '摩羯': 49, '双鱼': 56, '白羊': 41, '金牛': 50, '双子':\ 48, '巨蟹': 42, '狮子': 43, '处女': 62, '天秤': 63, '天蝎': 63, \ '射手': 67
我也来个可视化,不过是excel的:
结果表明,基本上与星座没有什么关系嘛,600人的数据,应该不小了,哪天可以再选个大点的试试。