MENU

Tags: coding

帕累托累积分布

前两天实验室师妹来问平时我们计算腹地的前百分之多少的人怎么定这个到底怎么计算,以及每次都要数据库到处数据excel算这个问题,想想自己也需要tableau连接数据库做可视化后挑选出相应的分段值,就想着写个脚本来实现。花了半个小时写了个直接读取csv输出最靠近10,20....90%分段值的数,查了下还是没搞明白是不是叫帕累托累积分布,不过应该是一种累积分布。

后续需要修改的就是让python直接读取postgresql数据库,然后在排序计算分段值,而且要提高下效率,现在的计算效率不是很高,不过现在能用就行(此处要配个罗玉龙那个又不是不能用的牌子233)。

顺便学了下github,把代码也放了上去,以后代码也都放github上。

https://github.com/imcake/pareto


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2018-11-01
# @Author  : imcake (likaike@gmail.com)
# @Link    : https://github.com/imcake

##############################################
# 计算累积频率分段值(帕累托图)
# 输入带有需要累积的值的csv文件和该值的字段名
# 输出百分之10-90对应的最相近数值
# 输出结果为字典,10:xxx, 20:xxx, ..., 90:xxx
#############################################
import pandas as pd


def get_pareto_penct(csv_name, value_column):
    data_df = pd.read_csv(csv_name, header=0)
    pencentList = []
    pencentage = 0
    for i in range(len(data_df)):
        rawList = data_df[value_column].tolist() # change colume to list
        rawList.sort(reverse=True)
        pencent = float(rawList[i]) / sum(rawList) * 100
        pencentage = pencentage + pencent # calculate the accumulated pencentage
        pencentList.append(pencentage)
    # add pencentage and raw date to a dict
    dictionary = dict(zip(pencentList, rawList))
    init_penct = [10, 20, 30, 40, 50, 60, 70, 80, 90]
    value = []
    for j in init_penct:
        # get the closest raw date of certain pencentage
        dict_key = min(pencentList, key=lambda x: abs(x - j))
        value.append(dictionary.get(dict_key))
    result_dict = dict(zip(init_penct, value))
    return result_dict


if __name__ == '__main__':
    csv_name = 'pareto.csv' # csv文件名
    value_column = 'TOTAL' # 需要累积的字段名
    print get_pareto_penct(csv_name, value_column)

作业季

期末了,最近都是final(就两个final也好意思说都是!),一个study project,一个seminar。study project就是去了Wien的那个项目,小组一起做总感觉这final也要水过去了。上周的mid-term被院长批得很惨,这周consultation老师说也不知道院长在说啥,这是要闹哪样!就水吧,小组都是这个意思。另外一个seminar其实已经没课了,跟汽车有关的内容都行,学期初选了汽车广告。小组中有个德国人,发现和他还是很讲得来的,在很多时候都只有我和他的情况下,基本还是把这个课搞定了,分析了两个广告,最后的成果是大概10分钟的视频。上周之前花了好久熟悉AE做第一个分析,昨天又花了一天把第二个也做好了。学AE花了好多时间,但现在也只是会一些基本的,不过总还是有学到点东西,虽然老觉得自己不是在干正事,折腾这折腾那就是不折腾专业。

说到不务正业,最近有时间都在看processing,看完了一本基础的,现在在看The nature of code,顺便构思自己想实现的第一个program,不出意外应该是一年半前的Boston hubway竞赛。一直觉得Urban Computing是个很有前途的领域,而自己所在的环境对这一块都没太多的重视,或者他们压根不觉得这块是规划的领域,所以也没什么人可以给建议什么的。当然这完全可能就是我的YY,这块可能就是和本专业距离太大,whatever,先做点东西出来。不管什么形式,简单可视化也好,发现点城市现象也好,都比什么都不做好。看着processing的东西,森森觉得数学没学是多么的坑爹,要填的坑真的好多妈蛋!

还有两个月不到就回国了,final结束应该还有一个半月左右, 想去峡湾,想去波罗的海三国,想去法国,想去巴尔干半岛,想玩遍德国,完全来不及的节奏好嘛!

Do something and travel around!

[caption id="" align="aligncenter" width="640"] Copenhagen[/caption]