2日間の成果
どうも、noteを投稿しないことになれそうなhuloです。笑
この二日間エラーと向き合ってきてnoteを投稿する余裕がなかったので、二日間で分かったことを書きます。
二日間何していたか
この二日間まず何に取り組んでいたかというと前回のnoteにも書いたのですが、東大データマイニング入門講座というものがネット上にあったのでpython学習の一環として取り組んでいました。そこでcsv、pandasといったモジュールを使ってファイルの読み込み、データの集計などを行っていました。そのなかで、unicodedecodeerrorやattributeerrorなどのエラーがおきてなんやこれ状態となってエラーの種類から対策などを二日間調べていました。
なぜエラーが起きていたのか
結論を先に言うと、データとしていた読み込んでいたcsvファイルが使えない状況になっていたことです。もともと、pdfファイルとしてダウンロードしていたので、拡張子を書き換えるだけではならなかったので、wpsにpdfファイルをcsvファイルに変換する機能があったのでそれを使いました。するとすべてのエラーがきれいさっぱりなくなりました。
<イメージ>
xxxx.csv.pdf
pdfの拡張子を消せば、csvファイルとして読み込めるだろと思い込んでいた自分がよくなかったし、コードを書いているときにも薄々ファイルに問題があるのではと感じでいました。
二日間で調べたエラー
UnicodeDecodeError
ModuleNotFoundError
ArgumentOutOfRangeExceptionなど、、
メモしていなくて履歴を探ってあったのが、この三つでした。もっとあったような気がしたのですが、この三つはよく出たように思います。
使ったサイト
解決するために使ったサイトを紹介します。
これらのサイトを中心に、あとはcopilotを使いました。テラテイルはおすすめです。初心者でも質問しやすいようにテンプレートが準備してあるので質問しやすいです!!
コードメモ
import pandas as pd
df=pd.read_csv("user_score.csv")
len(df[(df["kokugo"]>df["kokugo"].mean()) & (df["shakai"]>df["shakai"].mean()) & (df["rika"]>df["rika"].mean()) & (df["sugaku"]>df["sugaku"].mean())])
#df[(df['kokugo'] > 50) & (df['rika'] > 50)]
import pandas as pd
df=pd.read_csv("user_score.csv")
def score_sum(df):
df['sum']=df[(["kokugo","rika","sugaku","shakai"])].sum(axis=1)
return df
score=score_sum(df)
score.head(5)
import pandas as pd
score = pd.read_csv('user_score.csv')
score.head(5)
import pandas
score = pandas.read_csv('user_score.csv')
score.describe()
import pandas as pd
df=pd.read_csv("user_score.csv")
len(df[(df["kokugo"]>df["kokugo"].mean()) & (df["shakai"]>df["shakai"].mean()) & (df["rika"]>df["rika"].mean()) & (df["sugaku"]>df["sugaku"].mean())])
#df[(df['kokugo'] > 50) & (df['rika'] > 50)]
import pandas as pd
df=pd.read_csv("user_score.csv")
def score_sum(df):
df['sum']=df[(["kokugo","rika","sugaku","shakai"])].sum(axis=1)
return df
score=score_sum(df)
score.head(5)
import pandas as pd
df=pd.read_csv("user_score.csv")
def score_sum(df):
df['sum']=df[(["kokugo","rika","sugaku","shakai"])].sum(axis=1)
return df
df=score_sum(df)
def score_top3(df):
df=df.sort_values(["sum"],ascending=False)
return df.head(3)
score_top3(df)
import pandas as pd
df=pd.read_csv("user_score.csv")
def score_sum(df):
df['sum']=df[(["kokugo","rika","sugaku","shakai"])].sum(axis=1)
return df
df=score_sum(df)
def score_hist(df):
results=[]
min = 0
max = 50
#for i in range(8):
results.append(len(df[(df["sum"]>=0)& (df["sum"]<=50)]))
results.append(len(df[(df["sum"]>=51)& (df["sum"]<=100)]))
results.append(len(df[(df["sum"]>=101)& (df["sum"]<=150)]))
results.append(len(df[(df["sum"]>=151)& (df["sum"]<=200)]))
results.append(len(df[(df["sum"]>=201)& (df["sum"]<=250)]))
results.append(len(df[(df["sum"]>=251)& (df["sum"]<=300)]))
results.append(len(df[(df["sum"]>=301)& (df["sum"]<=350)]))
results.append(len(df[(df["sum"]>=351)& (df["sum"]<=400)]))
# min = max+1
# max= max+50
return results
score_hist(df)
import pandas as pd
user_class = pd.read_csv('user_class.csv')
user_score = pd.read_csv('user_score.csv')
def score_sum(df):
df['sum']=df[(["kokugo","rika","sugaku","shakai"])].sum(axis=1)
return df
user_score=score_sum(user_score)
def score_by_class(df1,df2):
new_df = pd.merge(df1, df2, on='user')
return new_df.groupby("class")[["sum"]].max()
score_by_class(user_class,user_score).to_dict()
このコードはこの配布資料の課題を解くために組みました。
githubにもコミットするのでよかったらのぞいてみてください!