pandas 数据分析

最近稍微研究了一下pandas如何做数据分析,本文主要记录下常用的用法:去重,分组计数,分组求和求平均,画直方图,画热力图.相关文档建议参考pandas的文档http://pandas.pydata.org/pandas-docs/stable/cookbook.html

题外话

首先说下用了pandas真的对java处理excel深恶痛绝...强类型转换经常需要我们进行复杂的变量类型判断,python这方面简单的多,比如时间,读成文本然后格式化,真的很方便

import pandas as pd
path = r'/app/web/pt'
os.chdir(path)
df = pd.read_excel(r'test.xls', na_values=['null'], dtype={'日期': str})
df['日期'] = pd.to_datetime(df['日期'])
df.to_excel(r'result.xls')

读写excel就是这么容易,分分钟打算放弃java

1.去重

df.drop_duplicates("a2") //以a2列为基准去重
df.drop_duplicates(["a2","a3"]) //
df.drop_duplicates("a2",keep='first') //去重 保留第一个

2.分组计数

df = df.groupby(['row1', 'row2']).size() //分组计数
df = df.groupby(['row1', 'row2']).mean() //分组求平均

3.画直方图

画直方图是画图里最简单的,把list放在plt的hist里面做参数即可

path = r'/app/web/pt'
os.chdir(path)
df = pd.read_excel(r'test.xlsx', na_values=['nan'])
new_seris = df.loc[(df['区域'] =='D'),'归类后']
values = []
values = new_seris.tolist()
plt.xlabel("归类")
plt.ylabel("频次")
plt.hist(values)
plt.title(u"A区问题分布直方图")
plt.show()

4.根据地址求经纬度

照搬百度api,不过自己得申请个vk码,对并发量和次数有限制.不过可以多帐号多线程去做

def check(address):
    time.sleep(2)
    try:
        r = requests.get(
            "http://api.map.baidu.com/place/v2/search?query=" + address + "®ion=北京&output=json&ak=nLpN5iKztxIWsPqgwsyrruUG")
    except:
        return 0, 0
    s = json.loads(r.text)
    print(r.text)
    try:
        lat = s["results"][0]["location"]["lat"]
        lng = s["results"][0]["location"]["lng"]
        return lat, lng
    except:
        return 0, 0

5 根据经纬度画热力图

同样的百度热力图由api,只要修改内部的经纬代码,换上自己的帐号即可,这里截图看下效果


2018-06-11 22-37-08 的屏幕截图.png

结束语

以上是最近的一点小研究的总结,当作一个记录而已.谢谢阅读
个人博客 欢迎访问~

祝大家编码愉快,工作愉快,欢迎关注我的公众号,一起分享交流


Java技术小栈

你可能感兴趣的:(pandas 数据分析)