23 比较共享单车各用户类别的比例

学习目标/基础知识

学习目标

数组形状的改变

数组形状的改变

数组合并

竖直方向合并数组
import os
import numpy as np
import matplotlib.pyplot as plt

data_path = '/Users/miraco/PycharmProjects/DataMining/bikeshare'
data_filenames = ['2017-q1_trip_history_data.csv', '2017-q2_trip_history_data.csv',
                  '2017-q3_trip_history_data.csv','2017-q4_trip_history_data.csv']

#结果保存路径

output_path = './bikeshare/output'
if not os.path.exists(output_path):   #如果不存在就新建一个
    os.makedirs(output_path)


def collect_and_process_data():   #数据获取和数据处理
    member_type_list = []
    for data_filename in data_filenames:
        data_file = os.path.join(data_path, data_filename)
        print(data_file)
        # 读数据默认读取是浮点数, 但这个csv数据类型,各种还有年月日的,保险起见都用字符串类型
        data_arr = np.loadtxt(data_file, delimiter=',', dtype='str', skiprows=1)  # 读进来的数据
        member_type_col = np.core.defchararray.replace(data_arr[:,-1],'"','') #获取最后一列并去掉双引号,
        # 默认一位数据以行向量存储,想变成列向量就用reshape,不知道要多少行没事,该维度加上-1,python自动帮你算
        member_type_col = member_type_col.reshape(-1,1)
        member_type_list.append(member_type_col)
    year_member_type = np.concatenate(member_type_list)
    return year_member_type
def analyze_data(year_member_type):   #数据分析
    n_member = year_member_type[year_member_type == 'Member'].shape[0]  #会员行数
    n_casual = year_member_type[year_member_type == 'Casual'].shape[0]  #非会员行数
    return [n_member,n_casual]


def save_and_show_results(n_users):          #数据保存和展示
    plt.figure()
    plt.pie(
        n_users,  #哪个变量要画饼
        labels = ['Member','Casual'],     #变量的标签
        autopct = '%.2f%%',   #显示数目百分比
        shadow = True,       #阴影饼状图
        explode = [0,0.05],   #使各个扇形彼此分离,列表内的值是距离圆心的offset
    )
    plt.axis('equal') #保证是个圆饼,不是扁饼,因为默认是扁的
    plt.tight_layout()
    plt.savefig(os.path.join(output_path,'piechart.png'))
    plt.show()

def main():
    year_member_type = collect_and_process_data()
    n_users = analyze_data(year_member_type)
    save_and_show_results(n_users)

if __name__ == '__main__':
    main()

值得注意的地方

plt.pie(
    n_users,  #哪个变量要画饼
    labels = ['Member','Casual'],     #变量的标签
    autopct = '%.2f%%',   #显示数目百分比
    shadow = True,       #阴影饼状图
    explode = [0,0.05],   #使各个扇形彼此分离,列表内的值是距离圆心的offset
)
plt.axis('equal')  #保证是个圆饼,不是扁饼,因为默认是扁的

知识点

知识点

练习

使用饼状图可视化不同气温的天数占比

  • 题目描述:将1-3个月份的气温数据进行合并,并使用饼状图可视化所有数据的零上气温和零下气温的天数占比情况。

  • 题目要求:

  • 使用NumPy进行数组合并

  • 使用Matplotlib进行可视化

  • 数据文件:

  • 数据源下载地址:https://video.mugglecode.com/data_temp.zip,下载压缩包后解压即可

  • 201801_temp.csv、201802_temp.csv、201803_temp.csv分别包含了2018年1-3月北京的气温(每日的最低温度)。每行记录为1天的数据。

  • 每个文件中只包含一列气温数据:temperature为摄氏温度
    使用Matplotlib提供的pie()(https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pie.html)进行饼状图可视化。

import os
import numpy as np
import matplotlib.pyplot as plt

file_list = ['/Users/miraco/PycharmProjects/DataMining/bikeshare/data_temp/201802_temp.csv',
'/Users/miraco/PycharmProjects/DataMining/bikeshare/data_temp/201801_temp.csv',
'/Users/miraco/PycharmProjects/DataMining/bikeshare/data_temp/201803_temp.csv'
]
output_path = './bikeshare/output'
if not os.path.exists(output_path):   #如果不存在就新建一个
    os.makedirs(output_path)


#数据读取
data_list = []
for file in file_list:
    data = np.loadtxt(file, skiprows= 1, delimiter= ',', dtype = 'int')
    data_list.append(data.reshape(-1,1))


all_data = np.concatenate(data_list)
total_count = [
    all_data[all_data[0:] <= 0].shape[0],
    all_data[all_data[0:] > 0].shape[0]
]
np.savetxt(
    os.path.join(output_path,'temperrate.csv'),
    np.array([total_count]),#.reshape(1,-1),
    header='Over 0, Under 0',
    delimiter=',',
    comments='',
    fmt= '%d'
)
plt.figure(figsize = (4,4))

plt.axis('equal')

plt.pie(
    total_count,
    labels = ['colder\n than 0', 'warmer\n than 0'],
    autopct = '%.2f%%',
    shadow = True,
    explode = [0.1,0]
)
plt.tight_layout()
plt.title('3 months temperature statistics')




plt.savefig(os.path.join(output_path,'temperature_pie.png'))
plt.show()

存在的问题

问题1:

存数据的时候一开始我是这样写的:

np.array([total_count])

但是这时候生成的数据是列向量,我想变成行的。那么排查一下问题。
问题在数据转换的时候,就是np.array(total_count)时候,这个会自动转化成列向量的,怎么办呢?
total_count的内容是[73 17],但是np.array(total_count)会转换成[73 17],这是个列向量,不是行向量,如果是行向量的话,应该是[[73 17]],那么怎么办?

  1. transpose()?
    这个对一维数组不起作用,省省吧。
    2.reshape(1,-1)
    这个可以有。
  2. total_count列表直接外套一个中括号,构建行。
    这个可以有。
    试试打印下来:
print(np.array(total_count))
print(np.array(total_count).transpose())
print(np.array(total_count).reshape(1,-1))
print(np.array([total_count]))
>>>
[73 17]
[73 17]
[[73 17]]
[[73 17]]

问题2

画布太小,字显示不全,即便用了`plt.tight_layout()怎么办呢?


画布太小,字显示不全

所以要调整画布大小,善用字间换行。
plt.figure(figsize = (4,4))
labels = ['colder\n than 0', 'warmer\n than 0']

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容