Python之数据分析总结

  1. 将文本打开读取文本内八位的十六进制数值,进行分割,将其转换为十进制数值并输出,并绘图。
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    file_object = open('thefile.txt')
    
    try:
       	 file_context = file_object.read()  
    finally:
    file_object.close()
    d =file_context.split(' ')
    print (d)
    
    data =list()
    for c in d:
        if (c != '\n') & (c != ''):
            data.append(int(c,16))
    print (data)
    
    x = range(0,len(data))#传入两个参数时,第一个参数作为起始位,第二个参数为结束位,第三个参数是步进值(默认为1)
    y = data
    plt.xlabel('时间')
    plt.ylabel('deal_car')
        
    plt.plot(x,y,'bo') #添加'o'则变为散点图,否则各点自动连线
    plt.show()
    
  2. 从文本数据中依据数据帧头提取转换四字节16进制数据,转换为十进制进行绘制表。
    import ctypes
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    fp = open('test.txt')
    content = fp.read()
    
    frame_state = 0
    d = content.split(' ')
    data = list()
    while len(d): #必须保证文本内最后的光标紧跟着数据,不能有空格,否者此代码会卡死
    	 if(frame_state == 0):
        	if(len(d) >= 3):
          	  if (d[0] == 'FF') and (d[1] == 'A5') and (d[2] == '5A'):
               	 frame_state = 1
               	 del d[0:3]
           	 else:
                del d[0]
                frame_state = 0
    
    	elif (len(d) >= 4):
        
            dd = d[0]+d[1]+d[2]+d[3]
            print(dd)
            data.append(int(dd,16)- 4294967296)#若是负数则需要减去2的32次方,正数则不需要
            frame_state += 1
            if(frame_state == 11):
                frame_state = 0
            del d[0:4]
    	 else:
            break
        
    print (data)
    x = range(0,len(data))#传入两个参数时,第一个参数作为起始位,第二个参数为结束位,第三个参数是步进值(默认为1)
    y = data
    plt.xlabel('时间')
    plt.ylabel('deal_car')
        
    plt.plot(x,y,'b*') #添加'o'则变为散点图,否则各点自动连线
    plt.show()
    
  3. 单个数值进制转换
    ec = int(input("输入数字:"))
    print("十进制数为:", dec)
    print("转换为二进制为:", bin(dec))
    print("转换为八进制为:", oct(dec))
    print("转换为十六进制为:", hex(dec))
    print(int('110',2)) #把二进制的110输出成十进制
    
  4. 负整数十进制转换到十六进制
    def tohex(val, nbits):
    return hex((val + (1 << nbits)) % (1 << nbits))
    
    print (tohex(-28,32))
    print (tohex(28,32))
    
  5. 补码
    #求补码(1字节)代表的负数
    第一步:把这个补码当作无符号数来读取,得到结果是255
    第二步:把第一步的结果减去256,得到的差就是所求的负数。
    这里是1个字节,减去的应该是28次方,
    如果是2个字节,减去的应该是216次方,
    如果是4个字节,减去的应该是232次方。
    
    #求负数(1字节)的补码
    第一步:负数加上256      -128+256=128
    第二步:把上面的结果用二进制表示1000 0000这就是负数的补码
    
  6. 整型与浮点型的转换
    (1)将4个字节的十进制转换成一个float数值
    import struct
    x = [67, 20, 121, 71]
    a =struct.unpack('<f', struct.pack('4b', *x))[0]
    
    (2)将4个字节的十六进制转换成一个float数值[负数也适用]
    from ctypes import *
    def convert(s):                      #将十六进制转换为浮点数
    i = int(s, 16)                   
    cp = pointer(c_int(i))           
    fp = cast(cp, POINTER(c_float))
    return fp.contents.value        
    print (convert("41499499"))
    
    #或者
    import ctypes
    def convert(s):                      #将十六进制转换为浮点数
    i = int(s, 16)                   # convert from hex to a Python int
    cp = ctypes.pointer(ctypes.c_int(i))           # make this into a c integer
    fp = ctypes.cast(cp, ctypes.POINTER(ctypes.c_float))  # cast the int pointer to a float pointer
    return fp.contents.value         # dereference the pointer, get the float
    print (convert("41499499"))   # returns 1.88999996185302734375E1
    
    (3)一个float变量转成内存的4个字节十进制
    import struct
    byte = struct.pack('f', 523432.523424)
    ls = [i for i in byte]
    print(ls)
    
    (4)将float变量转换为十六进制
    import struct                
    byte = struct.pack('f', 13.4 )
    byte = byte[: : -1]           #反序
    data =list()
    for i in byte:
    	data.append(hex(i))
    print (data)
    
  7. struct模块打包二进制数据
    f=open('s_data.bin','wb')
    import struct
    s=b'Allen'  #/字符串前面b不可缺少
    data=struct.pack('>i5si',7,s,8)
    print(data)
    f.write(data)
    f.close()
    
    a,b,c=struct.unpack('>i5si',data)
    print(a,b,c)
    b=b.decode('utf-8')#要将bytes字符串转换为unicode字符串
    print(b)
    f2=open('b.txt','w')
    f2.write(b)
    f2.close()
    
  8. 字符转ascii码
    pw = input(':')#输入需转换为ascii码的字符串
    temp = []       #创建加密字符空列表
    for i in pw:    #字符转ascii码(因为不能直接将字符串直接转换为ascii码,所以只能一个一个转换)
        x = hex(ord(i))  #将pw中的每一个字符转换为ascii码[转换为8进制改为oct,16进制hex]
        temp.append(x)   #将每一个字符添加到列表中
    print(temp)              #ASCII输出
    print('%s '*len(temp)%tuple(temp))#字符串输出
    
  9. 将一个字符串转换为相应的_进制串
    def str_to_hex(s):
    return ' '.join([hex(ord(c)).replace('0x', '') for c in s])
    str_to_hex("hello")
    
    def hex_to_str(s):
    return ''.join([chr(i) for i in [int(b, 16) for b in s.split(' ')]])
    
    def str_to_bin(s):
    return ' '.join([bin(ord(c)).replace('0b', '') for c in s])
    
    def bin_to_str(s):
    return ''.join([chr(i) for i in [int(b, 2) for b in s.split(' ')]])
    
  10. 将一个字符串转换为相应的_进制串
    #从界面输入框中获取字符
    data = input.get()
    #删除所有空格会转换为list模式
    data1 = data.split( )  
    #从list模式—>str模式
    data2 = ''.join(data1)
    #若想str模式——>list模式   
    list = list(str)
    #在str模式下可以将字符按照十六进制格式发送:cd -----> 0xcd
    binascii.a2b_hex(senddata2)
    #串口将十六进制格式的字符发送出
    N = self.ser.write(binascii.a2b_hex(senddata2))   N为发送字符数目
    
  11. Tkinter做界面之颜色
	#FFC0CB—— Pink 粉红
	#DC143C—— Crimson 深红/猩红
	#FFF0F5——LavenderBlush 淡紫红
	#DB7093——PaleVioletRed 弱紫罗兰红
	#FF69B4——HotPink 热情的粉红
	#FF1493——DeepPink 深粉红
	#C71585——MediumVioletRed 中紫罗兰红
	#DA70D6——Orchid 暗紫色/兰花紫
	#D8BFD8——Thistle 蓟色
	#DDA0DD——Plum 洋李色/李子紫
	#EE82EE——Violet 紫罗兰
	#FF00FF——Magenta 洋红/玫瑰红
	#FF00FF——Fuchsia 紫红/灯笼海棠
	#8B008B——DarkMagenta 深洋红
	#800080——Purple 紫色
	#BA55D3——MediumOrchid 中兰花紫
	#9400D3——DarkViolet 暗紫罗兰
	#9932CC——DarkOrchid 暗兰花紫
	#4B0082——Indigo 靛青/紫兰色
	#8A2BE2——BlueViolet 蓝紫罗兰
	#9370DB——MediumPurple 中紫色
	#7B68EE——MediumSlateBlue 中暗蓝色/中板岩蓝
	#6A5ACD——SlateBlue 石蓝色/板岩蓝
	#483D8B——DarkSlateBlue 暗灰蓝色/暗板岩蓝
	#E6E6FA——Lavender 淡紫色/熏衣草淡紫
	#F8F8FF——GhostWhite 幽灵白
	#0000FF——Blue 纯蓝
	#0000CD——MediumBlue 中蓝色
	#191970——MidnightBlue 午夜蓝
	#00008B——DarkBlue 暗蓝色
	#000080——Navy 海军蓝
	#4169E1——RoyalBlue 皇家蓝/宝蓝
	#6495ED——CornflowerBlue 矢车菊蓝
	#B0C4DE——LightSteelBlue 亮钢蓝
	#778899——LightSlateGray 亮蓝灰/亮石板灰
	#708090——SlateGray 灰石色/石板灰
	#1E90FF——DodgerBlue 闪兰色/道奇蓝
	#F0F8FF——AliceBlue 爱丽丝蓝
	#4682B4——SteelBlue 钢蓝/铁青
	#87CEFA——LightSkyBlue 亮天蓝色
	#87CEEB——SkyBlue 天蓝色
	#00BFFF——DeepSkyBlue 深天蓝
	#ADD8E6——LightBlue 亮蓝
	#B0E0E6——PowderBlue 粉蓝色/火药青
	#5F9EA0——CadetBlue 军兰色/军服蓝
	#F0FFFF——Azure 蔚蓝色
	#E0FFFF—— LightCyan 淡青色
	#AFEEEE——PaleTurquoise 弱绿宝石
	#00FFFF——Cyan 青色
	#00FFFF——Aqua 浅绿色/水色
	#00CED1——DarkTurquoise 暗绿宝石
	#2F4F4F——DarkSlateGray 暗瓦灰色/暗石板灰
	#008B8B——DarkCyan 暗青色
	#008080——Teal 水鸭色
	#48D1CC——MediumTurquoise 中绿宝石
	#20B2AA——LightSeaGreen 浅海洋绿
	#40E0D0——Turquoise 绿宝石
	#7FFFD4——Aquamarine 宝石碧绿
	#66CDAA——MediumAquamarine 中宝石碧绿
	#00FA9A——MediumSpringGreen 中春绿色
	#F5FFFA——MintCream 薄荷奶油
	#00FF7F——SpringGreen 春绿色
	#3CB371——MediumSeaGreen 中海洋绿
	#2E8B57——SeaGreen 海洋绿
	#F0FFF0——Honeydew 蜜色/蜜瓜色
	#90EE90——LightGreen 淡绿色
	#98FB98——PaleGreen 弱绿色
	#8FBC8F——DarkSeaGreen 暗海洋绿
	#32CD32——LimeGreen 闪光深绿
	#00FF00——Lime 闪光绿
	#228B22——ForestGreen 森林绿
	#008000——Green 纯绿
	#006400——DarkGreen 暗绿色
	#7FFF00——Chartreuse 黄绿色/查特酒绿
	#7CFC00——LawnGreen 草绿色/草坪绿
	#ADFF2F——GreenYellow 绿黄色
	#556B2F——DarkOliveGreen 暗橄榄绿
	#9ACD32——YellowGreen 黄绿色
	#6B8E23——OliveDrab 橄榄褐色
	#F5F5DC——Beige 米色/灰棕色
	#FAFAD2——LightGoldenrodYellow 亮菊黄
	#FFFFF0—— Ivory 象牙色
	#FFFFE0——LightYellow 浅黄色
	#FFFF00——Yellow 纯黄
	#808000——Olive 橄榄
	#BDB76B——DarkKhaki 暗黄褐色/深卡叽布
	#FFFACD——LemonChiffon 柠檬绸
	#EEE8AA——PaleGoldenrod 灰菊黄/苍麒麟色
	#F0E68C——Khaki 黄褐色/卡叽布
	#FFD700——Gold 金色
	#FFF8DC——Cornsilk 玉米丝色
	#DAA520——Goldenrod 金菊黄
	#B8860B——DarkGoldenrod 暗金菊黄
	#FFFAF0——FloralWhite 花的白色
	#FDF5E6——OldLace 老花色/旧蕾丝
	#F5DEB3——Wheat 浅黄色/小麦色
	#FFE4B5——Moccasin 鹿皮色/鹿皮靴
	#FFA500——Orange 橙色
	#FFEFD5——PapayaWhip 番木色/番木瓜
	#FFEBCD——BlanchedAlmond 白杏色
	#FFDEAD——NavajoWhite 纳瓦白/土著白
	#FAEBD7——AntiqueWhite 古董白
	#D2B48C——Tan 茶色
	#DEB887——BurlyWood 硬木色
	#FFE4C4——Bisque 陶坯黄
	#FF8C00——DarkOrange 深橙色
	#FAF0E6——Linen 亚麻布
	#CD853F——Peru 秘鲁色
	#FFDAB9——PeachPuff 桃肉色
	#F4A460——SandyBrown 沙棕色
	#D2691E——Chocolate 巧克力色
	#8B4513——SaddleBrown 重褐色/马鞍棕色
	#FFF5EE——Seashell 海贝壳
	#A0522D——Sienna 黄土赭色
	#FFA07A——LightSalmon 浅鲑鱼肉色
	#FF7F50——Coral 珊瑚
	#FF4500——OrangeRed 橙红色
	#E9967A——DarkSalmon 深鲜肉/鲑鱼色
	#FF6347——Tomato 番茄红
	#FFE4E1——MistyRose 浅玫瑰色/薄雾玫瑰
	#FA8072——Salmon 鲜肉/鲑鱼色
	#FFFAFA——Snow 雪白色
	#F08080——LightCoral 淡珊瑚色
	#BC8F8F——RosyBrown 玫瑰棕色
	#CD5C5C——IndianRed 印度红
	#FF0000——Red 纯红
	#A52A2A——Brown 棕色
	#B22222——FireBrick 火砖色/耐火砖
	#8B0000——DarkRed 深红色
	#800000——Maroon 栗色
	#FFFFFF——White 纯白
	#F5F5F5——WhiteSmoke 白烟
	#DCDCDC——Gainsboro 淡灰色
	#D3D3D3—— LightGrey 浅灰色
	#C0C0C0——Silver 银灰色
	#A9A9A9——DarkGray 深灰色
	#808080——Gray 灰色
	#696969——DimGray 暗淡灰
	#000000——Black 纯黑'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值