鱼C论坛

 找回密码
 立即注册
查看: 3886|回复: 4

[学习笔记] 【参赛】与编程的邂逅

[复制链接]
发表于 2016-9-12 10:06:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
从邮件中看到了这次“我的学习路”征稿活动,不禁有些许感慨,我就来说说我与编程语言邂逅的故事吧

—————————————————分   割   线——————————————————————

首先要说的是本人并不是计算机专业出身,在大学期间涉及的编程也只有考了76分的C语言。目前是流行病与卫生统计专业的硕士研究生。主攻医疗大数据分析


【邂逅】

与编程语言Python的邂逅还要从一次数据规整说起:
目前,我所在学科主要使用统计分析软件SAS、SPSS、STATA以及近几年流行起来得R语言,但是这些软件都有一个特点就是精于数据分析计算,但是不擅长数据的整理(尤其是中文数据)。举个例子:在SAS中数据以一条条观测的形式存于一个数据集中,一个观测一行,观测包含的变量信息为列,当我要对某个观测中含有中文内容的某个变量值进行修改时(尤其是替换、部分删除等操作)问题就出现了,由于本身对中文的支持度不高,修改就结果就可能是乱码。在屡次尝试无法成功后,我求助于大学时一个对计算机特别感兴趣同学,求助内容是将约170万条观测中所有小括号以及小括号内的内容删掉。他就使用了Python2.7给我写了一段代码,最后小课题顺利完成,我也认识到了Python语言的魅力,从此在课余迈上了编程这条路。


【学习方法】

Python于我可以说是一个不可或缺的工具,现在我毕业课题中也包含了大量Python的使用。从一个完全的门外汉到使用Python处理一些简单问题,我大约花了一个半月时间,期间主要的方法是看“零基础学习Python”系列视频,并完成课后习题。十分惭愧 ,我看到第23课“递归”时就没有往下看了,因为我的学习编程语言的方法是“发现问题,解决问题”,手上的问题解决了,就暂时没有学习下去的动力了。在进行毕业课题中的编程时,当课程内容及相关书籍无法解决问题是我的方法就是——百度。期间我题的问题都得到高手的指导,这些指导也帮助我顺利完成了毕业课题中Python编程环节。


【作品】(初学者的小作品)

这是毕业课题中的主体程序,利用双聚类方法对数据进行分析,这里的双聚类是使用Matlab完成的,Python的作用是对数据进行整理,形成SAS能够完美分析的数据集形式。

数据处理流程如下:

数据分析流程

数据分析流程



————————————分割线——————————————

