Help us understand the problem. What is going on with this article?

Pythonを使った超基本的作業メモ

Pythonを使った超基本的な作業のメモを書いていきます。


以下の様な何の変哲もないsample_result.csvというCSVファイルに対し、超基本的な集計作業を行っていきます。

image.png


#ライブラリをインポート。
import pandas as pd
import matplotlib.pyplot as plt
import os
#CSVファイルを読み込み。
df = pd.read_csv('data/sample_result.csv')
#df = pd.read_csv('data/sample_result.csv', encoding="SHIFT-JISx0213")というように書く場合もあります。
display(df)

image.png

#読み込んだファイル名を表示
name = os.path.basename('data/sample_result.csv')
print(name)

これは特に意味のない作業の様に見えますが、新しくcsvファイルを作成する時、その名前をつける際にこのnameを元にすることもあります。

x = df['受験者']
y = df['数学']
print("数学の平均点は"+str(round(sum(y))/len(y))+"です。")

このコードを実行すると、下の様な文章が表示されます。

image.png

さて、次に棒グラフを描いて見ましょう。

plt.bar(x,y)

image.png

そうすると、皆さんご存知の通り(?)文字化けします。
そこで以下の様なコードを使います。

!pip install japanize-matplotlib
import japanize_matplotlib

※自分の場合はこの方法で上手くいきましたが、他の方法もネットで検索すると色々出てきます。

これで先ほどのコードをもう一度実行すると、今度はきちんと文字が現れました。

image.png

タイトルや軸名を加えて、図のサイズも変えてみましょう。

plt.figure(figsize=(15,6))
plt.bar(x,y)
plt.title("数学の成績")
plt.xlabel("受験者")
plt.ylabel("点数")

image.png

ヒストグラムも描いてみましょう。

plt.hist(df["英語"])

image.png

散布図も描いてみましょう。

z = df['英語']
plt.scatter(y,z)

image.png

因みに以下の様に書くと背景が黒くなります。

z = df['英語']
#先に書かないとダメ。
plt.style.use("dark_background")
plt.scatter(y,z)

image.png

特定の列だけ取り出すには、以下の様に書きます。

A = df.loc[:,['受験者','英語']]
display(A)

image.png

ここでちょっと保存してみましょう。最初の方で読み込んでおいたファイル名のnameを使います。

name_split = name.split(".")
name_1 = name_split[0]
A.to_csv('data/'+name_1+'_A.csv', encoding="SHIFT-JISx0213")

image.png

特定の行だけ取り出すのは以下の様になります。

P = df.loc[[1,3],:]
display(P)

image.png

次は国語の成績順に並び替えてみましょう。

B = df.sort_values(['国語'],ascending=[False])
display(B)

image.png

「1組で、国語が70点より上」のデータを取り出す場合は以下の様になります。

C = df.query('クラス == ["1組"] & 国語 > 70')
display(C)
#あくまで同じテーブル内の情報しか使えません。他のテーブル内のカラム名をクエリ内に書いてもダメ。

image.png

クラスごとの平均点を見るには以下の様に書きます。

df.groupby('クラス').mean()

image.png

教科ごとの相関係数を見てみましょう。

import seaborn as sns
#cmap ='coolwarm'などもアリ。
sns.heatmap(df.corr(), cmap='Blues',annot = True)

image.png

全体の基本的な統計量を表示してみましょう。

df.describe()

image.png

意外とあまり本に載っていませんが、空欄の列を作るには以下の様に書きます。

df['合計'] = ''
display(df)

#T = df['合計'] = '',print(T)と書いてもダメ。

image.png

ついでに合計点の計算。

#合計点の計算
i = 0
while i < len(df):
    df['合計'][i] = df['国語'][i] + df['英語'][i] + df['数学'][i]
    i = i + 1
df

image.png

naoya_suzuki
機械学習の勉強頑張ります。
https://sites.google.com/site/suzukinaoya2013/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした