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 純黑’’’
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章