代码如下:

  1. import os
  2. os.mkdir(r'C:\Users\zzz\Desktop\双聚类结果\matlab\col')
  3. os.mkdir(r'C:\Users\zzz\Desktop\双聚类结果\matlab\row')
  4. os.mkdir(r'C:\Users\zzz\Desktop\双聚类结果\matlab\result')
  5. os.mkdir(r'C:\Users\zzz\Desktop\双聚类结果\matlab\result_replace')
  6. os.mkdir(r'C:\Users\zzz\Desktop\双聚类结果\matlab\result_group')

  7. nc1 = input("输入矩阵数量:")
  8. nc2 = int(nc1) + 1

  9. #读取行数据
  10. i = 1
  11. j = 1
  12. fw = open('C:/Users/zzz/Desktop/双聚类结果/matlab/row/' + str(j) + '.txt', 'w')
  13. for line in open('C:/Users/zzz/Desktop/双聚类结果/matlab/out_rows.txt', 'r'):
  14.     b = line.replace('[','x').replace(']','x')
  15.     c = b.replace('     ',' ')
  16.     d = c.replace('    ',' ')
  17.     e = d.replace('   ',' ')
  18.     f = e.replace('  ',' ')
  19.     g = f.replace(' ','x;x')
  20.     fw.write(g)
  21.     i += 1
  22.     if i > 1 and i % 3 == 1 :
  23.         fw.close()
  24.         lines = open('C:/Users/zzz/Desktop/双聚类结果/matlab/row/' + str(j) + '.txt').readlines()
  25.         del lines[0]
  26.         open('C:/Users/zzz/Desktop/双聚类结果/matlab/row/' + str(j) + '.txt','w').writelines(lines)
  27.         fw.close()
  28.         j += 1
  29.         fw = open('C:/Users/zzz/Desktop/双聚类结果/matlab/row/' + str(j) + '.txt', 'w')
  30. fw.close()
  31. #读取列数据
  32. i = 1
  33. j = 1
  34. fw = open('C:/Users/zzz/Desktop/双聚类结果/matlab/col/' + str(j) + '.txt', 'w')
  35. for line in open('C:/Users/zzz/Desktop/双聚类结果/matlab/out_cols.txt', 'r'):
  36.     b = line.replace('[','v').replace(']','v')
  37.     c = b.replace('     ',' ')
  38.     d = c.replace('    ',' ')
  39.     e = d.replace('   ',' ')
  40.     f = e.replace('  ',' ')
  41.     g = f.replace(' ','v;v')
  42.     fw.write(g)
  43.     i += 1
  44.     if i > 1 and i % 3 == 1 :
  45.         fw.close()
  46.         lines = open('C:/Users/zzz/Desktop/双聚类结果/matlab/col/' + str(j) + '.txt').readlines()
  47.         del lines[0]
  48.         open('C:/Users/zzz/Desktop/双聚类结果/matlab/col/' + str(j) + '.txt','w').writelines(lines)
  49.         fw.close()
  50.         j += 1
  51.         fw = open('C:/Users/zzz/Desktop/双聚类结果/matlab/col/' + str(j) + '.txt', 'w')
  52. fw.close()

  53. #行列数据整合
  54. j = 1

  55. for m in range(1,nc2):
  56.     i = 0
  57.     f = open('C:/Users/zzz/Desktop/双聚类结果/matlab/result/' + str(j) + '.txt','w')
  58.     row = open('C:/Users/zzz/Desktop/双聚类结果/matlab/row/' + str(j) + '.txt','r')
  59.     col = open('C:/Users/zzz/Desktop/双聚类结果/matlab/col/' + str(j) + '.txt','r')
  60.     while i < 2:
  61.         if i == 0 :
  62.             m = row.readline()
  63.             n = col.readline()
  64.             oz1 = m.strip('\n') + ' ' + n
  65.             f.write(oz1)
  66.             i += 1
  67.         if i == 1:
  68.             m = row.readline()
  69.             n = col.readline()
  70.             oz2 = m + n
  71.             f.write(oz2)
  72.             i += 1
  73.         j += 1
  74.     f.flush()
  75. f.close()

  76. for j in range(1,nc2):
  77.     zdian_row = open('C:/Users/zzz/Desktop/D编号.txt')
  78.     zdian_col = open('C:/Users/zzz/Desktop/A编号.txt')
  79.     result = open('C:/Users/zzz/Desktop/双聚类结果/matlab/result_replace/' + str(j) + '.txt', 'w+')
  80.     ol = open('C:/Users/zzz/Desktop/双聚类结果/matlab/result/' + str(j) + '.txt')
  81.     txt = ol.readlines()
  82.     num = txt[0]
  83.     b = row = txt[1]
  84.     c = col = txt[2]
  85.     for text1 in zdian_row:
  86.         zf_o1 = text1.split()
  87.         zf_z1 = zf_o1[0].strip('"')
  88.         zf_r1 = 'x' + zf_o1[1] + 'x'
  89.         b = b.replace(zf_r1,zf_z1)
  90.     for text2 in zdian_col:
  91.         zf_o2 = text2.split()
  92.         zf_z2 = zf_o2[0].strip('"')
  93.         zf_r2 = 'v' + zf_o2[1] + 'v'
  94.         c = c.replace(zf_r2,zf_z2)
  95.     result.write(num)
  96.     result.write(b)
  97.     result.write(c)
  98.     result.close()


  99. #组合生成
  100. i = 1
  101. for m in range(1,nc2):
  102.     fw = open('C:/Users/zzz/Desktop/双聚类结果/matlab/result_group/' + str(i) + '.txt', 'w')
  103.     with open('C:/Users/zzz/Desktop/双聚类结果/matlab/result_replace/' + str(i) + '.txt') as info:
  104.         text = info.readlines()
  105.         num = text[0]
  106.         fw.write(num)
  107.         drug =  text[1].strip('\n')
  108.         adr = text[2].strip('\n')
  109.         for each in drug.split(';'):
  110.             for other in adr.split(';'):
  111.                 a = (str(each) + '@'+ str(other))
  112.                 b = a.strip('\n')
  113.                 fw.write(b + '\n')
  114.     i += 1
  115. fw.close()
复制代码

————————————分割线——————————————

矩阵数量是Matlab计算结果中会显现的内容,“out_rows.txt”是双聚类结果(行×列)中行的信息,“out_cols.txt”是双聚类结果(行×列)中列的信息。“D编号.txt”是行信息的数据编码表。“A编号.txt”是列信息的数据编码表。进行正向、逆向编码的原因是Matlab以计算是会把SAS形成的矩阵形式数据的列标目自动编号,结果中无法看到列标目信息

过程中的每个数据txt的结果如下(出于保密需要我把一些内容打了码):

首先是Matlab导出的数据格式:

列数据

列数据


行数据

行数据


之后是行列数据整理、分割:

4.JPG

5.JPG

之后是行列数据整合:

6.JPG

之后是编码逆转换,从编码变回中文:

8.JPG

最后是分类规整:

9.JPG


【感言】

多学科交叉,拓展思维,开拓眼界,Programming makes life better!


点评

我很赞同!: 4.0
我很赞同!: 4
Programming makes life better!  发表于 2016-10-9 00:15

评分

参与人数 3鱼币 +21 收起 理由
小甲鱼 + 8 热爱鱼C^_^
欧拉计划 + 8 热爱鱼C^_^
康小泡 + 5 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-12 19:00:54 | 显示全部楼层
小甲鱼老师说过,需要用的时候来学效果是最好的。所以楼主很厉害啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-9 00:15:34 | 显示全部楼层
Programming makes life better

说得太好了,这正是我们这一班人奋斗的目标!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-19 19:46:28 | 显示全部楼层
非常棒。基础打得好??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-16 17:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表