職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

ヒストグラムをPythonで書くには

2021年05月28日 | Python
ヒストグラム

【開発環境】
OS:Win10(64ビット)
言語:Python3.8.5(64bit)
Python の統合開発環境:IDLE
IDLEの操作は別サイト参照のこと
NumPy、pandas、Matplotlibライブラリのインストール

【ヒストグラムを作る】
ヒストグラムを作るには
データ全体を一定の間隔に区切って、それぞれの区間にいくつデータがあるかを数える必要がある。今回は0~1.0未満の少数の集まり全体を、10分割して、それぞれの区間にいくつのデータが有るか?計算する。

collectionsモジュールについて
Python 3.8.9 (tags/v3.8.9:a743f81, Apr 2 2021, 11:10:41) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> import collections
>>> counter = collections.Counter([1,1,2,2,2,3])
>>> counter
Counter({2: 3, 1: 2, 3: 1})
>>> counter[2]
3
>>>
◆ヒストグラムのサンプルプログラム1
「ヒストグラム.py」ファイルにコードを書く
import sqlite3
import itertools
import random
import collections
import kame

conn = sqlite3.connect('my_database.db')

iter_cnt = itertools.count(1)
data = []


for i in range(500):
num = random.random()
conn.execute('insert into data_table values({},{})'.format(next(iter_cnt),num))


cur = conn.execute('select random_val from data_table')

for row in cur:
data.append((int(row[0]*10)))

print(data[:10] )

hist_data = collections.Counter(data)
print(hist_data)

hist_kame = kame.kame()
hist_kame.histogram(hist_data)
実行
======================= RESTART: D:\pg\Python38\ヒストグラム.py ======================
[9, 3, 2, 1, 4, 9, 6, 8, 6, 5]
Counter({6: 60, 5: 60, 4: 57, 1: 54, 8: 53, 9: 52, 0: 47, 3: 44, 7: 38, 2: 35}


ただし、kameモジュールを下記のように書き換える。
kame.pyのコード
import turtle

class kame(turtle.Turtle):
def __init__(self):
super().__init__()
self.shape('turtle')
self.shapesize(2,2)
#追加 1
def draw_bar(self,height,width=40):
self.left(90)
self.forward(height)
self.right(90)
self.forward(width)
self.right(90)
self.forward(height)
self.left(90)
 #追加2
def histogram(self,data,mag=2,x0=-200,y0=-150):
self.penup()
self.goto(x0,y0)
self.pendown()
self.begin_fill()
for i in range(10):
self.draw_bar(data[i]*mag)
self.goto(x0,y0)




◆ヒストグラムのサンプルプログラム2
【ライブラリのインストール】
C:\Users\shyok>pip install numpy
Collecting numpy
Downloading numpy-1.20.3-cp38-cp38-win_amd64.whl (13.7 MB)
|████████████████████████████████| 13.7 MB ...
Installing collected packages: numpy
Successfully installed numpy-1.20.3
WARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.
You should consider upgrading via the 'd:\pg\python38\python.exe -m pip install --upgrade pip' command.

C:\Users\shyok>pip install matplotlib
Collecting matplotlib
Downloading matplotlib-3.4.2-cp38-cp38-win_amd64.whl (7.1 MB)
|████████████████████████████████| 7.1 MB 6.8 MB/s
Collecting cycler>=0.10
Downloading cycler-0.10.0-py2.py3-none-any.whl (6.5 kB)
Collecting pyparsing>=2.2.1
Downloading pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)
|████████████████████████████████| 67 kB ...
Collecting python-dateutil>=2.7
Downloading python_dateutil-2.8.1-py2.py3-none-any.whl (227 kB)
|████████████████████████████████| 227 kB ...
Collecting kiwisolver>=1.0.1
Downloading kiwisolver-1.3.1-cp38-cp38-win_amd64.whl (51 kB)
|████████████████████████████████| 51 kB 4.1 MB/s
Requirement already satisfied: numpy>=1.16 in d:\pg\python38\lib\site-packages (from matplotlib) (1.20.3)
Collecting pillow>=6.2.0
Downloading Pillow-8.2.0-cp38-cp38-win_amd64.whl (2.2 MB)
|████████████████████████████████| 2.2 MB ...
Requirement already satisfied: six in c:\users\shyok\appdata\roaming\python\python38\site-packages (from cycler>=0.10->matplotlib) (1.15.0)
Installing collected packages: cycler, pyparsing, python-dateutil, kiwisolver, pillow, matplotlib
Successfully installed cycler-0.10.0 kiwisolver-1.3.1 matplotlib-3.4.2 pillow-8.2.0 pyparsing-2.4.7 python-dateutil-2.8.1
WARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.
You should consider upgrading via the 'd:\pg\python38\python.exe -m pip install --upgrade pip' command.

matplotlibでヒストグラムを書く場合、
「ヒストグラム.py」にコード書いて、保存する


import numpy as np
import matplotlib.pyplot as plt

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

fig = plt.figure()
ax = fig.add_subplot(1,1,1)

ax.hist(x, bins=50)→hist(データ、bins=ビン数)のように指定する。
ax.set_title('first histogram $\mu=100,\ \sigma=15$')
ax.set_xlabel('x')
ax.set_ylabel('freq')
fig.show()

実行する
====================== RESTART: D:/pg/Python38/ヒストグラム2.py ======================
>>>

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« データベースのその他の機能 | トップ | Rubyのダウンロード »
最新の画像もっと見る

コメントを投稿

Python」カテゴリの最新記事