Python使用总结(1)

机器学习的编程语言,相较于R,python好像更容易一些,函数式编程也挺形象。

但是,每一门语言都有一些自己约定俗成的特点,更别说那些接口、包的使用。这些在具体的使用中,会让人焦头烂额。

这篇博客是总结我这段时间使用python的一些经验,并不是python的特点总结,只是总结一些我遇到的坑和解决方法,以及我对于python的理解。

1.将时间戳转成格式化的时间表示(datetime)

timeArr=datetime.datetime.utcfromtimestamp(param)

return timeArr.strftime('%Y-%m-%d %H:%M:%S')

timeArr 是转化过来的时间数组,param是时间戳数组。

想要了解更详细的内容,请参考官方文档

2.列出文件夹下的所有目录(os.listdir)

list = os.listdir(dir)  
    for i in range(0, len(list)):
        path = os.path.join(dir, list[i])
        if os.path.isfile(path):
           do something with file

3.分组统计DataFrame的值(groupby)

    info_stat=data.groupby('info')
    for info,group in info_stat:
        print(info)
        print(group)

4.计算两个数据集的交集,并用图表示(plt)

plt.figure()
    #plt.subplot(121)
    ip_set=set(ip_data['suning']) & set(ip_data['vip'])
    venn2([set(ip_data['suning']),set(ip_data['vip'])],set_labels=('suning','vip'))
    plt.show()

 

5.用柱状图表示各类别占比(plt.bar)

 s = ['Android', 'Linux', 'Mac', 'Windows', 'iPad', 'iPhone']
    ua_su = df_suning.groupby('ua').size()
    ua_vip = df_vip.groupby('ua').size()
    print(ua_su, ua_vip)
    x = list(range(len(ua_su)))
    total_width, n = 0.8, 2
    width = total_width / n

    plt.bar(x, ua_su, width=width, label='suning', fc='y')
    for i in range(len(x)):
        x[i] = x[i] + width
    plt.bar(x, ua_vip, width=width, label='vip', tick_label=s, fc='r')
    plt.legend()
    plt.show()

 

6.计算字符串之间的编辑距离(Levenshtein)

# LD 最短编辑距离
    name1=list(str1)
    name2=list(str2)
    #print(name2)
    if len(name1)==0 | len(name2)==0:
        return max(len(name1),len(name2))
    dp=np.zeros((len(name1)+1,len(name2)+1))
    for i in range(len(name1)):
        dp[i][0]=i
    for i in range(len(name2)):
        dp[0][i]=i
    temp=0
    #print(temp)
    for k in range(len(name1)):
        for r in range(len(name2)):
            if name1[k]==name2[r]:
                temp=0
            else:
                temp=1
            #print(temp,name1[k],name2[r])
            dp[k+1][r+1]=min(dp[k][r],dp[k+1][r],dp[k][r+1])+temp

利用动态规划的思想,

dp[k+1][r+1]=min(dp[k][r],dp[k+1][r],dp[k][r+1])+temp

7.通过计算最长公共子序列,求字符串的相似度(LCS)

name1=list(str1)
    name2=list(str2)
    if len(name1)==0 | len(name2)==0:
        return max(len(name1),len(name2))
    dp=np.zeros((len(name1)+1,len(name2)+1))
    dp_dir=np.zeros((len(name1)+1,len(name2)+1))
    for k in range(len(name1)):
        for r in range(len(name2)):
            if name1[k]==name2[r]:
                dp[k+1][r+1]=dp[k][r]+1
                dp_dir[k+1][r+1]=1
            else:
                dp[k+1][r+1]=max(dp[k+1][r],dp[k][r+1])
                if dp[k+1][r+1]==dp[k+1][r]:
                    dp_dir[k+1][r+1]=2 # left
                else:
                    dp_dir[k+1][r+1]=3 # up
    len_lcs=dp[len(name1),len(name2)]
    str_lcs=''
    k=len(name1);r=len(name2)
    while k>0 and r>0:
        if dp_dir[k][r]==1:
            str_lcs=name1[k-1]+str_lcs
            k-=1;r-=1
        elif dp_dir[k][r]==2:
            r-=1
        else:
            k-=1
    #print(len_lcs,str_lcs)
    return len_lcs,str_lcs

8.循环计算字符串的LCS

len1 = len(str1)
    len2 = len(str2)
    cn=0
    sum_lcs_len=0
    lcs_len,lcs_str=LCS_diff(str1,str2)
    while lcs_len>0:
        sum_lcs_len += lcs_len
        cn += 1
        lcs_list=list(lcs_str)
        k=0;r=0
        name1=list(str1)
        name2=list(str2)
        str1='';str2=''
        for i in range(len(lcs_list)):
            # delete LCS of str1 & str2
            while name1[k]!=lcs_list[i]:
                str1+=name1[k]
                k+=1
            while name2[r]!=lcs_list[i]:
                str2+=name2[r]
                r+=1
            k+=1;r+=1
            #print(i, lcs_list[i], str1, str2)
        while k<len(name1):
            str1+=name1[k]
            k+=1
        while r<len(name2):
            str2+=name2[r]
            r+=1
        len1 = len(str1)
        len2 = len(str2)
        #print('====',cn,str1,str2)
        if len1==0 and len2==0:
            break
        lcs_len,lcs_str=LCS_diff(str1,str2)
    if cn==0:
        cn=1
    return (sum_lcs_len-cn+1)/(len1+len2+sum_lcs_len)

9.求ip信息(requests)

URL='http://ip.taobao.com/service/getIpInfo.php'
    try:
        r=requests.get(URL,params=ip,timeout=3)
    except requests.RequestException as e:
        print(e)
    else:
        json_data=r.json()
        #print(json_data)
        if json_data[u'code']==0:
            print('country :',json_data[u'data'][u'country'])
            print('region :', json_data[u'data'][u'region'])
            print('area :', json_data[u'data'][u'area'])
            print('city :', json_data[u'data'][u'city'])
            print('isp :', json_data[u'data'][u'isp'])
        else:
            print('error !')

ip地址输入如下:

ip={'ip':'117.64.26.9'}
ip_belongs(ip))

10.求手机号信息(phone)

def phone_beongs(phone):
    t=Phone().find(phone)
    print('area_code :',t['area_code'])
    print('province :',t['province'])
    print('zip_code :',t['zip_code'])
    print('phone :',t['phone'])
    print('phone_type :',t['phone_type'])
    print('city :',t['city'])
    return t
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值